docker容器中的Elasticsearch如何添加ik分词器
Elasticsearch默认的分词器是标准分词器:standard。将中文一个字一个字地分词。不适合我们中文的特点。因此es有提供了ik分词器对中文进行分词
一、安装的docker
(1)拉取elasticsearch镜像
docker pull docker.elastic.co/elasticsearch/elasticsearch:7.9.3
这条命令是拉取最新版本的elasticsearch,如果需要安装其他版本的可以到这个查看各个版本的镜像名与标签。
(2)启动elasticsearch
拉取镜像回来,就可以run一个容器启动elasticsearch
docker run -p 9200:9200 -p 9300:9300 -d -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.9.3
这里是后台启动运行elasticsearch容器
二、下载ik分词器并配置ik分词器到elasticsearch中
ik分词器
ik官方github地址给出两种方法下载和配置ik分词器。这里我使用的是第二种,比较简单。第一种请参考github官方教程。
(1)上面我们启动的elasticsearch容器是在后台运行,所以这里我们以交互式进入正在运行的elasticsearch容器中
docker exec -it <容器ID> /bin/bash
(2)进入elasticsearch容器中,当前目录已是elasticsearch目录中,这时可以查看当前目录的文件夹与文件情况可以看到plugin文件夹
后面我们下载回来的ik分词器就是在保存在这个文件夹下的。
这时我们可以直接执行ik官方给出的下载指令了
./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.3.0/elasticsearch-analysis-ik-6.3.0.zip
NOTE: replace 6.3.0 to your own elasticsearch version:注意:替换上面指令中6.3.0成你之前安装的elasticsearch 版本。比如我下载的elasticsearch 是7.9.3,将指令中所有的6.3.0都改成7.9.3
运行这条指令后,它会自动下载和配置的。
(3)运行(2)步骤中的指令后,重新启动elasticsearch就可以使用ik分词器了。
三、在python使用elasticsearch 和ik分词器
安装elasticsearch库
pip install elasticsearch
(1)连接elasticsearch,创建索引
from elasticsearch import Elasticsearch es = Elasticsearch(hosts=[{"host": "localhost", "port": 9200}]) index = "test" es.indices.create(index=index, ignore=[400, 404])
(2)使用ik分词器在mapping这一步
mappings = { "properties": { "properties": { "docid": { "type": "long" }, "doc": { "type": "text" "index": True, "analyzer": "ik_max_word", "similarity": "BM25" }, } } } es.indices.put_mapping(index=index, body=mappings)
这里使用的ik分词器是ik_max_word
ik分词器有两种分词方式:ik_smart 和 ik_max_word
ik_smart :是粗粒度分词。
ik_max_word:是细粒度分词,
例如 “自然语言处理”,ik_smart 将“自然语言处理”分为一个词。ik_max_word会将“自然语言处理”分为 “自然语言处理”和(“自然”, “语言”, “处理”),然后按照需要选其他一个。