gpt4 book ai didi

java - 使用 Lucene 搜索有多少结果?

转载 作者:行者123 更新时间:2023-12-01 22:40:13 25 4
gpt4 key购买 nike

在我的应用程序中,我使用 Lucene (4.8) 作为搜索引擎。

我使用 IndexSearcher 确定 10 个 docId,然后从数据库加载完整的 10 文档。使用以下方法时,我的问题是:n 应该有多大?

search(Query query, Filter filter, int n, Sort sort)

该应用程序还支持分页,因此理论上n可以是Integer.MAX_VALUE,并且在搜索之后我确定了我想要的10 docIds,所以于...

但是这是一个好方法吗?

我的意思是,如果有可能指定偏移量,我可以在此步骤中进行分页,并在获取 10 文档后结束搜索过程。

最后:仅搜索 10 而不是 Integer.MAX_VALUE 文档会带来巨大的加速吗?

附注我无法自己测试最后一个问题,因为我的数据库没有那么大,看不到任何差异......但当它上线时它会大得多。

最佳答案

首先,即使您指定 Integer.MAX_VALUE,它也会向下舍入到最大文档 ID - 搜索超出最大绝对限制是没有意义的。

关于加速 - 没有人会给你准确的答案,因为每个索引都是不同的。但还是有一些共同点。

  • 对于每次搜索,都会为结果分配新的Object[size](org.apache.lucene.util.PriorityQueue:64 - 这是 Lucene 版本 4.9.0,行号可能因版本而异)
  • org.apache.lucene.search.IndexSearcher:467 处还有另一个分配,其中 ScoreDoc 数组使用(相同?)数字进行初始化。
  • 显然,设置每个数组元素都会产生 CPU 和 I/O 成本

即使初始化每个搜索结果都很便宜,但对于大型索引来说,它会增加。此外,对这些大块进行垃圾收集是要付出代价的。想象一下,如果您每秒运行搜索 10 次,并获得 100 万个搜索结果。这对于 GC 来说是一个很大的工作量!因此,如果您可以采取一些措施来修剪搜索结果,那就去做吧。

但是,上述建议(以及任何其他建议)只有在您的上下文之外才有意义。测量,不要猜测!修剪是一种可以留待以后进行的优化——如果您负担得起的话。

关于java - 使用 Lucene 搜索有多少结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26294603/

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