简介

  1. IK Analyzer是一个开源的,基于Java语言开发的轻量级的中文分词工具包;
  2. 最初,它是以开源项目Luence 为应用主体的,结合词典分词和文法分析算法的中文分词组件;从 3.0 版本开始,IK 发展为面向 Java 的公用分词组件,独立亍 Lucene 项目,同时提供了对 Lucene 的默认优化实现。在 2012 版本中,IK 实现了简单的分词歧义排除算法,标志着 IK 分词器从单纯的词典分词向模拟语义分词衍化;

本篇就介绍如何给ES安装插件,以及使用ik中文分词器进行搜索,最后介绍一下如何热加载自定义词库。

ELK系列(一)、安装ElasticSearch+Logstash+Kibana+Filebeat-v7.7.0

ELK系列(二)、在Kibana中使用RESTful操作ES库

ELK系列(三)、安装Logstash插件及打包离线安装包

ELK系列(四)、Logstash读取nginx日志写入ES中

ELK系列(五)、Logstash修改@timestamp时间为日志的产生时间

ELK系列(六)、修改Nginx日志为Json格式并使用Logstash导入至ES

ELK系列(七)、Filebeat+Logstash采集多个日志文件并写入不同的ES索引中

ELK系列(八)、使用Filebeat+Redis+Logstash收集日志数据

ELK系列(九)、配置ES和Kibana的用户密码

---------------------------------------ES中文分词器ik-----------------------------------------

安装

下载

https://github.com/medcl/elasticsearch-analysis-ik

https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.7.0/elasticsearch-analysis-ik-7.7.0.zip

我使用的es7.7.0,所以我下载ik7.7.0,版本和es一一对应的。

安装

传到服务器上执行下面的命令解压:

mkdir ikmv elasticsearch-analysis-ik-7.7.0.zip ik/cd ikunzip elasticsearch-analysis-ik-7.7.0.zip
rm -rf elasticsearch-analysis-ik-7.7.0.zip

然后将该目录移动到$ES_HOME/plugins目录下,重启ES即可:

mv ik /opt/app/elasticsearch-7.7.0/plugins/
sudo -u elk nohup $ES_HOME/bin/elasticsearch >> $ES_HOME/output.log 2>&1 &

使用

建索引

在ES中建索引以及mapping:

#建索引
PUT /csdn#建mapping
POST /csdn/_mapping
{"properties": {"content":{"type": "text", "analyzer": "ik_max_word","search_analyzer": "ik_max_word"}}
}#查看mapping
GET /csdn/_mapping#建没有使用分词器的索引对比
PUT /wyk

造数据

例子:同时往csdn和wyk两个索引中插入同样的数据

POST /csdn/_doc/1
{"content":"特朗普暴打川普"
}POST /csdn/_doc/2
{"content":"特朗普和本拉登的爱恨情仇"
}POST /csdn/_doc/3
{"content":"美国白宫里有头猪会说普通的english"
}POST /csdn/_doc/4
{"content":"川普!=川建国"
}POST /wyk/_doc/1
{"content":"特朗普暴打川普"
}POST /wyk/_doc/2
{"content":"特朗普和本拉登的爱恨情仇"
}POST /wyk/_doc/3
{"content":"美国白宫里有头猪会说普通的english"
}POST /wyk/_doc/4
{"content":"川普!=川建国"
}

查询

使用命令查看分词的效果,三种模式:

如,查看"中华人民共和国" 在ik分词下的效果和默认情况的效果:

#ik分词 max模式 "细粒度"
GET /csdn/_analyze
{"text":"普通的","tokenizer": "ik_max_word"
}#ik分词 smart模式 "粗粒度"
GET /csdn/_analyze
{"text":"普通的","tokenizer": "ik_smart"
}#ES默认,中文每个字符一个词
GET /csdn/_analyze
{"text":"普通的","tokenizer": "standard"
}

