【问题标题】:Why is my timestamp range query returning nothing为什么我的时间戳范围查询没有返回任何内容
【发布时间】:2020-07-22 07:33:13
【问题描述】:

我正在使用 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"
    }
}

感谢您的帮助!

【问题讨论】:

    标签: elasticsearch elasticsearch-opendistro


    【解决方案1】:

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

    正确的映射:

    PUT test_alert
    {
      "mappings": {
        "properties": {
          "@timestamp": {
            "type": "date",
            "format": "epoch_second"
          },
          "value": {
            "type": "long"
          }
        }
      }
    }
    

    【讨论】:

    • 谢谢,虽然我习惯使用now-1h。现在它按预期工作了!
    • 很高兴听到这个消息!
    猜你喜欢
    • 2018-11-10
    • 1970-01-01
    • 2021-07-04
    • 1970-01-01
    • 2016-07-16
    • 1970-01-01
    • 2021-04-14
    • 2011-11-07
    • 1970-01-01
    相关资源
    最近更新 更多