目录

  • ik_max_word和 ik_smart介绍
  • 最佳实践

ik_max_word和 ik_smart介绍

学习过Solr或Elasticsearch的同学都知道IK分词器,它是一个针对中文的分词器。
IK分词器地址:https://github.com/medcl/elasticsearch-analysis-ik
IK分词器有两种分词模式:ik_max_word和ik_smart模式。

1、ik_max_word

会将文本做最细粒度的拆分,比如会将“中华人民共和国人民大会堂”拆分为“中华人民共和国、中华人民、中华、华人、人民共和国、人民、共和国、大会堂、大会、会堂等词语。

2、ik_smart
会做最粗粒度的拆分,比如会将“中华人民共和国人民大会堂”拆分为中华人民共和国、人民大会堂。

测试两种分词模式的效果:

发送:post localhost:9200/_analyze
测试ik_max_word
{“text”:“中华人民共和国人民大会堂”,“analyzer”:“ik_max_word” }
测试ik_smart
{“text”:“中华人民共和国人民大会堂”,“analyzer”:“ik_smart” }

最佳实践

两种分词器使用的最佳实践是:索引时用ik_max_word,在搜索时用ik_smart。
即:索引时最大化的将文章内容分词,搜索时更精确的搜索到想要的结果。

举个例子:
我是个用户,输入“华为手机”,我此时的想法是想搜索出“华为手机”的商品,而不是华为其它的商品,也就是商品信息中必须只有华为手机这个词。
此时使用ik_smart和ik_max_word都会将华为手机拆分为华为和手机两个词,那些只包括“华为”这个词的信息也被搜索出来了,我的目标是搜索只包含华为手机这个词的信息,这没有满足我的目标。

怎么解决呢?
我们可以将华为手机添加到自定义词库,添加后两个分词器的效果为:

ik_max_word 的分词效果:

{
“tokens”: [
{
“token”: “华为手机”,
“start_offset”: 0,
“end_offset”: 4,
“type”: “CN_WORD”,
“position”: 0
}
,
{
“token”: “华为”,
“start_offset”: 0,
“end_offset”: 2,
“type”: “CN_WORD”,
“position”: 1
}
,
{
“token”: “手机”,
“start_offset”: 2,
“end_offset”: 4,
“type”: “CN_WORD”,
“position”: 2
}
]
}

ik_smart的分词效果:

{
“tokens”: [
{
“token”: “华为手机”,
“start_offset”: 0,
“end_offset”: 4,
“type”: “CN_WORD”,
“position”: 0
}
]
}

看到两个分词器的区别了吧,因为华为手机是一个词,所以ik_smart不再细粒度分了。
此时,我们可以在索引时使用 ik_max_word,在搜索时用ik_smart。

当输入 华为手机 关键字,只搜索到 包含华为手机的信息,符合用户要求。
如果我想将包含华为 这个词的信息也搜索出来怎么办呢?
那就输入 “华为 华为手机”(注意华为后边有个空格),那就会将包含华为、华为手机的信息都搜索出来。

根据上边举的例子,可以思考下,我想搜索手机壳怎么办?用户肯定只想搜索出手机壳的信息,不想搜索出来一推手机。

根据上边举的例子,可以思考下,如果搜索时用ik_max_word会有什么结果。
跟传智燕青一起学Elasticsearch课程视频分享:https://blog.csdn.net/weixin_44062339/article/details/99052909

