smartcn分词器是目前ES官方推荐的中文分词插件,不过目前不支持自定义分词器词库,这里我们推荐使用 IK分词器,本分词器支持自定义分词器库。
一、安装自己 Elasticsearch 对应版本的ik分词器
1、查看适合 自己ES(Elasticsearch)版本的IK分词器插件
Releases · infinilabs/analysis-ik (github.com)
Index of: analysis-ik/stable/ (infinilabs.com)
2、安装ik分词器 共有两种方式 在线安装和离线安装
2.1、在线安装(在线安装对网络有一定要求,可能会安装失败)
在线安装,运行一个命令即可(ik的版本一定需要和es(Elasticsearch)的版本匹配 我所使用的是elasticsearch-analysis-ik-8.9.0.zip):
docker exec -it elasticsearch ./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v8.9.0/elasticsearch-analysis-ik-8.9.0.zip
# docker exec -it elasticsearch 中elasticsearch为我的容器名称,需要修改为自己的容器名称
2.2、离线安装(https://www.cnblogs.com/szwdun/p/10664348.html 参考)
2.2.1、下载elasticsearch-analysis-ik-8.9.0.zip包后将文件上传到服务器,并将压缩包拷贝到容器中(elasticsearch:/usr/share/elasticsearch/plugins文件夹中)
2.2.2、进入容器 ,并创建 ik文件夹,并进入创建的文件夹
2.2.3、将ik压缩包移动到创建的 ik文件夹,并进行解压
2.2.4、删除解压后的压缩包,并重启容器
3、输入以下命令查看是否安装成功
curl -X GET "localhost:9200/_cat/plugins?v&s=component&h=name,component,version"
出现以下内容即为安装成功
二、使用python调用 Elasticsearch的ik分词器
from elasticsearch import Elasticsearch
# Elasticsearch服务地址,这里假设它运行在本地的9200端口
es_host = "IP地址" #自己Elasticsearch 的地址 比如 http://127.0.0.1:9200(根据实际地址进行修改)
# 初始化Elasticsearch客户端
es = Elasticsearch([es_host])
# 检查Elasticsearch是否响应
if es.ping():
print("连接成功")
index_name = "your_vector_index_ik"
# 创建索引并设置映射
if not es.indices.exists(index=index_name): # 判断索引是否存在 不存在则新建
print("正在创建索引")
es.indices.create(index=index_name)
else:
print("索引已存在")
test = "中华人民共和国"
# 使用 ik_smart 或 ik_max_word 分词器进行分析 【ik_smart 粗分词】【ik_max_word 细分词】
analyzer = "ik_max_word" # 或者 "ik_max_word"
response = es.indices.analyze(index=index_name, body={
"analyzer": analyzer,
"text": test
})
# 打印分词结果
tokens = response['tokens']
# print(tokens)
for token in tokens:
print(token)
else:
print("连接失败")
效果展示(以下使用 ik_max_word参数 进行细分词 ):
三、自定义分词词典,实现分词效果
1、创建自己的分词词典
创建一个.dic文件,文件中写入我们自定义的分词
2、将创建好的ext.dic文件放入我们ik分词器在容器中的位置
可以输入以下命令进行查看
docker volume inspect es-plugins
3、进入红框中的路径即可(需要根据ik分词器实际安装在容器的路径进行配置)
4、进入config文件,并将创建的ext.dic文件放入config文件
5、打开IKAnalyzer.cfg.xml文件,并对文件进行配置
原始:
修改:
6、修改IKAnalyzer.cfg.xml文件后需要重启一下ES向量库
docker restart elasticsearch #(elasticsearch 是我的容器名称 需要根据实际名称进行重启)
7、使用自定义分词效果(使用进行测试 "真嘟假嘟,海猫毛")
原始效果(未使用自定义分词)
使用自定义分词效果:
四、配置停用词词典
1、创建一个停用词词典
2、在IKAnalyzer.cfg.xml中配置 停用词文件,并将停用词文件放入config文件下
3、修改IKAnalyzer.cfg.xml文件后需要重启一下ES向量库
docker restart elasticsearch #(elasticsearch 是我的容器名称 需要根据实际名称进行重启)
4、使用停用词词典效果 (使用进行测试 "煞笔一个人" 就不会出现我们所设置的停用词“煞笔”)
未使用停用词词典 效果:
使用停用词词典 效果: