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

Shi*_*gon 4 grouping solr

我有以下内容:

在Solr索引的43份文件

如果我使用Java API进行查询而不进行任何分组,例如:

SolrQuery query = new SolrQuery("*:*");
query.setRows(10);
Run Code Online (Sandbox Code Playgroud)

然后,我可以获得匹配元素的总数,如下所示:

solrServer.query(query).getResults().getNumFound(); //43 in this case
Run Code Online (Sandbox Code Playgroud)

getResults()方法返回SolrDocumentList包含此值的实例.

但是,如果我使用分组,例如:

query.set("group", "true");
query.set("group.format", "simple");
query.set("group.field", "someField");
Run Code Online (Sandbox Code Playgroud)

然后上面的代码检索查询结果没有loger工作(抛出NPE),我不得不使用:

List<GroupCommand> groupCommands = solrServer.query(query).getGroupResponse().getValues();
List<Group> groups = groupCommand.getValues();
Group group = groups.get(groupIndex);
Run Code Online (Sandbox Code Playgroud)

我不明白如何使用API​​的这一部分来获取匹配文档的总数(上面的非分组查询中的43).首先,我认为与分组不再可能得到,但我已经注意到,如果我做的Solr管理控制台类似的查询,使用相同的分组和一切,它返回的确切相同的结果的Java API 和也 numFound=43.很明显,即使使用分组,用于控制台的代码也可以通过某种方式检索该值:

在此输入图像描述

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

Pai*_*ook 6

在查看从您的调用返回的Group的源时groups.get(groupIndex),它有一个返回SolrDocumentList的getResults()方法.SolrDocumentList有一个getNumFound()方法应该返回总数,我相信......

所以你应该能够得到如下:

  int numFound = group.getResults().getNumFound();
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.

更新:我相信OP声明,group.getResults().getNumFound()只返回组中的项目数.但是,在GroupCommand上有一个getMatches()方法,它可能是所需的相应计数.

 int matches = groupCommands.getMatches();
Run Code Online (Sandbox Code Playgroud)