ElasticSearch之IK分词器的安装与使用

  • 前言
  • 安装
    • 离线安装
    • 在线安装
    • ik分词器测试
  • 扩展(停用)词(典)
    • 测试数据
    • 概念
    • 配置词典
      • 1.修改配置文件
      • 2.新建词典
      • 3.自定义内容
      • 4.重新启动ES
      • 5.测试
  • 远程词典
    • 1.新建项目
    • 2.启动项目
    • 3.配置远程扩展词典
    • 4.重启ES
    • 5.测试

前言

ElasticSearch中默认使用标准分词器进行分词,这种方式不适用于中文语法,所以对中文查询不友好。IK分词器是一款适用于中文语法,对中文分词、查询友好支持的一款分词器,下面我们来介绍一下IK分词器的安装与使用

安装

IK分词器不是ElasticSearch官方提供的,而是中国的以为大牛贡献的,而且开源到了github上: elasticsearch-analysis-ik

首先我们先下载与我们ElasticSearch版本对应的ik:elasticsearch-analysis-ik-6.8.0.zip

在正式安装ik分词器之前我们需要首先停止ElasticSearch

离线安装

  1. 首先上传我们下载的ik分词器的压缩包到ElasticSearch的plugins目录下

  2. 创建目录ik-analysis,移动ik至该目录下并解压

  3. 重新启动ElasticSearch

我们可以看到ElasticSearch启动是确实加载了ik分词器,并且顺利启动了。

配置完分词器启动ElasticSearch如果失败,就先去ElasticSearch目录下删除**data(历史数据)**目录,然后重新启动即可

在线安装

  1. 由于刚才我们演示了离线安装,首先我们要先停止ElasticSearch,删除离线安装的ik

  2. 删除ik分词器后,我们在ElasticSearch根目录下执行下面的安装命令./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.8.0/elasticsearch-analysis-ik-6.8.0.zip

  3. 安装完成后我们可以看到plugins目录下生成了ik分词器的目录

  4. 安装成功后我们重新启动ElasticSearch

    这次启动报错了,按照我们上面说的如果安装完ik分词器ElasticSearch报错就将ElasticSearch下的data目录删除,然后重新启动

    成功启动,而且没有报错。因为我们删除了ElasticSearch的data目录,所以我们的kibana要重新启动,启动成功后我们再次进入kibana就可以了

特别注意

ElasticSearch在线安装IK和离线安装IK分词器两种方式生成的IK的配置文件坐在目录不一样

在线安装:在ES安装目录中config目录下的analysis-ik/IKAnalyzer.cfg.xml

离线安装:在ES安装目录中/plugins/analysis-ik/config/IKAnalyzer.cfg.xml

ik分词器测试

IK分词器提供了两种mapping类型用来做文档的分词分别是 ik_max_wordik_smart

ik_max_word: 会将文本做最细粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,中华人民,中华,华人,人民共和国,人民,人,民,共和国,共和,和,国国,国歌”,会穷尽各种可能的组合,适合 Term Query;

ik_smart: 会做最粗粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,国歌”,适合 Phrase 查询。

进入到kibana输入一下命令测试ik分词器是否正常工作

GET /_analyze
{"text": "中华人民共和国国歌","analyzer": "ik_smart"
}GET /_analyze
{"text": "中华人民共和国国歌","analyzer": "ik_max_word"
}

如果出现以上结果,那么恭喜你的ik分词器已经集成成功了。

扩展(停用)词(典)

测试数据

