看官方提供的例子:

1.

PUT my_index
{  "mappings": {  "my_type": {  "properties": {  "full_text": {  "type":  "string"    },  "exact_value": {  "type":  "string",  "index": "not_analyzed"    }  }  }  }
}  

首先设置索引名称为my_index,类型为my_type的映射,设置该索引的full_text字段类型为String,exact_value字段类型为String, "index": "not_analyzed"表示该字段不分词。

2. 添加一条数据:

PUT my_index/my_type/1
{  "full_text":   "Quick Foxes!",    "exact_value": "Quick Foxes!"
}

索引名为my_index,类型为my_type,id为1。full_text字段的值为Quick Foxes!,exact_value字段的值为Quick Foxes!。

注:

string字段可以分词,也可以不分词。分词的时候,默认的标准分析器可以将一句话中的单词划分开,然后转为小写,比如Quick Brown Fox!,标准分析器将会将它转换为quick , brown , fox。

由于full_text字段分词,因此在倒排索引中被默认标准分析器分为quick , foxes。

exact_value字段不分词,在倒排索引中该字段的值仍为QuickFoxes!。

3. 执行查询:

3.1 使用term查询exact_value,搜索内容为Quick Foxes!:

GET my_index/my_type/_search
{  "query": {  "term": {  "exact_value": "Quick Foxes!"    }  }
}  

由于exact_value不分词,Quick Foxes!与exact_value的值QuickFoxes!匹配,因此可以匹配。

3.2 使用term查询full_text,搜索内容为Quick Foxes!:

GET my_index/my_type/_search
{  "query": {  "term": {  "full_text": "Quick Foxes!"    }  }
}  

由于full_text字段默认使用标准分析器分词,在倒排索引中被分为quick和foxes,因此使用Quick Foxes!匹配不到内容。

3.3 使用term查询full_text,搜索内容为foxes:

GET my_index/my_type/_search
{  "query": {  "term": {  "full_text": "foxes"    }  }
}  

由于full_text字段默认使用标准分析器分词,在倒排索引中被分为quick和foxes,因此使用foxes可以匹配到。

3.4 使用match查询full_text,查询内容为Quick Foxes!:

GET my_index/my_type/_search
{  "query": {  "match": {  "full_text": "Quick Foxes!"    }  }
}  

使用match搜索,先分析搜索字符串Quick Foxes!,对它分词,然后搜索full_text中含有quick或者foxes或者两者都包含的文档,由于full_text字在倒排索引中被分为quick和foxes,因此可以匹配到。

总结:

match query搜索的时候,首先会解析查询字符串,进行分词,然后查询,而term query,输入的查询内容是什么,就会按照什么去查询,并不会解析查询内容,对它分词。

ES termQuery和matchQuery区别浅析相关推荐

  1. ElasticSearch之TermQuery和MatchQuery

    ElasticSearch之TermQuery和MatchQuery 一.TermQuery 1.验证Term查询 2.Term特殊用法 3.跳过算分 二.MatchQuery 1.验证Match查询 ...

  2. ashx PHP文件 优劣,.NET_后缀为 ashx 与 axd 的文件区别浅析,唯一不同的地方是:axd扩展名 - phpStudy...

    后缀为 ashx 与 axd 的文件区别浅析 唯一不同的地方是:axd扩展名的必须要在web.config中的中进行注册,而ashx直接在项目中当成aspx那样添加使用即可. 所以在项目的添加文件中, ...

  3. 位置式PID与增量式PID区别浅析(百度百科增量式PID讲解思路概念更明确清晰)

    位置式PID与增量式PID区别浅析 Z小旋 2019-04-26 08:55:12  59882  收藏 713 分类专栏: NXP智能车学习 文章标签: 位置式PID PID 增量式PID 版权 1 ...

  4. ES, MongoDB, HBase的区别和使用场景

    原文网址:ES, MongoDB, HBase的区别和使用场景_IT利刃出鞘的博客-CSDN博客 简介 说明 本文介绍技术选型:ES, MongoDB, HBase的区别和使用场景. 简要对比 支持情 ...

  5. ARM系列之ARM 平台安全架构PSA和Trustzone区别 浅析

    ARM系列之ARM 平台安全架构PSA和Trustzone区别 浅析 PSA要求是什么? C1.1 硬件级别的隔离环境 C1.2 安全启动 C1.3 生命周期管理 C1.4 密钥管理 差异总结 熟悉A ...

  6. android add fragment,fragment中的add和replace方法的区别浅析

    使用 FragmentTransaction 的时候,它提供了这样两个方法,一个 add , 一个 replace ,对这两个方法的区别一直有点疑惑. 我觉得使用 add 的话,在按返回键应该是回退到 ...

  7. ajax 与route的区别,浅析vue-router jquery和params传参(接收参数)$router $route的区别

    今天做项目时踩到了vue-router传参的坑(jquery和params),所以决定总结一下二者的区别. 1.jquery方式传参和接收参数 传参: this.$router.push({ path ...

  8. ES与Solr的区别

    背景:它们都是基于Lucene搜索服务器基础之上开发,一款优秀的,高性能的企业级搜索服务器.[是因为他们都是基于分词技术构建的倒排索引的方式进行查询] 开发语言:Java语言开发 诞生时间:Solr ...

  9. ES和JS的区别,以及JavaScript的基本组成

    JavaScript是语言,而ECMAScript(即ECMA-262,ECMA是欧洲计算机制造商协会)是为了规范JS而制定的标准,ECMAScript有不同版本,最近的版本是第10版,发布于2019 ...

最新文章

  1. Python 官方报告:哪些库最受欢迎、PyCharm 比 VScode更香?
  2. php 中文 过长 省略号,css实现文字过长显示省略号
  3. RibbonControl中的主题设计
  4. Lintcode9 Fizz Buzz solution 题解
  5. TCP为什么是三次握手和四次挥手
  6. python解释器的提示符是shell嘛_python解释器怎么运行
  7. tcp下载窗口太小的问题_面试官:换人!他连 TCP 这几个参数都不懂(二)
  8. extjs 学习自我理解
  9. Java 多线程思维导图
  10. Excel 入门到精通笔记
  11. MATLAB中clc命令详解
  12. CHM格式 打开后不显示内容的解决办法
  13. 20201203 aaaaabbbbbccccc
  14. ecshop linux 大小写,ecshop敏感词管理
  15. 苹果手表计算机功能键,Apple Watch上的2个按键是这么玩的
  16. 替换固态硬盘后不能开机
  17. html 中圆角怎么写,html中的圆角
  18. 使用mprotect定位踩内存故障
  19. 元宇宙的前景及四大赛道
  20. 没有什么技术是永恒的,2020 年 VMware 第一个开始裁员了!

热门文章

  1. 厉害了!厦门大学“嘉庚一号”火箭成功发射 问鼎九天
  2. 深入浅出Shell编程: Shell 变量【ZT】
  3. 面试了上百位性能测试后,我发现了一个令人不安的事实
  4. java设计模式之行为型设计模式
  5. HTML meta 标签 遇到meta http-equiv=refresh content=0; url=详解
  6. 3加密狗计算pin码_6 个芯片打造复古经典计算机:215 色显示,能编程能玩小游戏...
  7. Linux驱动概念扫盲篇
  8. vue修改config后怎么生效_梦幻西游 金银锦盒修改后资金怎么攥 可以考虑跑商
  9. mysql intt默认值_MySQL如何处理隐式默认值
  10. html给页面整体添加左右边距_HTML嵌入页面的几种方法