solr 分詞過程基本介紹

managed-schema 配置文件中指定了全部的fields及對應的分詞器設置apache

對應的配置文件以下json

Solr 中一個典型的分詞器配置以下
先配置一個 field,以下api


Field 對應的分詞器,須要配置一個analyzer(一個fieldType下能夠配置多個analyzer)
app

分析器(analyzer)是包括兩個部分:分詞器和過濾器。分詞器顧名思意就是將句子分詞單個的詞,過濾器就是對分詞的結果進行篩選,例如中文中將「的」「呀」這些對句子主體意思影響不大的詞刪除。英語中相似的就是"is","a"等等。一般在索引和分詞兩端應該採用一樣的分詞器。solr自帶了一些分詞器,若是你須要使用本身公司的分詞器,那麼就須要修改solr模式(Solr schema)。
schema.xml 文件容許兩種方式修改文本被分析的方式,一般只有field類型爲 solr.TextField 的field的內容容許定製分析器。curl

一個 analyzer 下指定一個TokenizerFactory ,後面跟一系列的TokenFilterFactories(它們將按照所列的順序發生做用),Factories被用來建立分詞器和分詞過濾器,它們用於對分詞器和分詞過濾器的準備配置url

須要說明的一點是,Any Analyzer, TokenizerFactory, or TokenFilterFactory 應該用帶包名的全類名進行指定,請確保它們位於Solr的classpath 路徑下。對於 org.apache.solr.analysis.* 包下的類,僅僅經過solr.*就能夠進行指定。spa

TokenizerFactories

Solr提供了下列TokenizerFactories(Tokenizers and TokenFilters)
1. solr.KeywordTokenizerFactory
無論什麼內容,整句當成一個關鍵字
例如: "http://example.com/I-am+example?Text=-Hello" ==> "http://example.com/I-am+example?Text=-Hello".net

2. solr.LetterTokenizerFactory
根據字母來分詞,拋棄非字母的部分
例如:"I can't" ==> "I", "can", "t"xml

3. solr.WhitespaceTokenizerFactory
根據空格來分詞
例如:"I do" ==> "I", "do"blog

4. solr.LowerCaseTokenizerFactory
根據字母分詞,並將全部字母轉換成小寫,拋棄非字母的部分
例如:"I can't" ==> "i", "can", "t"

5. solr.StandardTokenizerFactory
分詞舉例:  "I.B.M. cat's can't" ==> 
ACRONYM: "I.B.M.", APOSTROPHE:"cat's", APOSTROPHE:"can't"
說明:該分詞器,會自動地給每一個分詞添加type,以便接下來的對type敏感的過濾器進行處理,目前僅僅只有StandardFilter對Token的類型是敏感的。

TokenFilterFactories

1. solr.StopFilterFactory
一些無用詞過濾(例如: a, an, and, as, at, etc.),詳細的在lang/stopwords_en.txt這個文件中有定義

2. solr.LowerCaseFilterFactory
大小寫的轉換的過濾器,會將全部的大小所有轉換成小寫單詞

3. solr.EnglishPossessiveFilterFactory
估計是作一些單詞的語義轉換,例如,run能夠對應到關聯詞 running等等

4. solr.KeywordMarkerFilterFactory
估計是作一些敏感詞過濾之類的吧,敏感詞的配置在protwords.txt這個文件中定義

參考:http://blog.csdn.net/dongnan591172113/article/details/23459637

分詞示例:

經過solr api添加field和指定分詞器(參考 schema api) curl -X POST -H 'Content-type:application/json' --data-binary '{     "add-field-type" : {         "name":"myNewTxtField",         "class":"solr.TextField",         "positionIncrementGap":"100",         "analyzer" : {             "charFilters":[{                 "class":"solr.PatternReplaceCharFilterFactory",                 "replacement":"$1$1",                 "pattern":"([a-zA-Z])\\\\1+"              }],             "tokenizer":{                 "class":"solr.WhitespaceTokenizerFactory"              },             "filters":[{                 "class":"solr.WordDelimiterFilterFactory",                 "preserveOriginal":"0"              }]         }     } }' http://localhost:8983/solr/gettingstarted/schema  

相關文章
相關標籤/搜索