一、什么是分词

首先,Solr有自己基本的类型,string、int、date、long等等。
  对于string类型,比如在你的core/conf/manage-schema文件中,配置一个字段类型为string类型,如果查询符合“我是中国人”的数据,它就认为“我是中国人”是一个词语。
  但是如果你将该字段设置成了分词,即配置成了text_ik类型,就可能匹配“我”、“中国人”、“中国”、“中”、“人”带有这些字的该字段数据都可能被查询到。这就是分词带来的结果。具体要按照各自的业务来配置是否分词,分词对于大文本字段设置是合理的,但是对于小字段,设置分词是没必要的,甚至有相反的结果。比如你的某一个叫姓名的字段设置了分词,还不如设置string,查询时模糊匹配效果最好,(模糊匹配就是查询条件两边加上*),当然也要看自己业务需求是什么。

二、配置目地

就是让solr能对中文进行分词

【Solr】之中文分词及IK库的安装使用-4_分词器

三、分词器的选择

之前我们使用jieba分词,效果不是很好。
现在有个非常牛的分词器,IK 分词器,效果非常好,如果你一直使用solr 那么以后将一直使用IK分词器

中文分词在solr里面是没有默认开启的,需要自己配置一个中文分词器。
目前可用的分词器有smartcn,IK,Jeasy,庖丁。其实主要是两种,一种是基于中科院ICTCLAS的隐式马尔科夫HMM算法的中文分词器,如smartcn,ictclas4j,优点是分词准确度高,缺点是不能使用用户自定义词库;另一种是基于最大匹配的分词器,如IK ,Jeasy,庖丁,优点是可以自定义词库,增加新词,缺点是分出来的垃圾词较多。各有优缺点。
主流还是ik,可以扩展自己的词库,非常方便,加入一些热搜词,主题词,对于搜索而言,非常方便

四、分词器的的配置

4.1 下载

下载ik (5及以上版本通用)

4.2 解压文件及说明

ext.dic自定义词 如沙雕 在汉语里面不是一个词 ,它只是一个网络用语,可以配置到这=里面让它成为一个词
stopword.dic 停止字典 如 啊 吧 唉 不作分词
IKAnalyzer.cfg.xml配置ik的配置文件 不用改
Jar:如果要使用ik分词要导入的jar包

4.3 修改managed-schema

UseSmart 和分词的粒度相关:
False: 分词的粒度大,一句话里面分的词语少
True:分词的粒度细,一句话里面分的词语多

那我们在导入时需要的关键字多吗?让索引的数据量少一点。我们的粒度大:False
我们在搜索时需要的关键字多吗?我们想尽可能的覆盖所有的范围,我们的粒度要细:True

<!--添加一个中文分词器IK-->
<fieldType name="text_cn" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="org.apache.lucene.analysis.ik.IKTokenizerFactory" useSmart="false"/>
</analyzer>
<analyzer type="query">
<tokenizer class="org.apache.lucene.analysis.ik.IKTokenizerFactory" useSmart="true"/>
</analyzer>
</fieldType>

4.4 把修改managed-sahma覆盖到solr

【Solr】之中文分词及IK库的安装使用-4_分词器_02

4.5 重启solr

【Solr】之中文分词及IK库的安装使用-4_solr_03

4.6 查看分析出现错

产生原因是因为我们只添加发分词
但是ik想要运行必须要加入相关的配置

【Solr】之中文分词及IK库的安装使用-4_analyzer_04


上面的配置没有加入

4.7 把IK的配置入到solr

4.7.1,放入jar包

【Solr】之中文分词及IK库的安装使用-4_solr_05


4.7.2,放配置

在/usr/local/solr-7.7.2/server/solr-webapp/webapp/WEB-INF创建一个classes

【Solr】之中文分词及IK库的安装使用-4_分词器_06

4.8,重启solr分析

【Solr】之中文分词及IK库的安装使用-4_分词器_07

4.9存在问题

【Solr】之中文分词及IK库的安装使用-4_solr_08


要索引时要遵循一个原因

1,索引时分词的要尽量少

2,搜索时分词尽量多

【Solr】之中文分词及IK库的安装使用-4_分词器_09


改完重新覆盖,重启测试

【Solr】之中文分词及IK库的安装使用-4_分词器_10


到此为止,全部配置成功!!!

五、使用IK分词器

5.1 添加一个属性

【Solr】之中文分词及IK库的安装使用-4_analyzer_11


添加数据测试下

【Solr】之中文分词及IK库的安装使用-4_analyzer_12


查看分词

【Solr】之中文分词及IK库的安装使用-4_分词器_13


查询测试

【Solr】之中文分词及IK库的安装使用-4_analyzer_14


为什么pro3有 pro没有 因为ik分词时认为pro3是一个词 而pro不是词

5.2 ext.dic的说明

在ext.dic里添加一个自定义的词 沙雕
覆盖 查询
重启测试
发现现在solr认为 沙雕就是一个词