Elasticsearch中ik_max_word和 ik_smart的区别相关推荐

  1. 关于全文搜索elasticsearch中matchQuery和termQuery的区别

    如题,本文主要讲关于全文搜索elasticsearch中matchQuery和termQuery的区别,附带一点其它查询用法. 准备工作,下载相关jar包,本文所有jar包列表: apache-log ...

  2. ElasticSearch中keyword和text类型区别和模糊查询

    参考文章: https://blog.csdn.net/sfh2018/article/details/118083634 https://blog.csdn.net/w1014074794/arti ...

  3. ElasticSearch中must和filter的区别

    上图是项目中所使用的ES Java-high-level-client,问题来了,must和filter究竟有什么区别?哪些地方用must?哪些地方用filter? 在官网中的说明其实很明显 matc ...

  4. ElasticSearch中Transient与Persistent的区别

    注: 部分概念介绍来源于网络 transient 临时:这些设置在集群重启之前一直会生效.一旦整个集群重启,这些设置就会被清除. persistent 永久:这些设置永久保存,除非再次被手动修改.是将 ...

  5. elasticsearch中term与match

    分词器.字符串类型.倒排索引 在说term和match之前,需要先了解一下这三个概念 分词器 es默认的分词器是standard analyzer,该分词器的特点是:将所有英文字符串的大写字母转换成小 ...

  6. Elasticsearch中安装IK分词器

    Elasticsearch中默认的分词器对中文的支持不好,会分隔成一个一个的汉字.而IK分词器对中文的支持比较好一些,主要有两种模式"ik_smart"和"ik_max_ ...

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

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

  8. ElasticSearch中全文搜索(单词搜索、多次搜索、组合搜索和权重搜索)

    全文搜索两个最重要的方面是: 相关性(Relevance) 它是评价查询与其结果间的相关程度,并根据这种相关程度对结果排名的一种能力,这种计算方式可以是 TF/IDF 方法.地理位置邻近.模糊相似,或 ...

  9. 【Elasticsearch】Elasticsearch 中增加分片数量,聚合一定会变快吗?

    1.概述 转载:Elasticsearch 中增加分片数量,聚合一定会变快吗? 在一次聚合测过程中,我们希望通过增加分片数量的方式,让聚合计算过程更快完成.因此准备了一个索引,该索引有2.6亿 条 d ...

最新文章

  1. socketserver模块解析
  2. android edittext不可复制_Android EditText禁止复制粘贴
  3. 快速谱峭度matlab,一种基于快速谱峭度分析的泵潜在空化故障检测方法与流程
  4. linux history操作的路径,绝对路径和相对路径,目录命令(cd,mkdir,rm,history)
  5. 内核中断处理流程_处理中断
  6. 常用HDFS java API
  7. windows中的计划任务(タスクスケジュール)不登陆也可以执行 设定方式
  8. 权威指南之脚本化jquery
  9. oracle数据库服务器c盘满,Oracle数据库服务器磁盘满导致数据库无法登陆,通过清理归档文件解决...
  10. nagios搭建和邮件短信报警设置
  11. SQL中Case的使用方法(上篇)
  12. C语言工程实践--物业费管理系统
  13. 【大数据面试题】Flink第一弹60连发
  14. 棋牌搭建,APP新手搭建教程
  15. 破解iOS微信骰子和猜拳
  16. Google野心勃勃,微软前程堪忧!(转)
  17. C# 从零开始写 SharpDx 应用 初始化dx修改颜色
  18. 基于对话框的MFC程序加载位图为背景图案
  19. 【Multisim仿真】运放电路:反相比例运算电路
  20. 已解决NameError: name ‘XXX‘ is not defined

热门文章

  1. 处理点云数据(二):点云与生成前视图
  2. [Html]JS实现看不到源代码
  3. “泰迪杯”挑战赛 -利用收视记录定义用户画像(基于爬虫数据分析)
  4. vue实现mp4视频截图
  5. 英雄联盟 python 刷等级_使用python3.7.2 实现大名鼎鼎的Elo Score等级分制度
  6. python多线程并发请求
  7. 学计算机加强技能短文,干货:语文阅读和作文最该提升的7大技能
  8. 记一次RedHat中文乱码,中文语言包安装实践
  9. 【行研报告】数据收集与同意调查报告2020(英文).PDF——附下载
  10. 工业主板定制选型的要点都有哪些呢?