然后我们查询上面造的数据中包含"普通的"关键字的数据,如下图所示,可以看到,因为wyk索引下没有使用ik分词,因此只要数据中有"普","通","的" 三个字符之一的结果都会展示出来,而在索引csdn因为用了ik分词,ik分词下"普通的"会被分为"普通"和"的",因此只有包含了"普通"或"的"的结果才会显示:

GET /csdn/_doc/_search
{"query": {"match": {"content": "普通的"}}
}GET /wyk/_doc/_search
{"query": {"match": {"content": "普通的"}}
}

查询高亮

很多时候我们在百度,或者CSDN进行搜索的时候,返回给我们的结果会把我们的查询关键字高亮显示,很直观的就可以看到自己想要的信息,像下面这样的查询结果高亮显示,使用ik可以很方便的将匹配到的结果加上标签返回,对前端开发很友好,我们也可以根据标签的位置看出分词的效果:

GET /csdn/_doc/_search
{"query": {"match": {"content": "普通的"}},"highlight": {"pre_tags" : ["<strong>", "<tag2>"],"post_tags" : ["</strong>", "</tag2>"],"fields" : {"content" : {}}}
}

自定义词库

业务词汇或者是人名或者是新出来的网络词汇,在分词器中都无法正确的识别,我们可以自己为IK分词器扩展词库,这里演示如何使用nginx上的远程静态文件来配置词汇:

准备工作

在nginx服务器上准备一个.txt文件,必须是utf-8编码:

配置

修改ik分词库的配置文件:

vim /opt/app/elasticsearch-7.7.0/plugins/ik/config/IKAnalyzer.cfg.xml

<!--修改这一行即可,指向自己的远程静态文件-->
<entry key="remote_ext_dict">http://wykd/wyk/csdn_dict.txt</entry> 

重启ES

修改了插件配置之后需要重启,如果之后对远程的词库.txt文件修改就不需要再重启ES了,该插件支持热更新分词。

#jps查看es进程杀掉ES
kill -9 xxxx#启动
sudo -u elk nohup $ES_HOME/bin/elasticsearch >> $ES_HOME/output.log 2>&1 &

验证

如上图,我在词库里加了一个"王义凯"的单词,在使用ik分词分析的时候会当成一个词,而默认的分词只会当做三个字去处理:

测试扩展词库的分词效果:

POST /csdn/_doc/1
{"content":"正义不会缺席"
}POST /csdn/_doc/2
{"content":"国王的新衣"
}POST /csdn/_doc/3
{"content":"等待你们的凯旋而归"
}POST /csdn/_doc/4
{"content":"这是王义凯的博客"
}POST /wyk/_doc/1
{"content":"正义不会缺席"
}POST /wyk/_doc/2
{"content":"国王的新衣"
}POST /wyk/_doc/3
{"content":"等待你们的凯旋而归"
}POST /wyk/_doc/4
{"content":"这是王义凯的博客"
}

----------------------

Q:ik_max_word 和 ik_smart 什么区别?

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

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

希望本文对你有帮助,请点个赞鼓励一下作者吧~ 谢谢!

