把一段中文划分成一个个的关键字,我们在搜索时候会把自己的语句进行分词,会把数据库中或者索引库中的数据进行分词,然后进行一个匹配操作 ,默认的中文分词是将每个字分成一个词。目前比较流行的是ik分词器是一个好用的中文分词器。
下载IK分词器根据你的Es的版本来下载对应版本的IK,这里我使用的是7.16.2的ES,所以就下载ik-7.16.2.zip的文件(这种版本对应的整挺好)
下载网址
ElasticSearch:简单介绍以及使用Docker部署ElasticSearch 和 Kibana
我以这篇博客为基础,在服务器新创建一个plugins文件夹,好放ik插件,然后挂载
mkdir -p /usr/local/elasticsearch/plugins/ik
新创建的文件夹也要赋予用户操作权限
chmod -R 777 /usr/local/elasticsearch/plugins/ik
使用xftp将文件拷贝到服务器的上述路径之后,解压
//解压 unzip elasticsearch-analysis-ik-7.16.2.zip //完事之后,删除压缩包 rm -rf elasticsearch-analysis-ik-7.16.2.zip
停止上面那篇博客创建的容器并删除
docker stop 容器ID/容器名 docker rm 容器ID/容器名
重新创建容器服务运行
docker run -itd -p 9200:9200 -p 9300:9300 -p 5601:5601 -v /usr/local/elasticsearch/config/jvm.options:/home/elasticsearch/elasticsearch-7.16.2/config/jvm.options -v /usr/local/elasticsearch/config/elasticsearch.yml:/home/elasticsearch/elasticsearch-7.16.2/config/elasticsearch.yml -v /usr/local/elasticsearch/data:/home/elasticsearch/elasticsearch-7.16.2/data -v /usr/local/elasticsearch/plugins://home/elasticsearch/elasticsearch-7.16.2/plugins --name EsKibana nshou/elasticsearch-kibana
查看插件
http://IP:9200/_cat/plugins测试IK分词器
使用kibana的Dev Tools工具来测试IK分词器
http://IP:5601/app/dev_tools#/console
IK提供了两种分词算法: ik_smart和ik_max_word
ik_smart:最少切分请求一个分词器,填好分词要求
GET _analyze
{
"analyzer": "ik_smart",
"text": "搜索引擎"
}
ik_max_word: 最多切分
GET _analyze
{
"analyzer": "ik_max_word",
"text": "搜索引擎"
}
不过这也是看你输入的text来的,有时候最少切分和最多切分的结果差不多
像如下句子就切分得差不多,当是一个名词的时候,像上面那样好像就切分的区别大一些
GET _analyze
{
"analyzer": "ik_smart",
"text": "我来试试这个切分算法"
}
GET _analyze
{
"analyzer": "ik_max_word",
"text": "我来试试这个切分算法"
}
自定义词典
分词算法毕竟是算法,不可能穷尽所有我们的需求。
有些我们自己的土话可能就不需要IK分词器将它分割开
如下例子不管使用那个算法都分开了
GET _analyze
{
"analyzer": "ik_smart",
"text": "三克油"
}
GET _analyze
{
"analyzer": "ik_max_word",
"text": "三克油"
}
所以我们要自定义一个三克油的词来让IK分词器别把他们分割开了
在如下目录下有着相应的配置文件
plugins/ik/config
下面.dic后缀的都是字典
我们随便进一个main.dic看看,可以看见都是词语
IKAnalyzer.cfg.xml 配置文件
我们修改这个配置文件
IK Analyzer 扩展配置 ext_dict.dic
并在config 这个目录下面新建一个ext_dict.dic文件
将自定义的词语放进去
修改文件之后,我们需要重启ElasticSearch
docker restart 容器ID/容器名
再次使用kibana 的dev tools ,不管那个算法策略都有三克油这个词
GET _analyze
{
"analyzer": "ik_smart",
"text": "三克油"
}
GET _analyze
{
"analyzer": "ik_max_word",
"text": "三克油"
}
(写博客主要是对自己学习的归纳整理,资料大部分来源于书籍、网络资料、官方文档和自己的实践,整理的不足和错误之处,请大家评论区批评指正。同时感谢广大博主和广大作者辛苦整理出来的资源和分享的知识。)



