ES termQuery和matchQuery区别浅析
看官方提供的例子:
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区别浅析相关推荐
- ElasticSearch之TermQuery和MatchQuery
ElasticSearch之TermQuery和MatchQuery 一.TermQuery 1.验证Term查询 2.Term特殊用法 3.跳过算分 二.MatchQuery 1.验证Match查询 ...
- ashx PHP文件 优劣,.NET_后缀为 ashx 与 axd 的文件区别浅析,唯一不同的地方是:axd扩展名 - phpStudy...
后缀为 ashx 与 axd 的文件区别浅析 唯一不同的地方是:axd扩展名的必须要在web.config中的中进行注册,而ashx直接在项目中当成aspx那样添加使用即可. 所以在项目的添加文件中, ...
- 位置式PID与增量式PID区别浅析(百度百科增量式PID讲解思路概念更明确清晰)
位置式PID与增量式PID区别浅析 Z小旋 2019-04-26 08:55:12 59882 收藏 713 分类专栏: NXP智能车学习 文章标签: 位置式PID PID 增量式PID 版权 1 ...
- ES, MongoDB, HBase的区别和使用场景
原文网址:ES, MongoDB, HBase的区别和使用场景_IT利刃出鞘的博客-CSDN博客 简介 说明 本文介绍技术选型:ES, MongoDB, HBase的区别和使用场景. 简要对比 支持情 ...
- ARM系列之ARM 平台安全架构PSA和Trustzone区别 浅析
ARM系列之ARM 平台安全架构PSA和Trustzone区别 浅析 PSA要求是什么? C1.1 硬件级别的隔离环境 C1.2 安全启动 C1.3 生命周期管理 C1.4 密钥管理 差异总结 熟悉A ...
- android add fragment,fragment中的add和replace方法的区别浅析
使用 FragmentTransaction 的时候,它提供了这样两个方法,一个 add , 一个 replace ,对这两个方法的区别一直有点疑惑. 我觉得使用 add 的话,在按返回键应该是回退到 ...
- ajax 与route的区别,浅析vue-router jquery和params传参(接收参数)$router $route的区别
今天做项目时踩到了vue-router传参的坑(jquery和params),所以决定总结一下二者的区别. 1.jquery方式传参和接收参数 传参: this.$router.push({ path ...
- ES与Solr的区别
背景:它们都是基于Lucene搜索服务器基础之上开发,一款优秀的,高性能的企业级搜索服务器.[是因为他们都是基于分词技术构建的倒排索引的方式进行查询] 开发语言:Java语言开发 诞生时间:Solr ...
- ES和JS的区别,以及JavaScript的基本组成
JavaScript是语言,而ECMAScript(即ECMA-262,ECMA是欧洲计算机制造商协会)是为了规范JS而制定的标准,ECMAScript有不同版本,最近的版本是第10版,发布于2019 ...
最新文章
- Python 官方报告:哪些库最受欢迎、PyCharm 比 VScode更香?
- php 中文 过长 省略号,css实现文字过长显示省略号
- RibbonControl中的主题设计
- Lintcode9 Fizz Buzz solution 题解
- TCP为什么是三次握手和四次挥手
- python解释器的提示符是shell嘛_python解释器怎么运行
- tcp下载窗口太小的问题_面试官:换人!他连 TCP 这几个参数都不懂(二)
- extjs 学习自我理解
- Java 多线程思维导图
- Excel 入门到精通笔记
- MATLAB中clc命令详解
- CHM格式 打开后不显示内容的解决办法
- 20201203 aaaaabbbbbccccc
- ecshop linux 大小写,ecshop敏感词管理
- 苹果手表计算机功能键,Apple Watch上的2个按键是这么玩的
- 替换固态硬盘后不能开机
- html 中圆角怎么写,html中的圆角
- 使用mprotect定位踩内存故障
- 元宇宙的前景及四大赛道
- 没有什么技术是永恒的,2020 年 VMware 第一个开始裁员了!
热门文章
- 厉害了!厦门大学“嘉庚一号”火箭成功发射 问鼎九天
- 深入浅出Shell编程: Shell 变量【ZT】
- 面试了上百位性能测试后,我发现了一个令人不安的事实
- java设计模式之行为型设计模式
- HTML meta 标签 遇到meta http-equiv=refresh content=0; url=详解
- 3加密狗计算pin码_6 个芯片打造复古经典计算机:215 色显示,能编程能玩小游戏...
- Linux驱动概念扫盲篇
- vue修改config后怎么生效_梦幻西游 金银锦盒修改后资金怎么攥 可以考虑跑商
- mysql intt默认值_MySQL如何处理隐式默认值
- html给页面整体添加左右边距_HTML嵌入页面的几种方法