5

我有以下内容:

在 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");

然后上面用于检索查询结果的代码没有记录器工作(抛出 NPE),我必须改用:

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

我不明白如何使用这部分 API 来获取匹配文档的总数(上面非分组查询中的 43 个)。首先我认为分组不再可能得到它,但我注意到如果我在 Solr 管理控制台中执行类似的查询,使用相同的分组和所有内容,它返回与 Java API 完全相同的结果和也 numFound=43。所以很明显,即使在使用分组时,用于控制台的代码也有一些方法可以检索该值:

在此处输入图像描述

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

4

2 回答 2

6

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

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

  int numFound = group.getResults().getNumFound();

希望这可以帮助。

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

 int matches = groupCommands.getMatches();
于 2013-04-19T17:17:29.033 回答
4

如果将 ngroups 参数设置为 true(默认为 false),这将返回组数。

例如:

solrQuery.set("group.ngroups", true);

https://cwiki.apache.org/confluence/display/solr/Result+Grouping

然后可以从您的响应 GroupCommand 中检索到:

int numGroups = tempGroup.getNGroups();

至少那是我的理解?

于 2014-11-24T20:30:48.707 回答