elasticsearch中文分词器详解(代码片段)

江晓龙的技术博客 江晓龙的技术博客     2022-12-01     773

关键词:

1.es安装中文分词器

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

1.1.安装中文分词器

安装中文分词器的要求:

​ 1.分词器的版本要与es的版本一直

​ 2.所有es节点都需要安装中文分词器

​ 3.安装完分词器需要重启

1.在线安装
[root@elasticsearch ~/soft]# cd /usr/share/elasticsearch/bin/
[root@elasticsearch /usr/share/elasticsearch/bin]# ./elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.6.0/elasticsearch-analysis-ik-6.6.0.zip

2.离线安装
[root@elasticsearch ~/soft]# cd /usr/share/elasticsearch/bin/
[root@elasticsearch /usr/share/elasticsearch/bin]# cd /usr/share/elasticsearch/plugins/
[root@elasticsearch /usr/share/elasticsearch/plugins]# mkdir ik
[root@elasticsearch /usr/share/elasticsearch/plugins]# cd ik
将分词器的包扔到服务器上
[root@elasticsearch /usr/share/elasticsearch/plugins/ik]# unzip elasticsearch-analysis-ik-6.6.0.zip 
[root@elasticsearch /usr/share/elasticsearch/plugins/ik]# rm -rf elasticsearch-analysis-ik-6.6.0.zip

3.任何方式安装的分词器都需要重启
[root@elasticsearch ~]# systemctl restart elasticsearch

另一种安装中文分词器方法
[root@elasticsearch ~]# /usr/share/elasticsearch/bin/elasticsearch-plugin install  file:///root/elasticsearch-analysis-ik-6.6.0.zip 

重启的时候在日志里会显示导入了分词器插件

1.2.开启kibana的api查询功能

开启kibana的api查询功能之后就可以在kibana上执行curl交互式时传输的一些指令,并且kibana会把我们的curl命令自动转换成kibana自己的命令类型

点击Dev tools---get to work

在这里就可以执行各种curl命令,当curl命令粘贴到这里时自动回变成kibana自己的格式,可以全选中一并执行,也可以单个执行,并且即使刷新页面,里面的命令也不会丢失

2.没有使用中文分词器查询中文高亮词显示的效果

来看一下索引没有设置中文分词器之前查询包含某个汉字显示高亮的效果

2.1.建一个xinwen索引并插入几条中文数据

在xinwen索引中插入几条中文数据

curl -XPOST http://localhost:9200/xinwen/create/1 -H Content-Type:application/json -d
"content":"美国留给伊拉克的是个烂摊子吗"

curl -XPOST http://localhost:9200/xinwen/create/2 -H Content-Type:application/json -d
"content":"公安部:各地校车将享最高路权"

curl -XPOST http://localhost:9200/xinwen/create/3 -H Content-Type:application/json -d
"content":"中韩渔警冲突调查:韩警平均每天扣1艘中国渔船"

curl -XPOST http://localhost:9200/xinwen/create/4 -H Content-Type:application/json -d
"content":"中国驻洛杉矶领事馆遭亚裔男子枪击 嫌犯已自首"

直接将curl命令复制到kibana的Dev tools里执行比较方便

2.2.查看es-head是否能查到数据

已经可以查到数据

2.3.查询包含中国这个词并显示高亮

查询一下包含中国这两个汉字并显示高亮,在没有使用中文分词器之前,es只是按字去搜索,也就是我们查询中国这个词,只要数据中包含"中"和"国"这两个字任意一个都会被显示出来

curl -XPOST http://localhost:9200/xinwen/_search  -H Content-Type:application/json -d

    "query" :  "match" :  "content" : "中国" ,
    "highlight" : 
        "pre_tags" : ["<tag1>", "<tag2>"],              #前--高亮
        "post_tags" : ["</tag1>", "</tag2>"],                   #后---高亮,前后高亮是指只把关键字高亮
        "fields" : 
            "content" : 
        
    

根据输出的结果可以明显的看出,不使用中文分词器之前,只是按某一个字去搜索,而不是按词去搜索,哪个数据出现我们要搜索的词位置最靠前就优先显示

3.使用中文分词器之后查询中文高亮词显示效果

本次验证一下使用了中文分词器之后的明显变化

注意:使索引支持中文分词器的时,要先把索引创建出来,然后在创建索引映射,最后在插入数据,否则索引映射会创建失败

3.1.创建xinwen2索引

