/ / Як побудувати FacetQuery за допомогою spring-data-solr, який повертає всі документи (*: *) з solr index - java, spring, solr, solrj, spring-data-solr

Як побудувати FacetQuery за допомогою spring-data-solr, який повертає всі документи (*: *) з індексу solr - java, spring, solr, solrj, spring-data-solr

Я хочу написати FacetQuery, який може не мати жодних критеріїв, крім одного умови фільтрації (fq). Наступний запит є прикладом, який я хочу побудувати за допомогою API spring-data-solr.

http://localhost:8983/solr/jpevents/select?q=*:*&fq=categoryIds:(1101)&facet=true&facet.mincount=1&facet.limit=1&facet.field=primaryCategoryId

Як я можу встановити параметр запиту (q = *: *) у FacetQuery?

Навколишнє середовище: Я записую API пошуку на основі MVC на основі Spring-data-solr 1.0.0.RELEASE з Solr 4.4.0 і Spring 3.2.4.RELEASE.

Відповіді:

7 для відповіді № 1

Ви можете зробити це об'єднання @Query і @Facet

    @Facet(fields={"primaryCategoryId"}, minCount=1, limit=1)
@Query(value="*:*", filters="categoryIds:(?0)")
public FacetPage<JPEvents> XYZ(List<Long> categories, Pageable page);

або виконати FacetQuery використовуючи SolrTemplate.

   FacetQuery query = new SimpleFacetQuery(new SimpleStringCriteria("*:*"))
.setFacetOptions(new FacetOptions("primaryCategoryId")
.setFacetMinCount(1).setFacetLimit(1));
query.setPageRequest(pageable);
solrTemplate.queryForFacetPage(query, JPEvents.class);

1 для відповіді № 2

Я зробив щось подібне:

public static void main()
{
String url = "http://localhost:8983/solr/autocomplete";
SolrServer solrServer = new HttpSolrServer(url);
SolrQuery query = new SolrQuery();
query.set("q", "*");
query.addFilterQuery("name:*");
query.setFacet(true);
query.addFacetField("name");
System.out.println(query);
QueryResponse queryResponse = solrServer.query(query);
List<FacetField> facetFields = queryResponse.getFacetFields();
FacetField cnameMainFacetField = queryResponse.getFacetField("name");
for (Count cnameAndCount : cnameMainFacetField.getValues()) {
String cnameMain = cnameAndCount.getName();
System.out.println(cnameMain);
System.out.println(cnameAndCount.getCount());
}

Це дає мені правильні підрахунки гранованих полів. Сподіваюся, ви розумієте, що я роблю. Додавання результатів для кращого розуміння:

q=*&fq=name%3A*&facet=true&facet.field=name
a
10
an
7
w
7
m
6
and
5
c
5
p
5
d
4