1

日付タイプを介して取得している出力をグループ化したい。しかし、私は日時型を使用してsolrにデータを格納しています。私が使用している日付形式は

          Date format :: "yyyy-MM-dd'T'HH:mm:ss.SSSZ"

 For e.g. Date is stored in solr as "2013-03-01T20:56:45.000+00:00"

出力として必要なのは日付の数です::for.eg

   Date1:: "2013-03-01T20:56:45.000+00:00"
   Date2:: "2013-03-01T21:56:45.000+00:00"
   Date3:: "2013-03-01T22:56:45.000+00:00"
   Date3:: "2013-03-02T22:56:45.000+00:00"
   Date4:: "2013-03-02T23:56:45.000+00:00"

だから私は2つの列として出力したい::

     日付カウント
     2013-03-01 3  
     2013-03-02 2  

これが私が使っているコードです

    String url = "http://192.168.0.4:8983/solr";
SolrServer server = new HttpSolrServer(url);
SolrQuery query = new SolrQuery();


query.setQuery("*:*");
query.addFilterQuery("sessionStartTime:[2013-03-01T00:00:00Z TO 2013-03-04T24:00:00Z]");

query.add("group", "true");
query.add("group.field","uniqueId"); // uniqueId is grouping the data 
query.add("group.main","true");
query.setRows(9999);

QueryResponse rs=server.query(query);

Iterator<SolrDocument> iter = rs.getResults().iterator();

ヘルプをいただければ幸いです。

4

2 に答える 2

1

これは古い質問であることは知っていますが、これに関連する何かに取り組んでいるので、解決策を共有すると思いました。グループ化を使用しているため、rs.getResults()null になる可能性があります。SolrJ API を読み、私の側でいくつかのテストを行った後、結果が実際に希望どおりにグループ化されていることがわかります。それらにアクセスするには、次のような変数を作成します。

List<Group> groupedData = rs.getGroupResponse().getValues().get(0).getValues()

Groupクラスであることに注意してくださいorg.apache.solr.client.solrj.response.Group

次に、 を繰り返し使用してgroupedData、グループ化された値ごとに の結果groupedData.get(i).getResult()を取得します。SolrDocumentListあなたの例では、(データがあなたが言ったように順序付けられていると仮定して)、日付が 2013-03-01 の 3 つの一致のうちの 1 つ groupedData.get(0)が得られます。SolrDocumentList

これはかなり一連のメソッド呼び出しであることは理解していますが、最終的には結果が得られます。誰かがデータに到達するためのより速い方法を知っている場合は、私も知りたいので、お気軽にお知らせください.

詳細については、 GroupResponseの API を参照してください。

この回答はSolr 5.4.0で機能していることに注意してください

于 2016-04-25T16:43:10.827 に答える
0

あなたが達成しようとしている出力は、グループ化よりもファセットに適していると思います。より具体的にはDate Facetingに関するドキュメントを確認してください。SolrJ はファセットを完全にサポートしています。SolrJ - Advanced Usageを参照してください。ファセットの概要については、 Solr を使用したファセット検索を読むことをお勧めします。

于 2013-03-05T12:42:51.823 に答える