如何对Elasticsearch索引按指定属性查询并限定给定时间范围?
Elasticsearch 多条件查询DSL修正
- 原DSL语法错误说明:Elasticsearch的
query根节点不支持直接并列多个查询条件,你当前将时间范围range查询和sitename匹配查询平级放在query下,执行时会触发语法报错。 - 修正后可正常运行的DSL(两个条件同时生效):
{ "query": { "bool": { "must": [ { "range": { "timestamp": { "gte": "now-1h/h", "lt": "now/h" } } }, { "match": { "sitename": "HARB00ZAF0" } } ] } } }
- 优化建议:
- 你使用的
now-1h/h、now/h时间语法为整点对齐逻辑,查询的是上一个完整小时的所有数据,符合你的需求可直接使用。如果需要查询过去1小时(不对齐整点)的数据,将时间参数改为gte: "now-1h"、lt: "now"即可。 - 如果
sitename字段为未分词的keyword类型,建议将match查询替换为term查询,实现更高效的精确匹配,避免分词导致的非预期结果,示例如下:
如果你的{"term": {"sitename": "HARB00ZAF0"}}sitename是text类型,且keyword子字段存在,可替换为:{"term": {"sitename.keyword": "HARB00ZAF0"}} - 你使用的
内容的提问来源于stack exchange,提问作者Neibe
相关产品推荐
相关产品推荐

