3

1 つのフィルター条件 (fq) 以外の基準を持たない可能性がある FacetQuery を作成したいと考えています。次のクエリは、spring-data-solr API を使用して構築したい例です。

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

FacetQueryでクエリパラメータ(q=*:*)を設定するにはどうすればよいですか?

環境:私は、Solr 4.4.0 および Spring 3.2.4.RELEASE で spring-data-solr 1.0.0.RELEASE を使用して、Spring MVC ベースの検索 API を作成しています。

4

2 に答える 2

11

@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);
于 2013-12-18T06:01:28.090 に答える
1

私はこのようなことをしました:

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
于 2014-07-07T10:35:03.377 に答える