0
在網頁搜索引擎中,倒排索引通常非常大,所以搜索引擎在獲得足夠的結果時會退出搜索。由於遍歷到長倒排索引的尾部是耗時的。lucene是否在搜索時遍歷整個倒排索引?
Lucene如何處理這種情況?例如,如果術語「A」的倒排索引由10000個文檔組成,則在搜索「A」獲得10個結果時,Lucene將遍歷所有這10000個文檔,然後返回10個結果,或者當檢索到足夠的結果時返回10個結果結果即使沒有達到倒排索引的結尾?
在網頁搜索引擎中,倒排索引通常非常大,所以搜索引擎在獲得足夠的結果時會退出搜索。由於遍歷到長倒排索引的尾部是耗時的。lucene是否在搜索時遍歷整個倒排索引?
Lucene如何處理這種情況?例如,如果術語「A」的倒排索引由10000個文檔組成,則在搜索「A」獲得10個結果時,Lucene將遍歷所有這10000個文檔,然後返回10個結果,或者當檢索到足夠的結果時返回10個結果結果即使沒有達到倒排索引的結尾?
Lucene確實會訪問所有10k個匹配項,計算每個匹配項的得分,然後放入一個堆中以計算最高k個匹配項。
lucene/misc模塊有一個SortingMergePolicy,它允許您基於特定字段(在Web索引上,這可能是頁面排名)排序合併的段。這樣,如果您希望在搜索時根據此字段對文檔進行排序(或者更一般地說,如果排序順序與此字段的值緊密相關),那麼您可以在收集足夠的匹配後立即停止爲每個段收集文檔。
這是目前非常專業的功能,但我們有計劃使它更易於使用,請參閱https://issues.apache.org/jira/browse/LUCENE-6766。