前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于 DOCKER 快速部署 ELASTICSEARCH 集群-集成IK分词器

基于 DOCKER 快速部署 ELASTICSEARCH 集群-集成IK分词器

作者头像
茶半香初
发布2021-11-26 14:41:07
7660
发布2021-11-26 14:41:07
举报
文章被收录于专栏:程序员那点事

上篇文章介绍了如何基于 DOCKER 快速部署 ELASTICSEARCH 集群,接下来介绍如何在容器里集成IK分词器

什么是分词器?为什么要分词器?

Es默认的分词器,在中文的分词上并不友好,会将语句每个字进行分词作为索引,所以在使用Term关键字查询的时候多个汉字无法命中文档。这个时候就需要一个合理的分词规则,将一个完整的语句划分为多个比较复合表达逻辑的独立的词条。分词器包含三个部分:

  • character filter:分词之前的预处理,过滤掉HTML标签、特殊符号转换(例如,将&符号转换成and、将|符号转换成or)等
  • tokenizer:分词
  • token filter:标准化

ElasticSeach内置分词器

  1. standard分词器:(默认的)它将词汇单元转换成小写形式,并去掉停用词(a、an、the等没有实际意义的词)和标点符号,支持中文采用的方法为单字切分(例如,‘你好’切分为‘你’和‘好’)
  2. simple分词器:首先通过非字母字符来分割文本信息,然后将词汇单元同一为小写形式。该分析器会去掉数字类型的字符
  3. Whitespace分词器:仅仅是去除空格,对字符没有lowcase(大小写转换)化,不支持中文;并且不对生成的词汇单元进行其他的标准化处理
  4. language分词器:特定语言的分词器,不支持中文

IK分词器

IK分词器在是一款 基于词典和规则 的中文分词器,提供了两种分词模式:ik_smart (智能模式)和ik_max_word (细粒度模式)

例如输入数据:

代码语言:javascript
复制
a

智能模式效果:

代码语言:javascript
复制

细粒度模式:

代码语言:javascript
复制

ElasticSearch集成Ik分词器

1、方式一

执行docker exec命令进入容器,下载IK分词器zip包https://github.com/medcl/elasticsearch-analysis-ik/releases,然后解压复制到elasticsearch的插件目录,然后重启容器即可,但是这样需要在集群里的每个容器都执行一遍,后续容器销毁了,创建新的容器还需要重复来一遍,费事费力,果断放弃。

2、方式二

基于elasticsearch的官方镜像,制作一个集成了IK分词器的新镜像,这样后续只要基于这个新镜像创建的新容器就自带了IK分词器,这里需要注意,由于elasticsearch每次版本变动比较大,所以在集成IK分词器时要注意版本对应

编写DockerFile
代码语言:javascript
复制
FROM docker.elastic.co/elasticsearch/elasticsearch:7.4.0
#作者
MAINTAINER GongLJ 
RUN cd /usr/share/elasticsearch && ./bin/elasticsearch-plugin install --patch https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.4.0/elasticsearch-analysis-ik-7.4.0.zip

构建镜像

代码语言:javascript
复制
在DockerFile所在目录运行:docker build --tag=elastic-custom .
clipboard_20191120125544.png
clipboard_20191120125544.png

构建过程报错:

clipboard_20191120013112.png
clipboard_20191120013112.png

原因是,安装 IK 分词器的时候需要一次确认交互,将dockerfile修改为:

代码语言:javascript
复制
FROM docker.elastic.co/elasticsearch/elasticsearch:7.4.0
#作者
MAINTAINER GongLJ 
RUN sh -c '/bin/echo -e "y" | /usr/share/elasticsearch/bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.4.0/elasticsearch-analysis-ik-7.4.0.zip'

单机启动,测试Dockerfile是否正确

启动的时候需要添加参数:ES_JAVA_OPTS=-Xms512m -Xmx512m,否则会报错

clipboard_20191120014012.png
clipboard_20191120014012.png
clipboard_20191120014548.png
clipboard_20191120014548.png

启动成功,日志里也能看见插件ik分词器安装成功

编写docke-compose-custom.yml文件

更改镜像为集成了ik插件的elasticsearch镜像,这里我构建的镜像名称为:elasticsearch-ik-custom:7.4.0

代码语言:javascript
复制
version: '2.2'
services:
  es01:
    image: elasticsearch-ik-custom:7.4.0
    container_name: es01
    environment:
      - node.name=es01
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=es02,es03
      - cluster.initial_master_nodes=es01,es02,es03
      - bootstrap.memory_lock=true
      - http.cors.enabled=true
      - http.cors.allow-origin=*
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - ./data/node0:/usr/share/elasticsearch/data
      - ./logs/node0:/usr/share/elasticsearch/logs
    ports:
      - 9200:9200
    networks:
      - elastic
  es02:
    image: elasticsearch-ik-custom:7.4.0
    container_name: es02
    environment:
      - node.name=es02
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=es01,es03
      - cluster.initial_master_nodes=es01,es02,es03
      - bootstrap.memory_lock=true
      - http.cors.enabled=true
      - http.cors.allow-origin=*
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - ./data/node1:/usr/share/elasticsearch/data
      - ./logs/node1:/usr/share/elasticsearch/logs
    networks:
      - elastic
es03:
    image: elasticsearch-ik-custom:7.4.0
    container_name: es03
    environment:
      - node.name=es03
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=es01,es02
      - cluster.initial_master_nodes=es01,es02,es03
      - bootstrap.memory_lock=true
      - http.cors.enabled=true
      - http.cors.allow-origin=*
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - ./logs/node2:/usr/share/elasticsearch/data
      - ./logs/node2:/usr/share/elasticsearch/logs
    networks:
      - elastic

networks:
  elastic:
    driver: bridge

启动服务

代码语言:javascript
复制
docker-compose -f docker-compose-custom.yml up -d

启动elasticsearch-head服务

代码语言:javascript
复制
cd ~/app/elasticsearch-head
#后台运行
grunt server &

验证IK分词器

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/12/02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是分词器?为什么要分词器?
  • ElasticSeach内置分词器
  • IK分词器
  • ElasticSearch集成Ik分词器
    • 1、方式一
      • 2、方式二
        • 构建镜像
        • 单机启动,测试Dockerfile是否正确
        • 编写docke-compose-custom.yml文件
        • 启动服务
        • 启动elasticsearch-head服务
        • 验证IK分词器
    相关产品与服务
    Elasticsearch Service
    腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档