1

i want to group the output i am getting through date type. But i am storing the data in solr using datetime type. Date Format i am using is

          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"

What i want as output is count of dates :: for .e.g.

   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"

So i want the output as two columns ::

     Date           Count
     2013-03-01       3  
     2013-03-02       2  

Here is the code i am using

    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();

Help is appreciated.

4

2 回答 2

1

我知道这是一个较老的问题,但我正在研究与此相关的事情,所以我想我会分享我的解决方案。由于您正在使用分组,rs.getResults()因此可能为空。在阅读完 SolrJ API 并在我这边做了一些测试之后,你会发现结果确实是按照你想要的方式分组的。要访问它们,请创建如下变量:

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

请注意,这Group是类org.apache.solr.client.solrj.response.Group

然后,遍历groupedData, usiniggroupedData.get(i).getResult()以获得SolrDocumentList每个分组值的结果。在您的示例中,(假设数据按您所说的那样排序),groupedData.get(0)将为您提供SolrDocumentList日期为 2013-03-01 的三个匹配项中的一个。

我知道这是一连串的方法调用,但它最终会为您提供结果。如果有人确实知道获取数据的更快方法,请随时让我知道,因为我也想知道。

有关更多信息,请参阅GroupResponse的 API

请注意,此答案适用于 Solr 5.4.0

于 2016-04-25T16:43:10.827 回答
0

您试图实现的输出,我相信更适合Faceting而不是分组。更具体地查看有关日期分面的文档,并且 SolrJ 完全支持分面,请参阅SolrJ - Advanced Usage。有关 Faceting 的介绍,我建议您阅读 Faceted Search with Solr

于 2013-03-05T12:42:51.823 回答