文章目录
1.安装 ik 分词器
ES本质上也属于一种nosql(not other sql)数据库,类似于redis,也是通过将数据存储到内存中或者永久化到磁盘中从而提升查询性能,在使用ES进行搜索时,会首先通过分词器提取所有关键字信息,通过将搜索的内容所有关键字一个词一个词拆分,通过倒排索引进行村粗,需要检索时再进行模糊检索关键字,从而获取搜索信息;
市面上常见的分词器有:
- CJK(中日韩分词器):对中文不友好,分词方式为英文常见方式,将每俩个字符进行拆分,例如当前这句话,其会拆分为 对中、中文、文不、不友…
- IK(中文分词器):开源的对中文友好的分词器,对于英文分词和CJK类似,但是对于中文分词会依靠其特有的中文字典进行分词,通过匹配中文字典来准确拆分出中文词汇;
1.1 下载压缩文件
从 ik 分词器项目仓库中下载 ik 分词器安装包,下载的版本需要与 Elasticsearch 版本匹配:https://github.com/medcl/elasticsearch-analysis-ik;
或者可以访问 gitee
镜像仓库:https://gitee.com/mirrors/elasticsearch-analysis-ik;
下载 elasticsearch-analysis-ik-7.9.3.zip
复制到 /root/
目录下;
也可以选择将本地文件的压缩文件直接上传到/root/
目录下;
1.2 在三个节点上安装 ik 分词器
cd ~/
# 复制 ik 分词器到三个 es 容器
docker cp elasticsearch-analysis-ik-7.9.3.zip node1:/root/
docker cp elasticsearch-analysis-ik-7.9.3.zip node2:/root/
docker cp elasticsearch-analysis-ik-7.9.3.zip node3:/root/
# 在 node1 中安装 ik 分词器
docker exec -it node1 elasticsearch-plugin install file:///root/elasticsearch-analysis-ik-7.9.3.zip
# 在 node2 中安装 ik 分词器
docker exec -it node2 elasticsearch-plugin install file:///root/elasticsearch-analysis-ik-7.9.3.zip
# 在 node3 中安装 ik 分词器
docker exec -it node3 elasticsearch-plugin install file:///root/elasticsearch-analysis-ik-7.9.3.zip
# 重启三个 es 容器
docker restart node1 node2 node3
1.3 查看安装结果
在浏览器中访问 http://192.168.64.181:9200/_cat/plugins
如果插件不可用,可以卸载后重新安装:
docker exec -it node1 elasticsearch-plugin remove analysis-ik
docker exec -it node2 elasticsearch-plugin remove analysis-ik
docker exec -it node3 elasticsearch-plugin remove analysis-ik
2.ik分词测试
ik分词器提供两种分词器: ik_max_word
和 ik_smart
:
ik_max_word
: 会将文本做最细粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,中华人民,中华,华人,人民共和国,人民,人,民,共和国,共和,和,国,国歌”,会穷尽各种可能的组合,适合 Term Query;ik_smart
: 会做最粗粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,国歌”,适合 Phrase 查询。
2.1 ik_max_word
分词测试
使用 head 执行下面测试:
向 http://192.168.64.181:9200/_analyze
路径提交 POST
请求,并在协议体中提交 Json
数据:
{
"analyzer":"ik_max_word",
"text":"中华人民共和国国歌"
}
2.2 ik_smart 分词测试
使用 head 执行下面测试:
向 http://192.168.64.181:9200/_analyze
路径提交 POST
请求,并在协议体中提交 Json
数据:
{
"analyzer":"ik_smart",
"text":"中华人民共和国国歌"
}