curl -XPUT http://localhost:9200/index

使用kibana的Dev tools非常方便,创建一个索引直接就是PUT /索引名

3.2.创建xinwen2索引映射

这一步主要是在索引中增加中文分词器

ik_max_word 和 ik_smart 什么区别?

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

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

一般还使用ik_max_word这个比较多,毕竟词多就是强

curl -XPOST http://localhost:9200/xinwen2/fulltext/_mapping -H Content-Type:application/json -d

        "properties": 
            "content": 
                "type": "text",
                "analyzer": "ik_max_word",
                "search_analyzer": "ik_max_word"
            
        

3.3.在xinwen2中插入中文数据

curl -XPOST http://localhost:9200/xinwen2/fulltext/1 -H Content-Type:application/json -d
"content":"美国留给伊拉克的是个烂摊子吗"

curl -XPOST http://localhost:9200/xinwen2/fulltext/2 -H Content-Type:application/json -d
"content":"公安部:各地校车将享最高路权"

curl -XPOST http://localhost:9200/xinwen2/fulltext/3 -H Content-Type:application/json -d
"content":"中韩渔警冲突调查:韩警平均每天扣1艘中国渔船"

curl -XPOST http://localhost:9200/xinwen2/fulltext/4 -H Content-Type:application/json -d
"content":"中国驻洛杉矶领事馆遭亚裔男子枪击 嫌犯已自首"

3.4.在es-head上查看所有是否已经支持中文分词器

点击索引---信息---索引信息

3.5.查询包含中国这个词并显示高亮

curl -XPOST http://localhost:9200/xinwen2/_search  -H Content-Type:application/json -d

    "query" :  "match" :  "content" : "中国" ,
    "highlight" : 
        "pre_tags" : ["<tag1>", "<tag2>"],              
        "post_tags" : ["</tag1>", "</tag2>"],               
        "fields" : 
            "content" : 
        
    

执行完可以看到这次已经是以词进行搜索了,上次没有使用分词器之前查询是按字搜索的,使用了分词器之后就是按词进行搜索

4.使用中文分词器前后对比结论

没有使用中文分词器之前搜索"中国"这个词,搜索出来的结果就是只要包含中、国任意一个字都会被搜索出来,显然不是我们想要的需求,并且数据展示杂乱

使用了中文分词器之后,他会把我们搜索的中国当成一个词,只有数据中包含中国这个词才会被显示

elasticsearch安装中文分词器(代码片段)

发车   为什么要在elasticsearch中要使用ik这样的中文分词呢,那是因为es提供的分词是英文分词,对于中文的分词就做的非常不好了,因此我们需要一个中文分词器来用于搜索和使用。今天我们就尝试安装下IK分词。上... 查看详情

elasticsearch安装elasticsearch-analysis-ik中文分词器(代码片段)

1,讲分词器的文件夹放入es安装包的plugins,重新启动elasticsearch//查询es运行中的进程pidps-aux|grepelasticsearch//杀死进程kill-9pid//使用es账户启动nohup./elasticsearch&2,重启es,然后在新建index的type表结构时,需要指定将来可能要使用... 查看详情

elasticsearch安装elasticsearch-analysis-ik中文分词器(代码片段)

1,讲分词器的文件夹放入es安装包的plugins,重新启动elasticsearch//查询es运行中的进程pidps-aux|grepelasticsearch//杀死进程kill-9pid//使用es账户启动nohup./elasticsearch&2,重启es,然后在新建index的type表结构时,需要指定将来可能要使用... 查看详情

elasticsearch实战(二十六)-ik中文分词器(代码片段)

        为什么要在elasticsearch中要使用ik这样的中文分词?因为ES提供的分词是英文分词,对于中文的分词就做的非常不好了,因此我们需要一个中文分词器来用于搜索和使用。一、安装        我们可以从 官... 查看详情

elasticsearch——手写一个elasticsearch分词器(附源码)(代码片段)

1.分词器插件ElasticSearch提供了对文本内容进行分词的插件系统,对于不同的语言的文字分词器,规则一般是不一样的,而ElasticSearch提供的插件机制可以很好的集成各语种的分词器。Elasticsearch本身并不支持中文分词... 查看详情

elasticsearch搜索引擎安装配置中文分词器ik插件(代码片段)

