分词配置及使用@SOLR7实践(三)
分词配置及使用
一、中文分词
中文分词网上有很多,按照客户要求,须有自定义词库,可以动态加载词库。
项目采用了IK分词器,但IK在2012年SOLR4后停止更新了,最后的版本是IK Analyzer 2012 FF,linliangyi的博客 http://linliangyi2007.iteye.com
liangyongxing介绍了IK支持SOLR6的方法,参见 http://www.cnblogs.com/liang1101/articles/6395016.html ,其项目发布在 https://github.com/liang68/ik-analyzer-solr6 。
Magese参考liangyongxing方法,增加了IK对SOLR7的支持,项目发布在
https://github.com/magese/ik-analyzer-solr7 。
1. 配置managed-schema
编辑/var/solr/data/new_core/conf/managed-schema
增加新数据类型的定义
<fieldType name="text_ik" class="solr.TextField">
<analyzer type="index">
<tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="false" conf="ik.conf"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="false" conf="ik.conf"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
IK下还可以配置同义词和拼音等,由于客户没有相关需求,只进行了相关调研,项目中没有实际使用。
2. 配置IKAnalyzer.cfg.xml
在/var/solr/data/new_core/conf/下创建 IKAnalyzer.cfg.xml
编辑内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<entry key="ext_dict">ext.dic;</entry>
<entry key="ext_stopwords">stopword.dic;</entry>
</properties>
3. ik.conf
在/var/solr/data/new_core/conf/下创建 ik.conf 和 dynamic.dic
并编辑ik.conf内容如下:
files=dynamic.dic
lastupdate=0
4. 自定义词库和停止词词库
将IKAnalyzer.cfg.xml中配置的ext.dic和stopword.dic拷贝到/var/solr/data/new_core/conf/目录下。
ext.dic 和 stopword.dic 需保存为无BOM的UTF8文件,文件内每个词单独占一行。
5. 引用IK的jar包
将ik-analyzer-solr7-7.x.jar拷贝到/var/solr/data/new_core/lib目录。
jar包的下载地址 https://github.com/magese/ik-analyzer-solr7 。
6. 分词验证
new_core对应的Analysis页面中验证中文分词是否起作用
二、英数字的部分搜索
检索通讯录时,若需要对部分手机号码和部分邮件地址进行匹配,可以编辑/var/solr/data/new_core/conf/managed-schema ,增加新数据类型的定义
<fieldType name="mobile_email" class="solr.TextField">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.SnowballPorterFilterFactory" />
<filter class="solr.NGramFilterFactory" minGramSize="2" maxGramSize="11" />
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
</analyzer>
</fieldType>
参考文章
https://www.cnblogs.com/zhoujg/p/5054122.html
https://stackoverflow.com/questions/12101639/solr-partial-email-search-with-exact-match