理解solr中的 Analyzer,Tokenizer,Filter

翻譯自 Apache Solr Reference Guide

 

Analyzer:

analyzer負責檢查這個field,然後生成一個token流,一般作爲fieldType的一個字節點存在,比如:

<analyzer type="query">
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
        <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNu
mbers="0" catenateAll="0" splitOnCaseChange="1"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.PorterStemFilterFactory"/>
      </analyzer>

 

 任何複雜的field的分析都可以被分成獨立的,一系列的處理步驟,你會發現solr中包含了大部分你需要用到的analyzer。在這個例子中,雖然沒有制定特定的analyzer的類,但是他們的按照配置的流程依次走過,從 WhitespaceTokenizerFactory 開始,最後PorterStemFilterFactory 結束。通過配置analyzer的type可以指定是在 index階段還是 query階段使用。

 

Tokenizer:

tokenizer是把一個文本流切成一個個token的,就是傳說中的分詞,把一句話分成一段一段的,一些空格,停頓符啥的可能被扔了,一個token包含一些這個詞的元信息在裏面,比如說這個詞的位置,當然分詞的結果很可能是偏離原來意思的。如果就爲了分詞的話,一個analyzer中只有一個tokenizer,否則,這個輸出會作爲以下輸入來使用,

 

Filter:

filter比tokenizer簡單,是專門處理一個個token的, 把他們做變換或者是丟棄什麼的。filter是接受一個token流,輸出一個token流,所以可以是一個鏈條,處理的順序跟schema裏面的順序是一樣的,所以我們一般把通用的filter放到前面,其他放後面。

 

 調試自己的anaylizer使用http://localhost:8983/solr/#/collection1/analysis  就可以了 ,十分方便。

 

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