1

我正在使用 elasticsearch 开放发行版来创建警报系统。但是我的弹性搜索查询有一个问题:

"search": {
                "indices": ["test_alert"],
                "query": {
                    "size": 3,
                    "aggregations": {},
                    "query": {
                        "bool": {
                            "filter": {
                                "range": {
                                    "@timestamp": {
                                        "gte": "now-1h",
                                        "lte": "now",
                                        "format": "epoch_second"
                                    }
                                }
                            }
                        }
                    }
                }
            }

这是我在我的开放发行版监视器中使用的查询。问题是now-1h似乎不起作用,我总是得到一个空的结果。我尝试使用原始时间戳(为了匹配并获得结果)并且效果很好。我不明白为什么在我使用now-1h.

这是我的映射:

properties": {
    "timestamp": {
        "type": "date",
        "format": "epoch_second"
    },
    "value": {
        "type": "long"
    }
}

谢谢你的帮助 !

4

1 回答 1

1

您的映射说timestamp,但您的查询有@timestamp. 两者需要一致命名。顺便说一句,没有什么特别的@timestamp——这只是一个约定。您可以range.gte now-1h对任何日期时间字段进行操作。

正确映射:

PUT test_alert
{
  "mappings": {
    "properties": {
      "@timestamp": {
        "type": "date",
        "format": "epoch_second"
      },
      "value": {
        "type": "long"
      }
    }
  }
}
于 2020-04-09T16:20:14.547 回答