引言
在Lucene中分析器其中举足轻重的作用,为了满足多种语言的支持,需要扩展一些分析器,仅仅是Lucene官方提供的标准分析器是远远不够的,比如对于中文,我们就需要引用第三方的中文分析器,下面就介绍几种分析器。
分析器的执行过程:
以标准分析器为例说明这个三个TokenFilter的作用:
第一个过滤器:将首字母小写
第二个过滤器:以空格为分割线,将句进行拆分成独立的单词
第三个过滤器:去掉一些没有意义的单词 比如 the a an 等等
Lucene自带的中文分词器:
StandardAnalyzer:
单个字分词:就是按照中文一个字一个字的进行分词:比如“我爱中国”
效果:“我”“爱”“中”“国”
CJKAnalyzer
二分法分词:按两个字进行切分,如:“我是中国人” 效果:“我是”“是中”“中国”“国人”
SmartChineseAnalyzer
对中文的支持比较好,但扩展性差 扩展词库 禁用词库等不好处理
上面的这几种分析器都不能很好的满足我们的需求,所以有人写了一个良好的中文分析器IKAnalyzer
这个中文分析器的使用也非常的简单:
第一步:引入jar包IKAnalyzer2012FF_u1.jar
第二步:拷贝配置文件 放在src下面
第三步:直接nAnalyzer analyzer = new IKAnalyzer();即可使用
分析器的使用时机
索引时使用Analyzer
输入关键字进行搜索,当需要让该关键字与文档内容所包含的词进行匹配时需要对文档域内容进行分析,需要经过Analyzer分析器处理生成语汇单元(Token).分析器分析的对象时文档中的Field域。当Fieldshuxing tokenized(是否分词)为true时会对Field值进行分析,如图:
搜索时使用Analyzer
对搜索关键字进行分析和索引分析一样,使用Analyzer对搜索关键字进行分析、分词处理,使用分析后每个词语进行搜索。比如搜索关键字:spring web,经过分析器进行分词,得出 spring web 拿去索引词典表查找,找到索引连接到Document,解析Document内容
对于匹配整体Field域的查询可以在搜索时不分析,比如根据订单号,身份证号查询等
再次强调:搜索使用的分析器和索引使用的分析器要一致。
solr安装中文分析器(IKAnalyzer)
小结
本文主要介绍了一些分析器的内容,尤其是对于中文分析器的使用,分析器的执行流程和执行时机需要我们了解,希望能给读者带来帮助。