1. 程式人生 > >Lucene 合併倒排表演算法之並集

Lucene 合併倒排表演算法之並集

上一篇中講到lucene在合併倒排表時候的交集演算法操作.本文繼續對倒排表求並集的演算法:

lucene處理交集時採用的資料結構是一個倒排表的陣列,陣列的元素是一個個的迭代器來表現每個倒排表.

而在求並集的時候則是採用了佇列資料結構.在DisjunctionSumScorer類的建構函式中對佇列進行了初始化操作:

 

lucene在查詢的時候,BooleanScorer2呼叫nextDoc()會呼叫DisjunctionSumScorer類中一個非常重要的方法:advanceAfterCurrent()

 比較重要的是其中的topNextAndAdjustElsePop()方法,該方法主要完成以下工作:

 這段程式碼找出了佇列中最小的元素,並將其置頂,其實就是用了我們常見的堆排序,時間複雜度為O(nlogn),空間複雜度為O(1);噹噹前文件和佇列頂部元素不等時,說明滿足該條件的倒排表中的文件已經統計結束,只要該文件出現在所有倒排表中的次數滿足最小條件,該文件就是並集的一個元素之一...

      當nextDoc()到最後一個doc時,說明並集操作結束

      注:因為差集相對簡單,不再累述