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
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的类型是敏感的。
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