快捷搜索: 王者荣耀 脱发

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会将“自然语言处理”分为 “自然语言处理”和(“自然”, “语言”, “处理”),然后按照需要选其他一个。

经验分享 程序员 微信小程序 职场和发展