1. 程式人生 > >Lucene筆記23-Lucene的使用-簡單複習索引、檢索和分詞

Lucene筆記23-Lucene的使用-簡單複習索引、檢索和分詞

一、索引

索引過程中的核心類:IndexWriter、Directory、Analyzer、Document、Field。

IndexWriter用來寫索引。

Directory用來定義索引的目標位置是硬碟上還是記憶體中。

Analyzer用來分詞,常用的分詞器有:SimpleAnalyzer,WhitespaceAnalyzer,StandardAnalyzer,StopAnalyzer。分詞器裡面有個重要的方法tokenStream(),用來獲取tokenStream流,這個流中儲存了分詞的各種資訊。首先經過Tokenizer,將待分詞字串拆分成一個個的語彙單元,交給一些列的TokenFilter對這些語彙單元進行處理。

Document用來儲存索引資訊。

Field用來指定域的名稱,一個Document中有多個Field。

二、檢索

搜尋過程中的核心類:IndexReader、IndexSearcher、Term、Query、TermQuery、TopDocs、ScoreDoc。

IndexReader用來讀取索引資訊,因為它的開啟和關閉比較耗時,所以建議設計成單例的模式。使用open()方法來開啟一個IndexReader物件,或者使用openIfChanged()開啟一個更新的IndexReader物件。

IndexSearcher用來查詢索引,我們通過IndexReader來獲取IndexSearcher。

Term用來指定某個域為某個值,它是檢索過程中最小的單位,。

Query用來查詢,它下面有很多的子類,

TermQuery用來對字串進行查詢,是Query的子類。

TopDocs用來儲存IndexSearcher物件查詢到的文字資訊。

ScoreDoc用來提供一些屬性,比如scoreDoc.doc表示文件的docID,將這個ID傳給IndexSearcher物件的doc()方法,就可以獲得Document物件了,有了Document物件之後,就可以使用get獲取其中的值了,其中Store.YES的就會被儲存,Store.NO就不會被儲存了。

三、分詞

分詞過程中的核心類:Analyzer、TokenStream、Tokenizer、TokenFilter。

在分詞過程中,很多資料是通過Attribute來儲存的。如果要獲取某個Attribute,就要在遍歷流之前,將Attribute新增到流中。瞭解了這些屬性之後,根據原理寫一個停用詞分詞器和同義詞分詞器。