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  

相关文章
相关标签/搜索