ES[7.6.x]学习笔记(七)IK中文分词器
在上一节中,我们给大家介绍了ES的分析器,我相信大家对ES的全文搜索已经有了深刻的印象。分析器包含3个部分:字符过滤器、分词器、分词过滤器。在上一节的例子,大家发现了,都是英文的例子,是吧?因为ES是外国人写的嘛,中国如果要在这方面赶上来,还是需要屏幕前的小伙伴们的~
英文呢,我们可以按照空格将一句话、一篇文章进行分词,然后对分词进行过滤,最后留下有意义的词。但是中文怎么分呢?中文的一句话是没有空格的,这就要有一个强大的中文词库,当你的内容中出现这个词时,就会将这个词提炼出来。这里大家也不用重复造轮子,经过前辈的努力,这个中文的分词器已经有了,它就是今天要给大家介绍的IK中文分词器。
IK中文分词器的安装
ES默认是没有IK中文分词器的,我们要将IK中文分词器作为一个插件安装到ES中,安装的步骤也很简单:
- 从GitHub上下载适合自己ES版本的IK中文分词器,地址如下:
https://github.com/medcl/elasticsearch-analysis-ik/releases
。 -
在我们的ES的插件目录中(
${ES_HOME}/plugins
)创建ik
目录,mkdir ik
- 将我们下载好的IK分词器解压到
ik
目录,这里我们安装unzip
命令,进行解压。 - 重启我们所有的ES服务。
到这里,我们的IK中文分词器就安装完了。
IK中文分词器初探
在上一节我们访问了ES的分析器接口,指定了分析器和文本的内容,我们就可以看到分词的结果。那么既然我们已经安装了Ik中文分词器,当然要看一下效果了。在看效果之前,我们先要说一下,IK中文分词器插件给我们提供了两个分析器。
- ik_max_word: 会将文本做最细粒度的拆分
- ik_smart:会做最粗粒度的拆分
我们先看看ik_max_word
的分析效果吧,
POST _analyze { "analyzer": "ik_max_word", "text": "中华人民共和国国歌" }
我们指定分词器为ik_max_word
,文本内容为中华人民共和国国歌
。我们看一下分词的结果:
{ "tokens": [ { "token": "中华人民共和国", "start_offset": 0, "end_offset": 7, "type": "CN_WORD", "position": 0 }, { "token": "中华人民", "start_offset": 0, "end_offset": 4, "type": "CN_WORD", "position": 1 }, { "token": "中华", "start_offset": 0, "end_offset": 2, "type": "CN_WORD", "position": 2 }, { "token": "华人", "start_offset": 1, "end_offset": 3, "type": "CN_WORD", "position": 3 }, { "token": "人民共和国", "start_offset": 2, "end_offset": 7, "type": "CN_WORD", "position": 4 }, { "token": "人民", "start_offset": 2, "end_offset": 4, "type": "CN_WORD", "position": 5 }, { "token": "共和国", "start_offset": 4, "end_offset": 7, "type": "CN_WORD", "position": 6 }, { "token": "共和", "start_offset": 4, "end_offset": 6, "type": "CN_WORD", "position": 7 }, { "token": "国", "start_offset": 6, "end_offset": 7, "type": "CN_CHAR", "position": 8 }, { "token": "国歌", "start_offset": 7, "end_offset": 9, "type": "CN_WORD", "position": 9 } ] }
我们可以看到,分词分的非常细,我们在使用上面的这些进行搜索时,都可以搜索到中华人民共和国国歌
这个文本。我们再看一下另外一个分析器ik_smart
,
POST _analyze { "analyzer": "ik_smart", "text": "中华人民共和国国歌" }
我们的文本内容同样是中华人民共和国国歌
,看一下分词的效果,
{ "tokens": [ { "token": "中华人民共和国", "start_offset": 0, "end_offset": 7, "type": "CN_WORD", "position": 0 }, { "token": "国歌", "start_offset": 7, "end_offset": 9, "type": "CN_WORD", "position": 1 } ] }
同样的文本,使用ik_smart
进行分词时,只分成了两个词,和ik_max_word
分词器比少了很多。这就是两个分词器的区别,不过这两个分析器都是可以对中文进行分词的。
创建索引时指定IK分词器
既然我们安装了IK中文分词器的插件,那么我们在创建索引时就可以为text
类型的字段指定IK中文分词器了。来看看下面的例子,
PUT ik_index { "mappings": { "properties": { "id": { "type": "long" }, "title": { "type": "text", "analyzer": "ik_max_word" } } } }
我们创建了索引ik_index
,并且为字段title
指定了分词器ik_max_word
。我们执行一下,创建成功。然后我们再通过GET
请求看一下这个索引的映射情况。
GET ik_index/_mapping
返回的结果如下:
{ "ik_index": { "mappings": { "properties": { "id": { "type": "long" }, "title": { "type": "text", "analyzer": "ik_max_word" } } } } }
我们可以看到title
字段的分析器是ik_max_word
。
为索引指定默认IK分词器
在上一节中,我们已经给大家介绍了为索引指定默认分词器的方法,这里我们直接把分词器改为IK分词器就可以了,如下:
PUT ik_index { "settings": { "analysis": { "analyzer": { "default": { "type": "ik_max_word" } } } } }
这样我们在索引中就不用创建每一个字段,可以通过动态字段映射,将String
类型的字段映射为text
类型,同时分词器指定为ik_max_word
。我们试一下,向ik_index
索引中添加一条记录。
POST ik_index/_doc/1 { "id": 1, "title": "大兴庞各庄的西瓜", "desc": "大兴庞各庄的西瓜真是好吃,脆沙瓤,甜掉牙" }
执行成功。我们再执行搜索试一下,如下:
POST ik_index/_search { "query": { "match": { "title": "西瓜" } } }
我们搜索title
字段匹配西瓜
,执行结果如下:
{ "took": 2, "timed_out": false, "_shards": { "total": 1, "successful": 1, "skipped": 0, "failed": 0 }, "hits": { "total": { "value": 1, "relation": "eq" }, "max_score": 0.2876821, "hits": [ { "_index": "ik_index", "_type": "_doc", "_id": "1", "_score": 0.2876821, "_source": { "id": 1, "title": "大兴庞各庄的西瓜", "desc": "大兴庞各庄的西瓜真是好吃,脆沙瓤,甜掉牙" } } ] } }
我们可以看到刚才插入的那条记录已经搜索出来了,看来我们的IK中文分词器起作用了,而且搜索的结果也符合我们的预期。我们再看看搜索西
一个字的时候,能不能搜索到结果,
POST ik_index/_search { "query": { "match": { "title": "西" } } }
执行结果如下:
{ "took": 4, "timed_out": false, "_shards": { "total": 1, "successful": 1, "skipped": 0, "failed": 0 }, "hits": { "total": { "value": 0, "relation": "eq" }, "max_score": null, "hits": [] } }
并没有搜索出结果,说明在进行分词时,西瓜
是作为一个词出现的,并没有拆分成每一个字,这也是符合我们预期的。
好了~ 这一节的IK中文分词器就给大家介绍到这里了~~
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
阿里云代金券(优惠券)新升级,新增300面额通用代金券,总额2020元
最近,阿里云代金券进行了又一次的升级,新升级之后的代金券增加了一个300元面额的通用代金券,可以说进一步提升了给用户的优惠福利,下面我们看下新升级之后的阿里云代金券具体是怎样的。 阿里云代金券历史简介:阿里云代金券是阿里云给用户的一个长期性优惠福利,代金券的总金额经历了最初的1000元,到后来的2000元,在到后来的代金券+9折优惠码方式,直到最新的总额2020元代金券。 代金券领取地址:阿里云小站最新版的阿里云代金券,统一在阿里云小站领取,云小站是集阿里云产品代金券、OSS产品9折优券、新用户1折、老用户5折以及其他活动入口为一体的综合优惠平台。 升级之后的代金券面额:1.20元云服务器ecs专用代金券,有效期7天,阿里云新用户可领。2.100元云服务器ecs专用代金券,有效期30天,阿里云新老用户可领。3.300元云产品通用代金券,有效期30天,限产品新购使用,阿里云新老用户可领。4.800元云产品通用代金券,有效期30天,限产品新购使用,阿里云新老用户可领。5.300元数据库产品专用代金券,有效期7天,限产品复购使用,阿里云新老用户可领。6.500元数据库产品专用代金券,有效期3...
- 下一篇
【云栖号直播】重磅推荐:start.aliyun.com 负责人陈曦与您畅聊 服务于开发者生态的规划
云栖号在线课堂,及时了解行业动态!阿里云推出疫情专题方案,为企业业务护航,让你足不出户了解行业动态。 在这里可以走近阿里云基础产品,了解更多应用方案,还能遇见大咖分享洞见及故事!也可以通过视频的形式让你高效、生动的了解场景化的上云最佳实践。 重磅推荐 标题:阿里云新品发布会第92期:云服务器ECS内存增强型实例re6全新发布 简介:re6系列实例是阿里云推出的最新一代内存增强型实例,本次的产品介绍,将为您探底re6实例打造如此高性价比产品的背后秘密。 观看直播 标题:EMR弹性低成本离线大数据分析最佳实践—2020飞天大数据平台实战应用第二季 简介:基于飞天大数据平台的E-MapReduce(EMR) 、对象存储OSS、日志服务SLS、抢占式ECS实例构建高弹性、低成本计算与存储分离架构的海量离线大数据分析日志分析系统。 观看直播 标题:【第三期】中国最大 JAVA 用户组 X Spring 官方系列直播 简介:Start.aliyun.com 是基于 Spring-initializr 实现的工程脚手架生成平台;在 Spring 的基础上,实现了对 Spring cloud alib...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS8编译安装MySQL8.0.19
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS8安装Docker,最新的服务器搭配容器使用
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS7,8上快速安装Gitea,搭建Git服务器