博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
elasticsearch ik分词
阅读量:5215 次
发布时间:2019-06-14

本文共 2746 字,大约阅读时间需要 9 分钟。

elasticsearch 默认并不支持中文分词,默认将每个中文字切分为一个词,这明显不符合我们的业务要求。这里就需要用到ik分词插件。

本文主要囊括了以下几部分,ik插件安装、ik用法介绍、自定义词典使用


ik插件安装

  1. 查找并下载,解压
  2. 编写Dockerfile
  3. 运行测试 $docker-compose up -d

文件目录结构

|-- elasticsearch                    // 项目根目录|   |-- Dockerfile                   // Dockerfile文件|   |-- elasticsearch.yml            // elasticsearch配置文件|   |-- docker-compose.yml           // docker-compose配置文件|   |-- elasticsearch-analysis-ik-7.1.1  // ik解压文件夹

Dockerfile

FROM docker.elastic.co/elasticsearch/elasticsearch:7.1.1ADD elasticsearch-analysis-ik-7.1.1 /usr/share/elasticsearch/plugins/elasticsearch-analysis-ik-7.1.1

elasticsearch.yml

cluster.name: docker-clusternode.name: masternode.master: truenode.data: truenetwork.host: 0.0.0.0network.publish_host: 192.168.31.45cluster.initial_master_nodes:  - masterhttp.cors.enabled: truehttp.cors.allow-origin: "*"

docker-compose.yml

version: '3'services:  es:    build: .    container_name: master    environment:      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"    volumes:      - esdata:/usr/share/elasticsearch/data      - ./elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml    ports:      - 9200:9200      - 9300:9300volumes:  esdata:

ik用法介绍

  1. ik_max_word: 会将文本做最细粒度的拆分,比如会将"中华人民共和国国歌"拆分为"中华人民共和国,中华人民,中华,华人,人民共和国,人民,人,民,共和国,共和,和,国国,国歌",会穷尽各种可能的组合;
  2. ik_smart: 会做最粗粒度的拆分,比如会将"中华人民共和国国歌"拆分为"中华人民共和国,国歌"。
    创建articles索引,设置mappings
PUT /articles/{    "settings":{        "number_of_shards":5,        "number_of_replicas":1    },    "mappings":{            "properties":{                "title":{                    "type":"text",                    "analyzer":"ik_smart",                    "search_analyzer":"ik_smart"                },                "info":{                    "type":"text",                    "analyzer":"ik_smart",                    "search_analyzer":"ik_smart"                }            }    }}

插入数据后,查看分词结果

GET /${index}/${type}/${id}/_termvectors?fields=${fields_name} # 查看分词结果

自定义词典使用

配置文件在es/plugins/ik/config目录下

IKAnalyzer.cfg.xml:用来配置自定义词库main.dic:ik原生内置的中文词库,总共有27万多条,只要是这些单词,都会被分在一起quantifier.dic:放了一些单位相关的词suffix.dic:放了一些后缀surname.dic:中国的姓氏stopword.dic:英文停用词# ik原生最重要i的两个配置文件main.dic:包含了原生的中文词语,会按照这个里面的词语去分词stopword.dic:包含了英文的停用词

一般像停用词,会在分词的时候,直接被干掉,不会建立在倒排索引中

本地文件扩展词典

  1. 在该目录下新建mydict.dic文件
  2. 修改IKAnalyzer.cfg.xml配置文件文件
  3. 重启elasticsearch即可
IK Analyzer 扩展配置
mydict.dic

远程扩展词典【生产环境下更方便】

  1. nginx部署一个mydict.dic的静态文件即可

ik每分钟获取一次,优势在于无需重启elasticsearch

IK Analyzer 扩展配置
http://192.168.1.1/static/txt/mydict.dic

转载于:https://www.cnblogs.com/zenan/p/11008488.html

你可能感兴趣的文章
012 webpack中的router
查看>>
用Monitor简单3步监控中间件ActiveMQ
查看>>
迅为iTOP-4418开发板兼容八核6818开发板介绍
查看>>
com.fasterxml.jackson.databind.JsonMappingException
查看>>
【UVa 540】Team Queue
查看>>
Advanced Architecture for ASP.NET Core Web API
查看>>
排序算法(二)
查看>>
如何更改Android的默认虚拟机地址(Android virtual driver路径设置)
查看>>
Python内置函数(36)——iter
查看>>
HTML标签_1
查看>>
jsp组成元素
查看>>
排序算法(转)
查看>>
windows自带的可生成各种数据库连接字符串工具打开方法
查看>>
form表单中method的get和post区别
查看>>
Python命名规范
查看>>
滚动条
查看>>
程序员的自我修养九Windows下的动态链接
查看>>
Codeforces Round #361 (Div. 2)
查看>>
Python time & datetime & string 相互转换
查看>>
细说WebSocket - Node篇
查看>>