由于solr原生包对中文分词时会把每个字分成一个词,如下图:
在关键字查询时分词很不适用,所以需要我们手动添加分词jar包。solr有两种中文分词jar包,一种是solr自带的,一种是IKAnalyzer
solr自带分词
将下载的solr目录下的\solr-7.7.2\contrib\analysis-extras\lucene-libs\lucene-analyzers-smartcn-7.7.2.jar文件复制到\solr\WEB-INF\lib下;
修改solrhome文件\solrhome\myCore\conf\managed-schema,这个是你创建的集合的配置文件,路径可能不同,但文件名是相同的,修改如下:
<!-- solr 自带中文分词 -->
<fieldType name="text_so" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="org.apache.lucene.analysis.cn.smart.HMMChineseTokenizerFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="org.apache.lucene.analysis.cn.smart.HMMChineseTokenizerFactory"/>
</analyzer>
</fieldType>
修改后重启solr,选择你修改的集合,输入测试中文,选刚创建分词类型即可
可以看到上面已经成功把每个词都提取出来了。
IKAnalyzer分词
-
首先下载IKAnalyzer分词包
-
安装配置
将下载好的jar包复制到\solr\WEB-INF\lib下
修改solrhome文件\solrhome\myCore\conf\managed-schema,这个是你创建的集合的配置文件,路径可能不同,但文件名是相同的,修改如下:
<!-- ik 自带中文分词 -->
<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="true" conf="ik.conf"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
修改后重启solr,选择你修改的集合,输入测试中文,选刚创建分词类型即可
- 配置自己的中文分词规则
将上步中下载的zip包解压,将除了jar包的三个文件复制到solr的classes目录下
你可以通过修改ext.dic或者stopword.dic文件来配置你想要的分词规则,或者你也可以添加自己的分词文件,把你自己的分词文件加入到配置配置文件IKAnalyzer.cfg.xml中即可
如你可以把一些游戏名添加分词规则,如上古卷轴,流放者柯南
配置前
配置后
你若是从github上下载jar包,要用解压软件打开,把上面说的配置文件复制过去即可