Lucene學習總結之七:Lucene搜尋過程解析(1)
一、Lucene搜尋過程總論
搜尋的過程總的來說就是將詞典及倒排表資訊從索引中讀出來,根據使用者輸入的查詢語句合併倒排表,得到結果文件集並對文件進行打分的過程。
其可用如下圖示:
總共包括以下幾個過程:
- IndexReader開啟索引檔案,讀取並開啟指向索引檔案的流。
- 使用者輸入查詢語句
- 將查詢語句轉換為查詢物件Query物件樹
- 構造Weight物件樹,用於計算詞的權重Term Weight,也即計算打分公式中與僅與搜尋語句相關與文件無關的部分(紅色部分)。
- 構造Scorer物件樹,用於計算打分(TermScorer.score())。
- 在構造Scorer物件樹的過程中,其葉子節點的TermScorer會將詞典和倒排表從索引中讀出來。
- 構造SumScorer物件樹,其是為了方便合併倒排表對Scorer物件樹的從新組織,它的葉子節點仍為TermScorer,包含詞典和倒排表。此步將倒排表合併後得到結果文件集,並對結果文件計算打分公式中的藍色部分。打分公式中的求和符合,並非簡單的相加,而是根據子查詢倒排表的合併方式(與或非)來對子查詢的打分求和,計算出父查詢的打分。
- 將收集的結果集合及打分返回給使用者。
相關推薦
Lucene學習總結之七:Lucene搜尋過程解析
2.4、搜尋查詢物件 2.4.4、收集文件結果集合及計算打分 在函式IndexSearcher.search(Weight, Filter, int) 中,有如下程式碼: TopScoreDocCollector collector = TopScoreDocCollector.create
Lucene學習總結之七:Lucene搜尋過程解析(1)
一、Lucene搜尋過程總論 搜尋的過程總的來說就是將詞典及倒排表資訊從索引中讀出來,根據使用者輸入的查詢語句合併倒排表,得到結果文件集並對文件進行打分的過程。 其可用如下圖示: 總共包括以下幾個過程: IndexReader開啟索引檔案,讀取並開啟指向索引檔案的流。
Lucene學習總結之七:Lucene搜尋過程解析(7)轉
2.4、搜尋查詢物件 2.4.3.2、並集DisjunctionSumScorer(A OR B) DisjunctionSumScorer中有成員變數List<Scorer> subScorers,是一個Scorer的連結串列,每一項代表一個倒排表,Dis
Lucene學習總結之七:Lucene搜尋過程解析(5)
2.4、搜尋查詢物件 2.4.3、進行倒排表合併 在得到了Scorer物件樹以及SumScorer物件樹後,便是倒排表的合併以及打分計算的過程。 合併倒排表在此節中進行分析,而Scorer物件樹來進行打分的計算則在下一節分析。 BooleanScorer2.score(C
Lucene學習總結之七:Lucene搜尋過程解析(3)
2.3、QueryParser解析查詢語句生成查詢物件 程式碼為: QueryParser parser = new QueryParser(Version.LUCENE_CURRENT, "contents", new StandardAnalyzer(Version.LUCENE_CURRENT));
Lucene學習總結之七:Lucene搜尋過程解析(1)轉
一、Lucene搜尋過程總論 搜尋的過程總的來說就是將詞典及倒排表資訊從索引中讀出來,根據使用者輸入的查詢語句合併倒排表,得到結果文件集並對文件進行打分的過程。 其可用如下圖示: 總共包括以下幾個過程: IndexReader開啟索引檔案,讀取並開啟指向索引檔案的流。
Lucene學習總結之二:Lucene的總體架構
api 要點 iter 不同 blank 應用 文件 score image Lucene總的來說是: 一個高效的,可擴展的,全文檢索庫。 全部用Java實現,無須配置。 僅支持純文本文件的索引(Indexing)和搜索(Search)。 不負責由其他格式的文件抽取純文
Lucene學習總結之二:Lucene的總體架構(轉)
Lucene總的來說是: 一個高效的,可擴充套件的,全文檢索庫。 全部用Java實現,無須配置。 僅支援純文字檔案的索引(Indexing)和搜尋(Search)。 不負責由其他格式的檔案抽取純文字檔案,或從網路中抓取檔案的過程。 在Lucene in action
Lucene學習總結之四:Lucene索引過程分析
3、將文件加入IndexWriter 程式碼: writer.addDocument(doc); -->IndexWriter.addDocument(Document doc, Analyzer analyzer) -->doFlush = docWrite
Lucene學習總結之四:Lucene索引過程分析(1)
浪費了“黃金五年”的Java程式設計師,還有救嗎? >>>
Lucene學習總結之三:Lucene的索引檔案格式(2)
浪費了“黃金五年”的Java程式設計師,還有救嗎? >>>
lucene學習筆記(七)lucene近實時搜尋
近實時搜尋 Lucene3.5起提供了NRTManager管理近實時搜尋。原理:將搜尋存放到記憶體中,每個一定時間提交到硬碟中。 NRTManager和SearchManager是執行緒安全的 使用NRTManager獲取SearchManager。並且使
Memcached學習筆記之七:memcached+magent+keepalived高可用叢集
上一篇我們說過memcached實現高可用以及防止單點故障可以通過magent來實現,接下來我們來配置一個高可用群集 magent代理伺服器:192.168.200.101 memcached節點:(可以在同一個伺服器上開啟三個memcached節點看前面介紹,也可以一臺伺服器一個) m
Android基礎總結之七:Android.mk小結
前言:瞭解四大元件之前也有必要熟悉專案的AndroidManifest.xml基礎知識,還要熟悉Android.mk基礎知識,這兩個應該是前提,個人習慣拿到一個沒有看過一個應用的程式,首先看的是Manifest和makefile。之前已經寫了一篇關於Manifest的文章:《
STM32CubeMX學習教程之七:ADC讀取電壓並輸出到串列埠
完整原始碼下載:https://github.com/simonliu009/STM32CubeMX-ADC軟體:STM32CubeMX V4.25.0 System Workbench V2.4韌體庫版本:STM32Cube FW_F1 V1.6.1硬體:OneNet 麒
Qt總結之七:QPaintEvent繪製雷達圖(二)
前言 這裡使用另一套框架寫的雷達掃描圖 這裡PaintEvent事件比上一個版本寫的好,但是不喜歡Widget巢狀的方式,後續會把兩個版本整合到一起。 一、實現原理 雷達效果包括三個部分:背景、轉動的扇形和閃爍的點。 (1)背景的實現很簡單
MyBatis由淺入深學習總結之二:MyBatis解決Java實體類和資料庫表字段不一致方法總結
在此,首先說明一點任何永續性框架都需要解決一個問題,那就是Java實體類的欄位一般來說基本上會與資料庫表中欄位不一致,那麼它們是如何解決的呢?咱們以Hibernate和SpringJDBC為例說明一下; 1、Hibernate中一般通過XML對映和註解的方式解決不一致問題,
機器學習演算法之七:5分鐘上手SVM
1.案例:承襲Decision Tree的案例資料,同樣用身高和體重來界定胖瘦。如下文字檔(7.SVM.txt),三個欄位各代表身高(m)、體重(kg)與胖瘦(thin/fat)。 2.問題:現在
Lucene學習篇之高亮搜尋結果
前言: import org.apache.lucene.document.Document; import org.apache.lucene.index.DirectoryReader; import org.apache.lucene.index.IndexRe
Lucene學習總結之一:全文檢索的基本原理
一、總論 Lucene是一個高效的,基於Java的全文檢索庫。 所以在瞭解Lucene之前要費一番工夫瞭解一下全文檢索。 那麼什麼叫做全文檢索呢?這要從我們生活中的資料說起。 我們生活中的資料總體分為兩種:結構化資料和非結構化資料。 結構化資料:指具