分词器、字符串类型、倒排索引

在说term和match之前,需要先了解一下这三个概念

分词器

es默认的分词器是standard analyzer,该分词器的特点是:将所有英文字符串的大写字母转换成小写字母,然后按照空格对英文字符串进行分词,如果遇到汉字,则将汉字一个字作为一个分词。可以看出,该分词器对于中文句子的分词效果来说并不好,无法以合适的中文词组来分词。
为了提高中文的分词效果,可以增加ik分词器插件,该插件提供了两种好用的分词策略:最少切分ik_smart analyzer和最细粒度切分ik_max_word analyzer,前者的每个分词都没有重复切分的字,后者则可以有重复切分,后者的分词集合通常来说会比前者大。
keyword analyzer是专门为keyword类型的字符串准备的分词器,该分词器的特点是:不会对字符串进行切分,即分词集合只包含一个字符串。

字符串类型

es比较常用的字符串类型是textkeyword,默认是text。
text可以被分词器分词(默认使用分词器standard analyzer,也可以指定别的分词器),keyword不可以被分词(使用了分词器keyword analyzer)

倒排索引

当向es中添加一个文档时,文档中可被分词的字段(除了keyword类型之外的字段)会被分词器(默认使用分词器standard analyzer,也可以指定别的分词器)进行分词,形成一个分词集合存储在倒排索引中。也就是说,对于可分词的字段,es中存储的并不是一串完整的字符串,而是该字符串的一个一个的分词。

精确匹配term

term的查询参数不会被分词器分词,es会将完整的查询参数与倒排索引中对应字段的分词集合进行对比查询。
term查询中文句子的效果比较差,不建议在这种场景下使用term

模糊匹配match

match的查询参数(keyword类型除外)会被分词器分词,使用的分词器是所查询字段在mappings中指定的分词器,默认为standard analyzer。查询参数被分词后产生的分词集合与倒排索引中相应字段的分词集合进行对比查找,只要有一个分词匹配成功,该文档就会被纳入检索结果返回。

es查询的基本流程

1.mappings指定字段类型和分词器
2.新增文档
3.es对新增文档中的字段(keyword类型的字段除外)使用mappings中相应字段指定的分词器(默认为standard analyzer)来进行分词,将分词结果存入倒排索引中;keyword类型的字段直接存储整个字段内容
4.搜索文档
5.搜索参数字段类型是否为keyword
6.是,则不管term还是match搜索,搜索参数都不会被分词,搜索参数字段整个内容形成只包含一个内容的分词集合
7.否,则当使用term搜索时,搜索参数不会被分词;当使用match搜索时,搜索参数会被mappings中相应字段指定的分词器(默认为standard analyzer)分词,形成分词集合
8.将搜索的分词集合与es中相应字段的倒排索引进行匹配搜索,es每一个文档中只要有一个分词与分词集合的任一分词匹配,则将此文档放入搜索结果中返回

term和match的区别

两者最大的区别就是:当搜索参数为text类型的字段时,有没有对搜索参数进行分词操作!term没有,而match有。

例子

创建一个索引testes并构建mappings,定义三个字段:title(类型:text,分词器:standard analyzer),content(类型:text,分词器:ik_max_word analyzer),desc(类型:keyword)

新增两个文档

对title进行分词

第一个文档

结果

第二个文档

结果

对content进行分词

第一个文档

结果

第二个文档

结果

term搜索

title搜索“今天”

结果

title搜索“吃”

结果

content搜索“面条”

结果

content搜索“吃”

结果

desc搜索“好吃”

结果

desc搜索“面很好吃”

结果

match搜索

title搜索“明天”

对“明天”进行分词

“明天”分词结果

搜索

结果

content搜索“吃”

结果

content搜索“牛肉”

对“牛肉”进行分词

“牛肉”分词结果

搜索

结果


desc搜索“好吃”

结果

desc搜索“肉最好吃了”

结果

参考博客
Elasticsearch 入门教程 – term 查询和match 查询(text和keyword)
Elasticsearch教程(28) text和keyword区别 term和match区别 ik中文分词器使用

