[英]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
數組用(相同?)號初始化。 即使初始化這些搜索結果中的每一個都是便宜的,但對於大索引來說,它的總和也會增加。 同樣,要為這些大塊的垃圾收集付出代價。 想象一下,如果您每秒運行10次搜索,並獲得100萬個搜索結果。 GC要做很多工作! 因此,如果您可以做一些事情來修剪搜索結果-那就做吧。
但是,以上建議(以及其他建議)僅在您的上下文之外才有意義。 測量,不要猜測! 整理是一項優化,可以留待以后使用-如果您負擔得起的話。
您不想返回每10頁的所有匹配。
您可以使用searchAfter
方法(請參見此處 ),它更適合您的搜索。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.