我想对我通过日期类型获得的输出进行分组。但我使用datetime类型将数据存储在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"
我想要的输出是日期的数量:: .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"
所以我希望输出为两列::
Date Count 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();
非常感谢帮助。
答案 0 :(得分:1)
我知道这是一个较老的问题,但我正在研究与此相关的事情,所以我想我会分享我的解决方案。由于您使用的是分组,rs.getResults()
可能会为空。通过阅读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
个结果。在您的示例中,(假设数据按照您的说法进行排序),groupedData.get(0)
将为您提供日期为2013-03-01的三场比赛中的SolrDocumentList
。
我知道这是方法调用的链条,但最终会得到结果。如果有人知道更快的方式来获取数据,请随时告诉我,我也想知道。
有关详细信息,请参阅GroupResponse的API
请注意,这个答案适用于Solr 5.4.0
答案 1 :(得分:0)
您尝试实现的输出,我相信更适合Faceting分组。更具体地查看Date Faceting上的文档,SolrJ完全支持分面,请参阅SolrJ - Advanced Usage。有关Faceting的介绍,我建议您阅读Faceted Search with Solr