我有以下内容:
在Solr中索引的43份文件
如果我使用Java API进行查询而不进行任何分组,例如:
SolrQuery query = new SolrQuery("*:*");
query.setRows(10);
然后我可以获得匹配元素的总数,如下所示:
solrServer.query(query).getResults().getNumFound(); //43 in this case
getResults()
方法返回包含此值的SolrDocumentList
实例。
但是,如果我使用分组,例如:
query.set("group", "true");
query.set("group.format", "simple");
query.set("group.field", "someField");
然后上面的代码检索查询结果没有loger工作(抛出NPE),我不得不使用:
List<GroupCommand> groupCommands = solrServer.query(query).getGroupResponse().getValues();
List<Group> groups = groupCommand.getValues();
Group group = groups.get(groupIndex);
我不明白如何使用这部分API来获取匹配文档的总数(上面的非分组查询中的43)。首先我认为分组不再是可能的,但我注意到如果我在Solr管理控制台中执行类似的查询,使用相同的分组和所有内容,它将返回与Java API完全相同的结果< em>以及 numFound=43
。显然,即使使用分组,用于控制台的代码也可以通过某种方式检索该值:
我的问题是,如何使用Solr Java API执行分组来获取查询的匹配文档总数?
答案 0 :(得分:6)
在查看从groups.get(groupIndex)
调用返回的Group的来源时,它有一个返回SolrDocumentList的getResults()方法。 SolrDocumentList有一个getNumFound()方法,应该返回总数,我相信......
所以你应该能够得到以下内容:
int numFound = group.getResults().getNumFound();
希望这有帮助。
更新:我相信OP声明,group.getResults()。getNumFound()只会返回组中的项目数。但是,在GroupCommand上有一个getMatches()方法,它可能是所需的相应计数。
int matches = groupCommands.getMatches();
答案 1 :(得分:3)
如果将ngroups参数设置为true(默认为false),则将返回组数。
例如:
solrQuery.set("group.ngroups", true);
https://cwiki.apache.org/confluence/display/solr/Result+Grouping
然后可以通过以下方式从您的响应GroupCommand中检索:
int numGroups = tempGroup.getNGroups();
至少那是我的理解?