ELK系列(十)、ES中文分词器IK插件安装和配置远程词库热加载
简介
- IK Analyzer是一个开源的,基于Java语言开发的轻量级的中文分词工具包;
- 最初,它是以开源项目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插件安装和配置远程词库热加载相关推荐
- ElasticSearch 中文分词器ik的安装、测试、使用、自定义词库、热更新词库
文章目录 # 实验环境 # ik分词器的下载.安装.测试 ## 安装方法一:使用elasticsearch-plugin 安装 ## 安装方法二:下载编译好的包进行安装 1.下载 2.安装 3.重启` ...
- Elasticsearch7.15.2 修改IK分词器源码实现基于MySql8的词库热更新
文章目录 一.源码分析 1. 默认热更新 2. 热更新分析 3. 方法分析 二.词库热更新 2.1. 导入依赖 2.2. 数据库 2.3. JDBC 配置 2.4. 打包配置 2.5. 权限策略 2. ...
- 如何在Elasticsearch中安装中文分词器(IK+pinyin)
如何在Elasticsearch中安装中文分词器(IK+pinyin) 如果直接使用Elasticsearch的朋友在处理中文内容的搜索时,肯定会遇到很尴尬的问题--中文词语被分成了一个一个的汉字,当 ...
- Elasticsearch 7.X 中文分词器 ik 使用,及词库的动态扩展
一.ik中文分词器 上篇文章我们学习了ES集群分片和水平扩容,前面再使用的时候应该就会发现,在做match 匹配时,默认会进行分词,但当查询内容是中文时,分词效果是一个字被认定了一个词,这显然不符合我 ...
- 本地elasticsearch中文分词器 ik分词器安装及使用
ElasticSearch 内置了分词器,如标准分词器.简单分词器.空白词器等.但这些分词器对我们最常使用的中文并不友好,不能按我们的语言习惯进行分词. ik分词器就是一个标准的中文分词器.它可以根据 ...
- ELK系列(十五)、Elasticsearch核心原理一篇全搞定
目录 Lucene 介绍 核心术语 如何理解倒排索引? 检索方式 分段存储 段合并策略 Elasticsearch 核心概念 节点类型 集群状态 3C和脑裂 1.共识性(Consensus) 2.并发 ...
- ElasticSearch中文分词器-IK分词器的使用
IK分词器的使用 首先我们通过Postman发送GET请求查询分词效果 GET http://localhost:9200/_analyze {"text":"农业银行& ...
- solrcloud配置中文分词器ik
无论是solr还是luncene,都对中文分词不太好,所以我们一般索引中文的话需要使用ik中文分词器. 三台机器(192.168.1.236,192.168.1.237,192.168.1.238)已 ...
- JAVA开源中文分词器Ansj(依赖注入+调用方式+停词器)
Java有11大开源中文分词器,分别是word分词器,Ansj分词器,Stanford分词器,FudanNLP分词器,Jieba分词器,Jcseg分词器,MMSeg4j分词器,IKAnalyzer分词 ...
最新文章
- python excelwriter保存路径_python管理文件神器 os.walk
- cvs 文件如何解析?
- html中加入数据库,HTML中如何连接数据库?
- 计算机科学研究算法的局限性,计算机科学中若干难解问题的量子算法的分析.pdf...
- 火山安卓自定义组件封装源码讲解
- R语言:网页抓取之get the data
- matlab均值编程,均值滤波与matlab编程
- 项目jar包启动的命令
- Rancher某环境所有主机网络瘫痪问题
- 你知道低代码BPM平台吗?
- Spring Cloud Gateway(一)为什么用网关、能做什么、为什么选择Gateway、谓词工厂、过滤器配置
- 【涨粉10万】CSDN年度总结——再见2021
- 生成目录_将word转换成PDF
- How to evaluate and motivate a speech
- Idea创建SpringBoot搭建SSM框架项目,支持JSP页面
- linux 蓝牙 手机遥控器,嵌入式Android小项目之万能手机遥控器详解
- 树形DP入门(二叉苹果树+没有上司的舞会)
- 深圳python如何评价_如何评价shen 语言?
- java高并发程序设计1-线程停下来(stop,wait,suspend,await,interrupt,join,yield,sleep)的操作
- java jackson教程_史上最全的Jackson框架使用教程
热门文章
- TCL招聘专职游戏体验师 用户体验成大屏游戏重点
- 从数据库的分类说起,一文了解图数据库
- 11 月不可错过的 10 个新产品
- IOS绘制圆,直线,弧线,矩形,扇形,三角形,贝塞尔等图形
- java 转发url_Java转发重定向
- iOS视频直播:高仿喵播APP
- 校园安全教育主题PPT模板
- apex服务器不稳定,apex英雄掉帧不稳定怎么办-apex英雄掉帧不稳定解决办法_牛游戏网...
- 什么,借呗要关闭?官方回应:谣言!
- 【目标检测实验系列】AutoDL线上GPU服务器租用流程以及如何用Pycharm软件远程连接服务器进行模型训练 (以Pycharm远程训练Yolov5项目为例子 超详细)