1、什么是分词器
把文本转换为一个个的单词,分词称之为analysis。es默认只对英文语句做分词,中文不支持,每个中文字都会被拆分为独立的个体。
2、es内置分词器
- standard:默认分词,单词会被拆分,大小会转换为小写。
- simple:按照非字母分词。大写转为小写。
- whitespace:按照空格分词。忽略大小写。
- stop:去除无意义单词,比如the/a/an/is…
- keyword:不做分词。把整个文本作为一个单独的关键词。
3、ik中的两种分词器
- ik_max_word:会将文本做最细粒度的拆分,比如会将“我是中国人”拆分为“我,是,中国人,中国,国人”,会穷尽各种可能的组合,适合 Term Query;
- ik_smart:会做最粗粒度的拆分,比如会将“我是中国人”拆分为“我,是,中国人”,适合 Phrase 查询。
4、自定义中文分词库
中文词汇复杂繁多,ik分词器也不能保证所有情况下都能有效的分词,例如:“骚年在认真的学习”,就会被拆分成“骚,年在,认真的,学习”,很明显“年在”并不是一个词,同样的一些专属名词也不能很有效的分词,比如:“印象笔记”,“掘金网“等等,这时候我们就需要为分词器,添加自定义词汇。
5、安装ik分词器
1)下载地址:https://github.com/medcl/elasticsearch-analysis-ik/releases
选择对应的版本,我之前安装的elasticsearch是7.4.2版本,ik也是这个版本。
2)下载到plugins文件夹下
使用命名进入es容器内部
docker exec -it 0d3a094476dd /bin/bash
进入后直接切换到plugins目录,通过命令下载ik压缩包到此目录
wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.4.2/elasticsearch-analysis-ik-7.4.2.zip
如果出现wget没有安装,就先安装再下载。
#安装wget
yum install wget
最后下载完成后可以看到目录下有elasticsearch-analysis-ik-7.4.2.zip文件。
3)解压文件到ik文件夹下,重启es。
unzip elasticsearch-analysis-ik-7.4.2.zip -d ik
#赋予权限
chmod -R 777 ik/
检查ik,进入bin目录,查看
elasticsearch-plugin list
重启es
#docker下执行
docker restart elasticsearch
#linux下执行
./bin/elasticsearch
4)验证ik
POST _analyze
{
"analyzer": "ik_smart",
"text": "我是中国人"
}
POST _analyze
{
"analyzer": "ik_max_word",
"text": "我是中国人"
}
6、自定义分词库
1)在nginx/html下创建es目录,编写fenci.txt文档,插入要分词的内容。
mkdir es
2)nginx访问
3)修改ik分词器配置文件、添加自定义词典
cd /home/data/elasticsearch/plugins/ik/config
修改IKAnalyzer.cfg.xml文件
vi IKAnalyzer.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>IK Analyzer 扩展配置</comment>
<!--用户可以在这里配置自己的扩展字典 -->
<entry key="ext_dict">custom.dic</entry>
<!--用户可以在这里配置自己的扩展停止词字典-->
<entry key="ext_stopwords"></entry>
<!--用户可以在这里配置远程扩展字典 -->
<!--<entry key="remote_ext_dict">location</entry> -->
<!--用户可以在这里配置远程扩展停止词字典-->
<!--<entry key="remote_ext_stopwords">http://xxx.com/xxx.dic</entry> -->
</properties>
#备份
cp IKAnalyzer.cfg.xml IKAnalyzer.cfg.xml20200724
修改为一下内容,重启es
<properties>
<comment>IK Analyzer 扩展配置</comment>
<!--用户可以在这里配置自己的扩展字典 -->
<entry key="ext_dict"></entry>
<!--用户可以在这里配置自己的扩展停止词字典-->
<entry key="ext_stopwords"></entry>
<!--用户可以在这里配置远程扩展字典 -->
<entry key="remote_ext_dict">http://172.16.175.211/es/fenci.txt</entry>
<!--用户可以在这里配置远程扩展停止词字典-->
<!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>
4)验证自定义分词
POST _analyze
{
"analyzer": "ik_max_word",
"text": "乔碧萝殿下"
}
如果有其他的分词可以自行在fenci.txt文件加的。