gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 20:34:34 24 4
gpt4 key购买 nike

我有以下几点:

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 .所以很明显,即使在使用分组时,用于控制台的代码也有一些方法来检索该值:

enter image description here

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

最佳答案

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

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

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

希望这可以帮助。

更新:我相信正如 OP 所说, group.getResults().getNumFound() 只会返回组中的项目数。然而,关于 GroupCommand有一个 getMatches() 方法可能是所需的相应计数。
 int matches = groupCommands.getMatches();

关于Solr:如何使用 Java API 获取分组查询的结果总数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16103868/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com