一、IK简介ElasticSearch(以下简称ES)默认的分词器是标准分词器Standard,如果直接使用在处理中文内容的搜索时,中文词语被分成了一个一个的汉字,因此引入中文分词器IK就能解决这个问题,同时用户可以配置自己的扩展字典、... 查看详情

elasticsearch中文分词(代码片段)

...hobby","text":"听音乐"     中文分词:  IK分词器Elasticsearch插件地址:https://github.com/medcl/elasticsearch-analysis-ik  安装方法:将下载到的elasticsearch-analysis-ik-6.5.4.zip解压到elasticsearch/plugins/ik目录下即可。    unzipelastics... 查看详情

八十一elasticsearch详解(中)(代码片段)

    上一篇文章我们着重从ElasticSearch的操作工具、存储方式以及检索等方面触发介绍了一下ElasticSearch的使用,本文我们从搜索原理入手继续看一下ElasticSearch是如何使用的。关注专栏《破茧成蝶——大数据篇》,查看更... 查看详情

elasticsearch之ik分词器详解(代码片段)

IK分词器本文分为简介、安装、使用三个角度进行讲解。简介倒排索引众所周知,ES是一个及其强大的搜索引擎,那么它为什么搜索效率极高呢,当然和他的存储方式脱离不了关系,ES采取的是倒排索引,就是... 查看详情

elk----elasticsearch使用ik中文分词器(代码片段)

...的是IK分词器。注意,下载分词器的时候,版本必须要与Elasticsearch安装的版本一致,否则会出现不可描述的错误。下载地址: https://github.com/medcl/elasticsearch-analysis-ik/releases注意: es-ik分词插件版本一定要和es安装的版本对应... 查看详情

docker安装elasticsearch的中文分词器ik(代码片段)

主要问题一定要保证ElasticSearch和ElasticSearch插件的版本一致我是用的是ElasticSearch是5.6.11版本对应elasticsearch-analysis-ik-5.6.11安装插件在线安装进入容器dockerexec-itelasticsearch/bin/bash在线下载并安装./bin/elasticsearch-plugininstallhttps://github.co... 查看详情

elasticsearch入门第二篇:elasticsearch安装与使用ik中文分词器(代码片段)

1、简介IKAnalyzer是一个开源的,基于Java语言开发的轻量级的中文分词工具包。从2006年12月推出1.0版开始,IKAnalyzer已经推出了3个大版本。最初,它是以开源项目Luence为应用主体的,结合词典分词和文法分析算法的... 查看详情

elasticsearch入门第二篇:elasticsearch安装与使用ik中文分词器(代码片段)

1、简介IKAnalyzer是一个开源的,基于Java语言开发的轻量级的中文分词工具包。从2006年12月推出1.0版开始,IKAnalyzer已经推出了3个大版本。最初,它是以开源项目Luence为应用主体的,结合词典分词和文法分析算法的... 查看详情

elasticsearch入门第二篇:elasticsearch安装与使用ik中文分词器(代码片段)

1、简介IKAnalyzer是一个开源的,基于Java语言开发的轻量级的中文分词工具包。从2006年12月推出1.0版开始,IKAnalyzer已经推出了3个大版本。最初,它是以开源项目Luence为应用主体的,结合词典分词和文法分析算法的... 查看详情

elasticsearch7.8.0版本进阶——ik中文分词器(代码片段)

...IK中文分词器下载地址下载地址:https://github.com/medcl/elasticsearch-analysis-ik/releases/tag/v7.8.02.2、ES引入IK中文分词器将IK中文分词器安装包解压,然后把解压后的文件夹放入ES根目录下的plugins目录下,重启ES即可使用。注意&... 查看详情

elasticsearch-ik分词器;文档得分机制(代码片段)

阅读本文前可先参考Elasticsearch-Kibana(四)_MinggeQingchun的博客-CSDN博客https://blog.csdn.net/MinggeQingchun/article/details/126768243一、IK分词器中文分词ES的默认分词器无法识别中文中测试、单词这样的词汇,而是简单的将每个字... 查看详情

elasticsearch入门第二篇:elasticsearch安装与使用ik中文分词器(代码片段)

...IK中文分词器下载IK中文分词器:https://github.com/medcl/elasticsearch-analysis-ik/releases注意:选择的IK分词器版本一定要与你的Elasticsearch版本一致,否则就无法启动Elasticsearch服务。例如,本人的Elasticsearch版本为:8.4.1&... 查看详情

elasticsearch7.x中文分词器ik使用,及词库的动态扩展(代码片段)

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