1. 创建索引、映射与类型
PUT /christy
{"mappings": {"user":{"properties":{"name":{"type":"text",# 索引分词器"analyzer": "ik_max_word",# 检索分词器,默认情况下与索引分词器保持一致,可不配置"search_analyzer": "ik_max_word"},"age":{"type":"integer"},"bir":{"type":"date"},"introduce":{"type":"text","analyzer": "ik_max_word","search_analyzer": "ik_max_word"},"address":{"type":"keyword"}}}}
}2.批量插入测试数据
PUT /christy/user/_bulk{"index":{}}{"name":"Christy","age":20,"bir":"2001-01-01","introduce":"不要求很帅,像我这样就可以了","address":"京师"}{"index":{}}{"name":"Tide","age":23,"bir":"1998-09-08","introduce":"魔镜魔镜谁是世界上最美的女人","address":"开封"}{"index":{}}{"name":"hardy","age":5,"bir":"2016-02-12","introduce":"调皮捣蛋我最行","address":"杭州"}{"index":{}}{"name":"Tom","age":18,"bir":"2003-12-12","introduce":"Jerry是我最好的朋友","address":"纽约"}{"index":{}}{"name":"Jerry","age":6,"bir":"2015-10-10","introduce":"没有Tom的日子我真的好难过","address":"华盛顿"}{"index":{}}{"name":"布什","age":3,"bir":"2018-11-10","introduce":"我不是美国的那个总统,我只是一条普拉多,没有骂人的意思","address":"华盛顿"}{"index":{}}{"name":"ElasticSearch","age":15,"bir":"2006-06-19","introduce":"ElasticSearch是最牛逼的搜索引擎","address":"杭州"}

概念

IK支持自定义扩展词典停用词典,所谓**扩展词典就是有些词并不是关键词,但是也希望被ES用来作为检索的关键词,可以将这些词加入扩展词典。停用词典**就是有些词是关键词,但是出于业务场景不想使用这些关键词被检索到,可以将这些词放入停用词典。

可以修改IK分词器中config目录中IKAnalyzer.cfg.xml这个文件来定义扩展词典和停用词典

但是必须要注意的两点

1、词典的编码必须为UTF-8,否则无法生效

2、要注意在线安装和离线安装生成的IK配置文件位置不一样

我们最后采用的是在线安装的方式安装的ik,所以我们的ik生成的配置文件路径在ES安装目录中config目录下的analysis-ik/IKAnalyzer.cfg.xml

配置词典

1.修改配置文件

首先我们切换到ik的配置文件目录,通过命令vim IKAnalyzer.cfg.xml来指定自己配置的词典

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties><comment>IK Analyzer 扩展配置</comment><!--用户可以在这里配置自己的扩展字典 --><entry key="ext_dict">ext_dict.dic</entry><!--用户可以在这里配置自己的扩展停止词字典--><entry key="ext_stopwords">ext_stopwords.dic</entry><!--用户可以在这里配置远程扩展字典 --><!-- <entry key="remote_ext_dict">words_location</entry> --><!--用户可以在这里配置远程扩展停止词字典--><!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>

配置文件修改完毕后保存退出

2.新建词典

通过命令touch ext_dict.dictouch ext_stopwords.dic来创建我们的扩展词典和停用词典

3.自定义内容

可以看到我们通过vim ext_dict.dicvim ext_stopwords.dic分别向扩展词典里面加了蓝瘦香菇,在停用词典里面加入了碰瓷

4.重新启动ES

重新启动ElasticSearch的时候我们看到重新加载了IK的配置文件和我们自定义的扩展词典

5.测试

重新启动Kibana,添加以下测试数据

PUT /christy/user/_bulk{"index":{}}{"name":"干饭人","age":20,"bir":"2001-01-01","introduce":"晚上吃了三碗米饭,蓝瘦香菇","address":"京师大食堂"}{"index":{}}{"name":"郝建","age":23,"bir":"1998-09-08","introduce":"今天碰到一个碰瓷的老太太,好开森","address":"人民中路"}{"index":{}}

根据我们配置的扩展词蓝瘦香菇是可以搜索到我们想要查询的记录,而碰瓷被我们加入到了停用词典中,所以无法搜索出该记录。但是通过查询所有该条数据确实存在的。

对于扩展词和停用词有以下两点必须清楚:

1.就是该扩展词和停用词只对后续插入记录时建立索引有作用,对在此之前的记录不起作用

2.在配置词典的时候一行只能配置一个词,ES默认会将这一行作为一个扩展(停用)词

远程词典

我们还记的上面配置词典是修改的IK的配置文件中这么两行

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>……<!--用户可以在这里配置远程扩展字典 --><!-- <entry key="remote_ext_dict">words_location</entry> --><!--用户可以在这里配置远程扩展停止词字典--><!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>

远程词典(又称远程词库)主要解决动态添加扩展(停用)词,不用认为的去手动添加。比如CSDN上的热搜,如果要我们实现类似功能的话我们可以将每日搜索量排名前十的词存入到redis,然后用定时任务将其写入到一个文本文件中最后通过远程扩展词典同步到ES。

上面只是个举例,下面我们通过springboot新建一个记录扩展词的ext.txt文本文件(远程扩展停止词典类似,不做演示了),并通过web方式可以进行访问该文件,然后将该链接配置到上面的远程扩展词典remote_ext_dict

1.新建项目

这个没有什么好说的啊,新建一个空的项目,按照下图的配置设置就行了

2.启动项目

在浏览器中输入ext.txt的访问地址http://192.168.2.192:8989/es/ext.txt,能正常访问即可

3.配置远程扩展词典

我们先停止ElasticSearch,执行命令vim IKAnalyzer.cfg.xml,修改以下内容

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>……<!--用户可以在这里配置远程扩展字典 --><entry key="remote_ext_dict">http://192.168.2.192:8989/es/ext.txt</entry><!--用户可以在这里配置远程扩展停止词字典--><!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>

4.重启ES

重启ES后,我们可以看到远程扩展词典里面的词已经被加载

5.测试

然我们重新启动kibana,添加下面的数据

PUT /christy/user/_bulk{"index":{}}{"name":"柯南","age":10,"bir":"2011-01-01","introduce":"臭小子,你耗子尾汁吧","address":"东京"}

然后能行查询

GET /christy/user/_search
{"query": {"term": {"introduce": {"value": "耗子尾汁"}}}
}

再比如我们在ext.txt中又加了一个网络热词内牛满面,然后重新启动项目,ES则会自动加载远程词库(当然了这个需要点时间,不是立刻|及时加载的那种),如下图

这个时候我们再去下面的命令

ES确实将远程扩展词典里新加的内牛满面当做一个分词了

ES集成IK分词器的内容就是上面这些了,其实内容也是挺多的,今天时间太晚了,明天继续,干饭人come on!!! ヾ(◍°∇°◍)ノ゙

04.ElasticSearch之IK分词器的安装与使用相关推荐

  1. Elasticsearch(二) ik分词器的安装 以及 自定义分词

    ik分词器作为elasticsearch的一个插件,则是安装在es插件中. ik分词器的安装 1,创建ik分词目录上传与es相同版本的ik分词器插件,不同版本可能es启动 报错 在elasticsea ...

  2. docker、docker-compose 下安装elasticsearch、IK分词器

    docker.docker-compose 下安装elasticsearch.IK分词器 文章目录 docker.docker-compose 下安装elasticsearch.IK分词器 1.整体版 ...

  3. elasticsearch IK分词器的安装、使用与扩展

    ES 的默认分词器(standard)不支持中文分词,满足不了平时的需求,所以需要用能够支持中文分词的 IK 分词器.而且 IK 分词器也是支持英文分词的. 本文介绍下IK分词器的安装.基本使用方法: ...

  4. ElasticSearch学习----IK分词器

    IK分词器 一. IK分词器 ①. 在线安装IK 1. 必须将ElasticSearch服务中原始数据删除 2. 在ElasticSearch安装目录中执行如下命令 2. 重启ElasticSearc ...

  5. IK集成ElasticSearch,IK分词器的下载及使用

    IK集成ElasticSearch,IK分词器的下载及使用 下载ElasticSearch 8.7.0网址:Download Elasticsearch | Elastic 历史版本地址:Past R ...

  6. 【Elasticsearch】es IK分词器的安装

    1.概述 [Elasticsearch]es 7.8.0 唐诗三百首写入 Elasticsearch 会发生什么 之前我们创建索引,查询数据,都是使用的默认的分词器,分词效果不太理想,会把text的字 ...

  7. ES入门学习:ElasticSearch、Kibana、ik分词器的安装、简单使用及SpringBoot集成

    前言 es是采用Java语言开发,因此,想要安装运行es需要提前准备好jdk环境,关于linux配置jdk在前文linux配置jdk 本文主要介绍es的安装.kibana的安装和简单使用及ik分词器的 ...

  8. 腾讯云docker下安装elasticsearch及IK分词器-扩展词-停止词Kibana

    1.拉取 docker pull elasticsearch:7.7.0 2.运行 docker run --name elasticsearch -d -e ES_JAVA_OPTS="- ...

  9. Elasticsearch的ik分词器安装和验证

    1.什么是分词器         把文本转换为一个个的单词,分词称之为analysis.es默认只对英文语句做分词,中文不支持,每个中文字都会被拆分为独立的个体. 2.es内置分词器 standard ...

最新文章

  1. barrel-distortion
  2. java xlsx怎么转换成excel格式_pdf文件怎么转换成html网页格式?用什么方法来转换?...
  3. suspend java_Java线程stop和suspend的废弃
  4. 故障排查 node_Kubernetes 故障解决心得(一)
  5. Cocos2d-x 引擎概要
  6. java mencoder_java 用ffmpeg和mencoder进行视频转码
  7. 【备忘】修复过的SCCM报错
  8. Infor SyteLine ERP 安装后中文语言设置
  9. BindingResult总结以及注意事项
  10. ​单页应用程序是如何打破网页设计的?
  11. Fibonacci数列Linux程序,使用fork()调用计算Fibonacci数列
  12. 【房屋租赁网管理系统】
  13. 电脑ping手机该怎么玩(很多网友都说电脑ping不通手机)?
  14. Springboot2中文件上传报java.io.FileNotFoundException: C:\Users\WIzarder\AppData\Local\Temp\tomcat.8080.589
  15. 各种品牌主板、笔记本、台式一体机的U盘启动热键一览表
  16. Mask R-CNN学习笔记
  17. Hive正则表达式对数据过滤
  18. 多线程并发下集合不安全类-ArrayList
  19. 新手必看,关于ARM的22个常用概念
  20. python跳舞的线_舞蹈链(Dance Link X)算法详解及python实现

热门文章

  1. amcharts属性
  2. 电信获取光猫超级密码
  3. 关于获取电信光猫超级密码
  4. 68个dlib的landmarks
  5. guzzle php,PHP HTTP 客户端 - Guzzle
  6. matlab 2013至2016 32bit、64bit破解版集合 百度云盘下载
  7. 前度控制器源代码分析
  8. 死锁的处理策略—预防死锁、避免死锁、检测和解除死锁
  9. 标识符---概述及组成规则
  10. 洛谷----P1036 [NOIP2002 普及组] 选数