elasticsearch中term与match相关推荐

  1. Elasticsearch中的Multi Match Query

    在Elasticsearch全文检索中,我们用的比较多的就是Multi Match Query,其支持对多个字段进行匹配.Elasticsearch支持5种类型的Multi Match,我们一起来深入 ...

  2. Elasticsearch中term和terms

    一.term 1.term查询 term查询是完全匹配 term查询不会再进行分词,而是直接去分词库进行完全匹配查询: 2.用法 user_log表中查询name GET /user_log/_map ...

  3. Elasticsearch学习---Term query和Match query

    前言 在Elasticsearch中Term query和Match query都可以用来对文档中的数据进行检索,但是在检索结果上会稍有不同,本文通过案例对两者的差异进行说明. 数据准备 建立一个索引 ...

  4. Elasticsearch中的Term查询和全文查询

    Elasticsearch中的Term查询和全文查询 前言 Term 查询 exists 查询 fuzzy 查询 ids 查询 prefix 查询 range 查询 regexp 查询 term 查询 ...

  5. 【Elasticsearch教程18】Mapping字段类型之text 以及term、match和analyzer

    Elasticsearch Mapping字段类型之text 以及term.match和analyzer 一.text场景 二.`term`查询 三.`match`查询 1. `亚瑟王`如何存储? 2 ...

  6. Elasticsearch教程(28) text和keyword区别 term和match区别 ik中文分词器使用

    text和keyword区别 term和match区别 ik中文分词器使用 一.前言 二.之前相关的博客 三.造点测试数据 1. 创建一个index 2. 插入测试数据 四.做一份试卷 第1题:tit ...

  7. 在Elasticsearch中查询Term Vectors词条向量信息

    这篇文章有点深度,可能需要一些Lucene或者全文检索的背景.由于我也很久没有看过Lucene了,有些地方理解的不对还请多多指正. 更多内容还请参考整理的ELK教程 关于Term Vectors 额, ...

  8. 【Elasticsearch】在Elasticsearch中查询Term Vectors词条向量信息

    1.概述 转载:https://www.cnblogs.com/xing901022/p/5348737.html 关于Term Vectors 额,对于这个专业词汇,暂且就叫做词条向量吧,因为实在想 ...

  9. ES中term、terms、match的区别

    ES中term.terms.match的区别 term query会去倒排索引中寻找确切的term,它并不知道分词器的存在,这种查询适合keyword.numeric.date等明确值的 term:查 ...

最新文章

  1. 【iOS与EV3混合机器人编程一系列五个】iOS_WiFi_EV3_Library 解剖连接EV3
  2. python制作动图-用Python制作迷宫GIF
  3. 解决Mac app store更新时[newNUllResponse]的问题
  4. atitit.词法分析的实现token attilax总结
  5. 解答网友提问 | 使用VS2022快速生成React/Angular/Vue.js + Web API前后端集成项目
  6. mysql约束_不是吧,阿Sir,MySQL约束你竟然还不懂!
  7. android从一点展开动画,Android自定义View——从零开始实现可展开收起的水平菜单栏...
  8. 著名Youtuber “NELK “发布有关比特币购买游艇的视频
  9. 斯坦福大学面向Tensorflow深度学习研究课程(2018)
  10. 【.Net Framework 体积大?】不安装.net framework 也能运行!?原理补充-3
  11. Echarts3里的地图标记点事件效果实现
  12. 四、非平稳序列的确定性分析
  13. 浏览器首页被360恶意篡改,解决方法
  14. Android 自定义实现倒三角图片
  15. 模式识别技术是人工智能的基础技术,模式识别技术的发展潜力
  16. 云信api_网易数帆开源贡献获业界肯定,轻舟API网关获OSCAR尖峰开源技术创新奖...
  17. 关于解决显卡自己卸载后,无法安装新显卡驱动的解决办法(亲测)
  18. java12安装教程(win10)
  19. 【学习求职必备】认真认识一下世界末日那年成立的“华为诺亚方舟实验室”...
  20. 科普 | 继Wi-Fi 6之后的Wi-Fi 6E

热门文章

  1. 【NOIP2013提高组】积木大赛
  2. GameFramework框架详解之 DataTable配置表模块
  3. Excel — 动态图表(函数实现动态图)
  4. plt.figure()参数使用详解及运行演示
  5. 怎么将几张图片合成gif格式
  6. 职称计算机ppt2003窍门,(2013职称计算机职称考试PPT2003试题及操作步骤.doc
  7. 自动化编辑器 插件开发
  8. 游戏本电脑性价比排行2020榜单黑马游戏测评分享
  9. RHEL / CentOS 配置epel源
  10. 【超详细】Java各种类型所占用的内存空间究竟多大?