gpt4 book ai didi

lucene.net - 如何在 Lucene 中获得潜在结果的总数

转载 作者:行者123 更新时间:2023-12-03 14:43:55 26 4
gpt4 key购买 nike

我在我的网站上使用 lucene,我想显示查询的总结果数,例如:

Showing results x to y of z



但我找不到任何可以返回潜在结果总数的方法。我似乎只能找到您必须指定所需结果数量的方法,并且由于我只想要每页 10 个,因此将 10 作为结果数量传递似乎是合乎逻辑的。

还是我做错了,我应该传入 1000,然后在我需要的范围内取 10?

最佳答案

顺便说一句,因为我个人认识你,所以我应该为其他人指出我已经知道你指的是 Lucene.net 而不是 Lucene :) 虽然 API 是一样的

在 2.9.x 之前的版本中,您可以调用 IndexSearcher.Search(Query query, Filter filter)它返回了 Hits对象,其中一个属性 [方法,技术上,由于 Java 端口] 是 Length()
现在标记为已过时,因为它将在 3.0 中删除,搜索的唯一结果返回 TopDocsTopFieldDocs对象。

你的选择是

a) 使用 IndexServer.Search(Query query, int count)这将返回 TopDocs对象,所以 TopDocs.TotalHits将向您显示可能的总点击数,但以实际创建 <count> 为代价结果

b) 更快的方法是实现自己的Collector对象(从 Lucene.Net.Search.Collector 继承)并调用 IndexSearcher.Search(Query query, Collector collector) .搜索方法将调用 Collect(int docId)在每场比赛中你的收藏家,所以如果你在内部跟踪它,你就有办法获得所有结果。

应该注意的是,Lucene 不是一个总结果集查询环境,它旨在尽可能快地将最相关的结果流式传输给您(开发人员)。任何为您提供“总结果”计数的方法都只是枚举所有匹配项的包装器(与 Collector 方法一样)。

诀窍是尽可能快地保持这个枚举。最昂贵的部分是从索引中反序列化文档,填充每个字段等。至少对于较新的 API 设计,需要您编写自己的收集器,通过告诉开发人员避免从索引中反序列化每个结果来明确原则因为默认情况下只提供匹配的文档 ID 和分数。

关于lucene.net - 如何在 Lucene 中获得潜在结果的总数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2588973/

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