《Elasticsearch:权威指南》Query DSL -- Term-level queries --Terms Query
文章目录
- Terms Query(多项条件精确匹配)
- Terms lookup(多项)查找机制
- terms lookup 查询例子
Terms Query(多项条件精确匹配)
过滤具有与任何提供的多项条件词语(未分析)匹配的字段的文档。 例如:
GET /_search
{"query": {"terms" : { "user" : ["kimchy", "elasticsearch"]}}
}
terms
和term
意思相近,从字面意思可以知道是多个条件。可以先初步理解为mysql 中的in
语句,如where name in ('A','B')
,term
可以理解成=
语句,如where name =‘A’
Terms lookup(多项)查找机制
当需要用大量的词语来指定 terms
过滤器时,Terms lookup 机制
可以有助于从索引中的文档中提取这些项值。一个具体的例子是过滤由你的followers
粉丝推送的tweet
(理解成微博)。在 term 过滤器中指定的用户ID的数量可以很多。在这种情况下,使用 terms 过滤器的词语查找机制是有意义的。
就是使用terms时,如果枚举项很多,不用一个个的列举出来,如果这些枚举项对应另一个索引中的某个字段(貌似必须是数组结构,未验证非数组结构),可以直接引用。
多项查找机制支持以下选项:
选项 | 说明 |
---|---|
index | index (索引)被用来提取项的值。默认当前 index (索引) |
type | type (类型)被用来提取项的值。 |
id | 用文档 id (ID)来提取项的值。 |
path | 指定为路径的字段,以获取 term (项)筛选器的实际值。 其实就是指定哪些字段作为搜索条件 |
routing | 检索外部 term (项)文档时要使用的自定义路由值。 |
terms 过滤器的值将从文档中具有指定ID和指定类型和索引的字段中获取。 在内部执行get请求以从指定路径获取值。 目前,此功能正常工作,需要存储_source
。
必须存储
_source
另外,如果“引用”词语数据不大,请考虑使用具有单个分片并在所有节点之间完全复制的索引。 如果可能,查找字词过滤器将更喜欢在本地节点上执行get请求,从而减少了联网需求。
执行包含大量terms 的Terms Query查询请求可能会非常慢,因为每个附加词语都需要额外的处理和内存。 为了防止这种情况,可以在Terms Query查询中直接或通过查找使用的最大术语数限制为
65536
。可以使用索引设置index.max_terms_count
更改特定索引的默认最大值。
terms lookup 查询例子
PUT /users/_doc/2 //user索引
{"followers" : ["1", "3"] //有个粉丝字段,该用户有2个粉丝
}PUT /tweets/_doc/1 //tweet索引,理解成微博
{"user" : "1" //tweet归属用户
}GET /tweets/_search //查询tweet索引
{"query" : {"terms" : {"user" : { //terms lookup机制,等价于"user" :["1", "3"]"index" : "users","type" : "_doc","id" : "2","path" : "followers"}}}
}
curl 格式查询命令:
curl -XGET "100.40.164.63:9200/tweets/_search" --header "Content-Type:application/json" -d '
{"query" : {"terms" : {"user" : {"index" : "users","type" : "_doc","id" : "2","path" : "followers"}}}
}'
如例子中的注释,通过入参,自动帮我们实现了填充,有点像以前的mysql 嵌套查询,select * from table A where name in (select name from B)
文档结构如果是数组形式的,且是对象数组(前面数组就是一个字符串数组),也支持
PUT /users/_doc/2
{"followers" : [{"id" : "1"},{"id" : "2"}]
}
使用 followers.id
即可
GET /tweets/_search
{"query" : {"terms" : {"user" : {"index" : "users","type" : "_doc","id" : "2","path" : "followers.id" //followers.id}}}
}
《Elasticsearch:权威指南》Query DSL -- Term-level queries --Terms Query相关推荐
- elasticsearch权威指南-中文
elasticsearch权威指南-中文 Table of Contents 1. Introduction 2. 入门 i. 是什么 ii. 安装 iii. API iv. 文档 v. 索引 vi. ...
- elasticsearch: 权威指南_你还不会Elasticsearch的CUD?
近端时间在搬砖过程中对es进行了操作,但是对es查询文档不熟悉,所以这两周都在研究es,简略看了<Elasticsearch权威指南>,摸摸鱼又是一天. es是一款基于Lucene的实时分 ...
- Elasticsearch权威指南
在关于Elasticsearch的众多书籍.博客等材料当中,地位最高的自然是Elasticsearch权威指南,若想真正玩转ES,阅读指南是必经之路. 中文版信息 <Elasticsearch: ...
- ElasticSearch权威指南学习(结构化查询)
请求体查询 简单查询语句(lite)是一种有效的命令行adhoc查询.但是,如果你想要善用搜索,你必须使用请求体查询(request body search)API. 空查询 我们以最简单的 sear ...
- 【Elasticsearch 权威指南学习笔记】结构化搜索
结构化搜索(Structured search) 是指有关探询那些具有内在结构数据的过程.比如日期.时间和数字都是结构化的:它们有精确的格式,我们可以对这些格式进行逻辑操作.比较常见的操作包括比较数字 ...
- [Elasticsearch] Elasticsearch权威指南翻译目录
为了方便大家能够更加快速地找到自己需要参考的那部分,对已经翻译完成的部分根据权威指南的目录做了相应目录,希望能够有所帮助. 起步(Getting Started) 1. 你懂的,为了搜索 英文原文链接 ...
- Introduction | Elasticsearch权威指南(中文版) | 好的博文地址|官方资源所在位置
权威指南 https://es.xiaoleilu.com/170_Relevance/10_Scoring_theory.html 好的博文地址(以下博文可以作为学习参考资料) https://bl ...
- 《Elasticsearch:权威指南》cat APIs -- cat indices(查看索引信息)
文章目录 cat indices Primaries 示例 哪些索引状态是 yellow ? 哪个索引的文件数最多? 指定显示哪些列 每一个索引使用了多少内存? 参数解释 cat indices in ...
- php多关键词精确查找,查找多个精确值 | Elasticsearch: 权威指南 | Elastic
查找多个精确值edit term 查询对于查找单个值非常有用,但通常我们可能想搜索多个值. 如果我们想要查找价格字段值为 $20 或 $30 的文档该如何处理呢? 不需要使用多个 term 查询,我们 ...
最新文章
- ORA-08002: sequence MySeq.currval is not yet defined in this session
- 同一个网站,手机端跟电脑端显示不同是怎么实现的?...
- spring-boot-maven-plugin not found的解决方案
- 【eclipse】安装 Gradle 插件
- gwt入门和进阶_GWT入门
- 在Word 2007中为公式编号
- [C++]虚函数-同名访问
- 图像处理1 高斯模糊
- 一款软件测试脚本生成工具
- anaconda下载
- 南开100题计算机三级数据库,全国计算机三级数据库技术南开100题.doc
- gg修改器修改内购_【教程】手把手教你修改微信性别为空
- “OpenFeign“ 调取第三方服务接口时出现的“Connection reset“ 解决方案
- win10家庭版破解lr11遇到的问题
- vue的事件修饰符之.prevent
- zlib库介绍四:zlib算法(LZ77、LZ78、霍夫曼编码、滑动窗口、Rabin-Karp算法、哈希链、I/O缓冲区)
- ubuntu配置防火墙
- Express(一) ——简单入门
- 作业2(4)求m和n之间的和
- Mac版微信内存飙升卡死解决办法