2013-01-23 3 views
5

このサイトの関連する質問は終了しましたが、関連する解決策が見つかりませんでした。 SolrJとSolr4を使用したファクシミリ

フォーム

&facet=true&facet.field=country 

応答のHTTPリクエストを使用して、私のSolr4インデックスを照会国ごとのカウントと一緒にすべての異なる国が含まれています。

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

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

次は動作するようには思えないが、私は明示的に事前にすべてのグループを設定する必要がありますする必要はありません。

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

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

ので、2つの質問:

1)SolrJを使用するには、どのように私は、フィールド上のファセットと明示的にグループを指定せずにグループを返すことができますか?

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

ありがとうございました。

アップデート:私もセルゲイの応答(下記)に似た何かをしようとした

上記のコードは、サイズが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(); 
    } 
} 

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

答えて

7

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

あなたは、ファセット情報を探しました
solrQuery.addFacetField("country"); 

?それはあなたがどのフィギュア「国」の中FacetFieldsListを取得するためにQueryResponse.getFacetFields()を使用する必要があるのSolr応じてQueryResponse.getFacetFieldsgetValues.getCount

+0

Sergeyに感謝します。あなたが言及したアプローチを含めるために上記の質問を更新しました。 –

1

でなければなりません。その「国」がQueryResponse.getFacetFields().get(0)

によってidenditfiedされますが

QueryResponse.getFacetFields().get(0).getValues().get(i) 

を使用してListCountのオブジェクトを取得し、QueryResponse.getFacetFields().get(0).getValues().get(i).getName() を使用して、ファセットの値名を取得するためにその上に、その後反復して

QueryResponse.getFacetFields().get(0).getValues().get(i).getCount() 
を使用して対応する重み
関連する問題