ELK系列(十)、ES中文分词器IK插件安装和配置远程词库热加载相关推荐

  1. ElasticSearch 中文分词器ik的安装、测试、使用、自定义词库、热更新词库

    文章目录 # 实验环境 # ik分词器的下载.安装.测试 ## 安装方法一:使用elasticsearch-plugin 安装 ## 安装方法二:下载编译好的包进行安装 1.下载 2.安装 3.重启` ...

  2. Elasticsearch7.15.2 修改IK分词器源码实现基于MySql8的词库热更新

    文章目录 一.源码分析 1. 默认热更新 2. 热更新分析 3. 方法分析 二.词库热更新 2.1. 导入依赖 2.2. 数据库 2.3. JDBC 配置 2.4. 打包配置 2.5. 权限策略 2. ...

  3. 如何在Elasticsearch中安装中文分词器(IK+pinyin)

    如何在Elasticsearch中安装中文分词器(IK+pinyin) 如果直接使用Elasticsearch的朋友在处理中文内容的搜索时,肯定会遇到很尴尬的问题--中文词语被分成了一个一个的汉字,当 ...

  4. Elasticsearch 7.X 中文分词器 ik 使用,及词库的动态扩展

    一.ik中文分词器 上篇文章我们学习了ES集群分片和水平扩容,前面再使用的时候应该就会发现,在做match 匹配时,默认会进行分词,但当查询内容是中文时,分词效果是一个字被认定了一个词,这显然不符合我 ...

  5. 本地elasticsearch中文分词器 ik分词器安装及使用

    ElasticSearch 内置了分词器,如标准分词器.简单分词器.空白词器等.但这些分词器对我们最常使用的中文并不友好,不能按我们的语言习惯进行分词. ik分词器就是一个标准的中文分词器.它可以根据 ...

  6. ELK系列(十五)、Elasticsearch核心原理一篇全搞定

    目录 Lucene 介绍 核心术语 如何理解倒排索引? 检索方式 分段存储 段合并策略 Elasticsearch 核心概念 节点类型 集群状态 3C和脑裂 1.共识性(Consensus) 2.并发 ...

  7. ElasticSearch中文分词器-IK分词器的使用

    IK分词器的使用 首先我们通过Postman发送GET请求查询分词效果 GET http://localhost:9200/_analyze {"text":"农业银行& ...

  8. solrcloud配置中文分词器ik

    无论是solr还是luncene,都对中文分词不太好,所以我们一般索引中文的话需要使用ik中文分词器. 三台机器(192.168.1.236,192.168.1.237,192.168.1.238)已 ...

  9. JAVA开源中文分词器Ansj(依赖注入+调用方式+停词器)

    Java有11大开源中文分词器,分别是word分词器,Ansj分词器,Stanford分词器,FudanNLP分词器,Jieba分词器,Jcseg分词器,MMSeg4j分词器,IKAnalyzer分词 ...

最新文章

  1. python excelwriter保存路径_python管理文件神器 os.walk
  2. cvs 文件如何解析?
  3. html中加入数据库,HTML中如何连接数据库?
  4. 计算机科学研究算法的局限性,计算机科学中若干难解问题的量子算法的分析.pdf...
  5. 火山安卓自定义组件封装源码讲解
  6. R语言:网页抓取之get the data
  7. matlab均值编程,均值滤波与matlab编程
  8. 项目jar包启动的命令
  9. Rancher某环境所有主机网络瘫痪问题
  10. 你知道低代码BPM平台吗?
  11. Spring Cloud Gateway(一)为什么用网关、能做什么、为什么选择Gateway、谓词工厂、过滤器配置
  12. 【涨粉10万】CSDN年度总结——再见2021
  13. 生成目录_将word转换成PDF
  14. How to evaluate and motivate a speech
  15. Idea创建SpringBoot搭建SSM框架项目,支持JSP页面
  16. linux 蓝牙 手机遥控器,嵌入式Android小项目之万能手机遥控器详解
  17. 树形DP入门(二叉苹果树+没有上司的舞会)
  18. 深圳python如何评价_如何评价shen 语言?
  19. java高并发程序设计1-线程停下来(stop,wait,suspend,await,interrupt,join,yield,sleep)的操作
  20. java jackson教程_史上最全的Jackson框架使用教程

热门文章

  1. TCL招聘专职游戏体验师 用户体验成大屏游戏重点
  2. 从数据库的分类说起,一文了解图数据库
  3. 11 月不可错过的 10 个新产品
  4. IOS绘制圆,直线,弧线,矩形,扇形,三角形,贝塞尔等图形
  5. java 转发url_Java转发重定向
  6. iOS视频直播:高仿喵播APP
  7. 校园安全教育主题PPT模板
  8. apex服务器不稳定,apex英雄掉帧不稳定怎么办-apex英雄掉帧不稳定解决办法_牛游戏网...
  9. 什么,借呗要关闭?官方回应:谣言!
  10. 【目标检测实验系列】AutoDL线上GPU服务器租用流程以及如何用Pycharm软件远程连接服务器进行模型训练 (以Pycharm远程训练Yolov5项目为例子 超详细)