Solr:如何使用Java API获取分组查询的结果总数

时间:2013-04-19 11:45:36

标签: solr grouping

我有以下内容:

在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。显然,即使使用分组,用于控制台的代码也可以通过某种方式检索该值:

enter image description here

我的问题是,如何使用Solr Java API执行分组来获取查询的匹配文档总数?

2 个答案:

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

至少那是我的理解?