6

このサイトで関連する質問を調べましたが、関連する解決策が見つかりませんでした。

フォームの HTTP リクエストを使用して Solr4 インデックスをクエリする場合

&facet=true&facet.field=country

応答には、国ごとの数とともに、さまざまな国がすべて含まれています。

SolrJ を使用してこの情報を取得するにはどうすればよいですか? 私は次のことを試しましたが、国ごとではなく、すべての国の合計数のみを返します:

solrQuery.setFacet(true);
solrQuery.addFacetField("country");

以下は機能しているように見えますが、事前にすべてのグループを明示的に設定する必要はありません。

solrQuery.addFacetQuery("country:usa");
solrQuery.addFacetQuery("country:canada");

次に、QueryResponse オブジェクトからファセット データを抽出する方法がわかりません。

2つの質問:

1) SolrJ を使用して、フィールドをファセットし、グループを明示的に指定せずにグループを返すにはどうすればよいですか?

2) SolrJ を使用して、どのように QueryResponse オブジェクトからファセット データを抽出できますか?

ありがとう。

アップデート:

また、Sergey の応答 (以下) に似たものも試しました。

List<FacetField> ffList = resp.getFacetFields();
log.info("size of ffList:" + ffList.size());
for(FacetField ff : ffList){
    String ffname = ff.getName();
    int ffcount = ff.getValueCount();
    log.info("ffname:" + ffname + "|ffcount:" + ffcount);           
}

上記のコードは、size=1 の ffList を示しており、ループは 1 回繰り返されます。出力の ffname="country" と ffcount は、元のクエリに一致する行の総数です。

ここには国ごとの内訳はありません。

同じ solrQuery オブジェクトで、addField と addFilterQuery も呼び出していることに注意してください。これがファセットに影響するかどうかは不明です:

solrQuery.addField("user-name");
solrQuery.addField("user-bio");
solrQuery.addField("country");
solrQuery.addFilterQuery("user-bio:" + "(Apple OR Google OR Facebook)");

更新 2:

セルゲイが以下で言ったことに基づいて、私はそれを理解したと思います. FacetField.getValues() を使用して List オブジェクトを抽出しました。

List<FacetField> fflist = resp.getFacetFields();
for(FacetField ff : fflist){
    String ffname = ff.getName();
    int ffcount = ff.getValueCount();
    List<Count> counts = ff.getValues();
    for(Count c : counts){
        String facetLabel = c.getName();
        long facetCount = c.getCount();
    }
}

上記のコードでは、ラベル変数は各ファセット グループに一致し、count はそのグループに対応するカウントです。

4

2 に答える 2

7

実際には、ファセット フィールドを設定するだけで、ファセットがアクティブになります (SolrJ ソース コードを確認してください)。

solrQuery.addFacetField("country");

ファセット情報はどこで探しましたか? QueryResponse.getFacetFields( getValues.getCount)内にある必要があります

于 2013-01-23T17:09:34.923 に答える