solr 中文分詞filedType定義

一.   solr.TextField 允許用戶通過  分析器 來定製  索引和查詢  的 fieldType

分析器包括 一個分詞器(tokenizer)和多個過濾器(filter)。

代碼展示:

 

<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
      <analyzer type="index">
        <tokenizer class = "org.wltea.analyzer.solr.IKTokenizerFactory" isMaxWordLength="false" /> 
        <filter class="solr.StopFilterFactory"
                ignoreCase="true"
                words="stopwords.txt"
                enablePositionIncrements="true"
                />
        <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/>
      </analyzer>
      <analyzer type="query">
        <tokenizer class = "org.wltea.analyzer.solr.IKTokenizerFactory" isMaxWordLength="true" />
        <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
        <filter class="solr.StopFilterFactory"
                ignoreCase="true"
                words="stopwords.txt"
                enablePositionIncrements="true"
                />
        <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/>
      </analyzer>
    </fieldType>
 

二.   Solr建立索引 和 對關鍵詞進行查詢 都得對字串進行分詞。

在向索引庫中添加全文檢索類型的索引的時候,Solr會首先用空格進行分詞,然後把分詞結果依次使用指定的過濾器進行過濾,最後剩下的結果纔會加入到索引庫中以備查詢。

分詞的順序如下:

 

索引

1:空格whitespaceTokenize

2:過濾詞StopFilter

3:拆字WordDelimiterFilter

4:小寫過濾LowerCaseFilter

5:英文相近詞EnglishPorterFilter

6:去除重複詞RemoveDuplicatesTokenFilter

查詢

1:查詢相近詞

2:過濾詞

3:拆字

4:小寫過濾

5:英文相近詞

6:去除重複詞

以上是針對英文,中文的除了空格,其他都類似。但具體是什麼樣子,需要看對應的 fieldType中的配置。

 

如 1.  中的配置

索引:

1.    IK分詞

2.    停用詞過濾

3.    拆字

4.    小寫過濾

5.    關於不同語言的詞幹處理

 

查詢:

1.    IK分詞

2.    同義詞

3.    停用詞

4.    拆字

5.    小寫過濾

6.     關於不同語言的詞幹處理

 

 

三.   常用分詞器與過濾器介紹

      分詞器:

      1.   < tokenizer class =" solr.WhitespaceTokenizerFactory " />

            空格分詞器

      2.   <tokenizer class = "org.wltea.analyzer.solr.IKTokenizerFactory" isMaxWordLength="false" />

            IK分詞器

 

      過濾器

      1.    <filter class ="solr.WordDelimiterFilterFactory" generateWordParts ="1" generateNumberParts ="1" catenateWords ="1" catenateNumbers ="1" catenateAll="0" splitOnCaseChange="1" />

在分詞和匹配時,考慮"-"連字符,字母數字的界限,非字母數字字符,這樣 "wifi"或"wi fi"都能匹配"Wi-Fi"。

 

      2.   <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true" />

      同義詞,同義詞的構建一定要參考 http://ip:8983/solr/admin/analysis.jsp 頁面的分詞效果。

 

     3.    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />

      在禁用字(stopword)刪除後,在短語間增加間隔

      stopword:即在建立索引過程中(建立索引和搜索)被忽略的詞,比如is this等常用詞。

      在conf/stopwords.txt維護。

 

     4.  其它 參見  http://damoqingquan.iteye.com/blog/231293

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章