簡體   English   中英

Lucene搜索多少個結果?

[英]How many results to search for with Lucene?

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

我使用IndexSearcher確定10個 docId,然后從數據庫中加載完整的10個文檔。 使用以下方法時,我的問題是: n應該是多少?

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

該應用程序還支持分頁,因此理論上n可以是Integer.MAX_VALUE ,在搜索之后,我確定了我想要的10個 docId,依此類推...

但這是個好方法嗎?

我的意思是,如果有可能指定偏移量,那么我可以在此步驟中進行分頁,並在獲取10個文檔后結束搜索過程。

所以最后: 僅搜索10個而不是Integer.MAX_VALUE文檔會是一個巨大的提速嗎?

PS:我不能獨自測試最后一個問題,因為我的數據庫沒有太大的區別……但是當它運行時,它將更大。

首先,即使您指定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要做很多工作! 因此,如果您可以做一些事情來修剪搜索結果-那就做吧。

但是,以上建議(以及其他建議)僅在您的上下文之外才有意義。 測量,不要猜測! 整理是一項優化,可以留待以后使用-如果您負擔得起的話。

您不想返回每10頁的所有匹配。

您可以使用searchAfter方法(請參見此處 ),它更適合您的搜索。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM