天天看點

Lucene&&Solr——分析器(Analyzer)

   引言

   在Lucene中分析器其中舉足輕重的作用,為了滿足多種語言的支援,需要擴充一些分析器,僅僅是Lucene官方提供的标準分析器是遠遠不夠的,比如對于中文,我們就需要引用第三方的中文分析器,下面就介紹幾種分析器。

  分析器的執行過程:

Lucene&&Solr——分析器(Analyzer)

  以标準分析器為例說明這個三個TokenFilter的作用:

第一個過濾器:将首字母小寫

     第二個過濾器:以空格為分割線,将句進行拆分成獨立的單詞

     第三個過濾器:去掉一些沒有意義的單詞 比如 the  a  an  等等

   Lucene自帶的中文分詞器:

    StandardAnalyzer:

    單個字分詞:就是按照中文一個字一個字的進行分詞:比如“我愛中國”

    效果:“我”“愛”“中”“國”

    CJKAnalyzer

    二分法分詞:按兩個字進行切分,如:“我是中國人” 效果:“我是”“是中”“中國”“國人”

    SmartChineseAnalyzer

    對中文的支援比較好,但擴充性差 擴充詞庫 禁用詞庫等不好處理

  上面的這幾種分析器都不能很好的滿足我們的需求,是以有人寫了一個良好的中文分析器IKAnalyzer

   這個中文分析器的使用也非常的簡單:

   第一步:引入jar包IKAnalyzer2012FF_u1.jar

   第二步:拷貝配置檔案 放在src下面 

Lucene&&Solr——分析器(Analyzer)

   第三步:直接nAnalyzer analyzer = new IKAnalyzer();即可使用

  分析器的使用時機

    索引時使用Analyzer

  輸入關鍵字進行搜尋,當需要讓該關鍵字與文檔内容所包含的詞進行比對時需要對文檔域内容進行分析,需要經過Analyzer分析器處理生成語彙單元(Token).分析器分析的對象時文檔中的Field域。當Fieldshuxing tokenized(是否分詞)為true時會對Field值進行分析,如圖:

Lucene&&Solr——分析器(Analyzer)

  搜尋時使用Analyzer

  對搜尋關鍵字進行分析和索引分析一樣,使用Analyzer對搜尋關鍵字進行分析、分詞處理,使用分析後每個詞語進行搜尋。比如搜尋關鍵字:spring web,經過分析器進行分詞,得出 spring  web 拿去索引詞典表查找,找到索引連接配接到Document,解析Document内容

  對于比對整體Field域的查詢可以在搜尋時不分析,比如根據訂單号,身份證号查詢等

  再次強調:搜尋使用的分析器和索引使用的分析器要一緻。

  solr安裝中文分析器(IKAnalyzer)

Lucene&&Solr——分析器(Analyzer)

   小結

    本文主要介紹了一些分析器的内容,尤其是對于中文分析器的使用,分析器的執行流程和執行時機需要我們了解,希望能給讀者帶來幫助。