標籤:lucene 分析器 lucene分析器 analyzer lucene全文檢索索引
剛接觸Lucene,雖然跑通了一個demo,但對很多東西還不瞭解。下面簡單記錄下對Analyzer的理解,以後再系統整理。後面來自Lucene官方文檔,Lucene版本為4.10.0.歡迎感興趣的同學一起學習交流,求大牛指導,我現在還有很多不明白的地方。
包org.apache.lucene.analysis
將文本轉換為可索引和檢索的標記標記(token)。
Lucene,建索引和檢索的庫,只接受純文字。
文本解析(Parsing)
基於Lucene的搜尋應用可能會支援很多格式的文檔,如pdf、word、excel,xml等。Lucene不關心具體的文檔格式。應用開發人員應當提供合適的文本解析器,將不同格式的文檔轉換成純文字的形式。
標記化(Tokenization)
將純文字進行Lucene建索引的時候要經曆一個通常稱之為“標記化”的過程。標記化是將純文字解析成小的索引單元——標記(token)的過程。文本被解析成標記的方式,與之後的檢索過程關聯性很強。例如,句子的開頭和結尾可以被識別從而提供更精確的短語,提高搜尋結果的準確性(雖然Lucene本身不支援句子的識別)。
有時,僅僅將輸入的文本簡單的解析成標記是不夠的,可能需要進一步的分析(Analysis)。Lucene提供了前置和後置標記化分析組件。
前置標記化分析可以包括(但不限於)去HTML標記,轉換或移除文本匹配的模式或固定字串。
後置標記化有很多步驟(但不限於):
提幹——提取詞的主幹部分,如bikes可以被替換為bike,查詢bike的結果同時包含bike和bikes
過濾——英文中的the、a,漢語中的“的”等對檢索結果可能並沒有幫。去掉這些詞可以減少索引空間,提高檢索效率,或者降低噪音,從而提升搜尋品質。
文本正常化——去除“口音”和其他字元標記從而更好的檢索。
同義字擴充——在標記的位置添加同義字,在使用者搜尋同義字集的時候可能會更好的匹配。
核心解析(CoreAnalysis)
Lucene的Analysis包提供了將String和Reader轉換成可索引的標記的原理,主要涉及四個類,分別是:
Analyzer——負責建立TokenStream,在索引和搜尋過程中用到。
CharFilter——用來在Reader讀取文本時,為前置標記化執行替換、刪除或者添加操作。
Tokenizer——是一個TokenStream,用來將文本解析成標記,一般是Analysis的第一步。
TokenFilter——也是一個TokenStream,用來改變Tokenizer產生的一些標記。不是所有的Analyzer都需要TokenFilter。
Lucene初識之Analyzer