solr 中文分词filedType定义
一. ? solr.TextField 允许用户通过 ?分析器 来定制 ?索引和查询 ?的 fieldType。
分析器包括 一个分词器(tokenizer)和多个过滤器(filter)。
代码展示:
?
<fieldType name="text" positionIncrementGap="100"> <analyzer type="index"> <tokenizer class = "org.wltea.analyzer.solr.IKTokenizerFactory" isMaxWordLength="false" /> <filter generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/> <filter language="English" protected="protwords.txt"/> </analyzer> <analyzer type="query"> <tokenizer class = "org.wltea.analyzer.solr.IKTokenizerFactory" isMaxWordLength="true" /> <filter synonyms="synonyms.txt" ignoreCase="true" expand="true"/> <filter generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/> <filter 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 synonyms="synonyms.txt" ignoreCase="true" expand="true" />
? ? ? 同义词,同义词的构建一定要参考?http://ip:8983/solr/admin/analysis.jsp?页面的分词效果。
?
? ? ?3. ? ?<filter ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
? ? ? 在禁用字(stopword)删除后,在短语间增加间隔
? ? ? stopword:即在建立索引过程中(建立索引和搜索)被忽略的词,比如is this等常用词。
? ? ? 在conf/stopwords.txt维护。
?
? ? ?4. ?其它 参见 ?http://damoqingquan.iteye.com/blog/231293
?
?