1. 程式人生 > >Lucene學習總結之七:Lucene搜尋過程解析(1)

Lucene學習總結之七:Lucene搜尋過程解析(1)

一、Lucene搜尋過程總論

搜尋的過程總的來說就是將詞典及倒排表資訊從索引中讀出來,根據使用者輸入的查詢語句合併倒排表,得到結果文件集並對文件進行打分的過程。

其可用如下圖示:

searchprocess_thumb6

總共包括以下幾個過程:

  1. IndexReader開啟索引檔案,讀取並開啟指向索引檔案的流。
  2. 使用者輸入查詢語句
  3. 將查詢語句轉換為查詢物件Query物件樹
  4. 構造Weight物件樹,用於計算詞的權重Term Weight,也即計算打分公式中與僅與搜尋語句相關與文件無關的部分(紅色部分)。
  5. 構造Scorer物件樹,用於計算打分(TermScorer.score())。
  6. 在構造Scorer物件樹的過程中,其葉子節點的TermScorer會將詞典和倒排表從索引中讀出來。
  7. 構造SumScorer物件樹,其是為了方便合併倒排表對Scorer物件樹的從新組織,它的葉子節點仍為TermScorer,包含詞典和倒排表。此步將倒排表合併後得到結果文件集,並對結果文件計算打分公式中的藍色部分。打分公式中的求和符合,並非簡單的相加,而是根據子查詢倒排表的合併方式(與或非)來對子查詢的打分求和,計算出父查詢的打分。
  8. 將收集的結果集合及打分返回給使用者。