根据 Elasticsearch 中不同索引中存在的字段进行查询
Posted
技术标签:
【中文标题】根据 Elasticsearch 中不同索引中存在的字段进行查询【英文标题】:Query based on Fields existing in different Indices in Elasticsearch 【发布时间】:2017-02-17 11:23:08 【问题描述】:我有以下查询
"from":0,
"size":50000,
"_source":[
"T121",
"timestamp"
],
"sort":
"timestamp":
"order":"asc"
,
"query":
"bool":
"must":
"range":
"timestamp":
"gte":"2017-01-17 11:44:41.347",
"lte":"2017-02-18 11:44:47.878"
,
"must":
"exists":
"field":"T121"
http://172.22.23.169:9200/index1,index2,Index3/_search?pretty
通过这个 URL,我想查询 Elasticsearch 中的多个索引,并且只返回那些存在特定字段的文档。
是否可以在我定义的“exists”子句中放入字段列表 如果其中一个文档中存在“field1”或“field2”或“fiedl3”,则返回它,否则不要,或者我必须编写这样的案例吗?
【问题讨论】:
【参考方案1】:要搜索所有索引,请使用 > http://172.22.23.169:9200/_search?pretty
要搜索选定的索引,请将以下过滤器添加到“布尔”过滤器
"must":
"terms":
"_index": [
"index1",
"index2"
]
对于多个“exists”进行 OR'ing,您可以使用 should 子句与多个存在并指定“minimum_should_match”来控制搜索记录。
"from":0,
"size":50000,
"_source":[
"T121",
"timestamp"
],
"sort":
"timestamp":
"order":"asc"
,
"query":
"bool":
"must":
"range":
"timestamp":
"gte":"2017-01-17 11:44:41.347",
"lte":"2017-02-18 11:44:47.878"
,
"should":[
"exists":
"field":"field1"
,
"exists":
"field":"field2"
,
"exists":
"field":"field3"
]
【讨论】:
以上是关于根据 Elasticsearch 中不同索引中存在的字段进行查询的主要内容,如果未能解决你的问题,请参考以下文章
Java + SpringBoot 操作 ElasticSearch7.x.x工具类RestHighLevelClientUtils
Java + SpringBoot 操作 ElasticSearch7.x.x工具类RestHighLevelClientUtils
Java + SpringBoot 操作 ElasticSearch7.x.x工具类RestHighLevelClientUtils
ElasticSearch7.3学习(十六)----RestHighLevelClient Java api实现索引的创建删除是否存在关闭开启