ElasticSearch:问题咨询a un Rango de tiempo finido

gmxoilav  于 2022-09-20  发布在  ElasticSearch
关注(0)|答案(1)|浏览(192)

我想知道是否有办法将时间范围定义如下。

与观察者一起,我在一个字段中寻找具有特定消息的记录。问题是,我希望它在输入记录72小时后找到它们。

这是我的代码:

GET my_index/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "match_phrase": {
            "status": {
              "query": "process"
            }
          }
        },
        {
          "match_phrase": {
            "estatus": {
              "query": "error"
            }
          }
        },
        {
         "range": {
            "date": {
              "gte": "now-72h",
              "time_zone": "-06:00"
            }
          }
        }
      ]
    }
  }
}

我的问题是,查询总是返回与“Status”字段匹配的记录,但不考虑范围(即,它可能带来更旧/更新的记录)。我明白,通过放置“现在”,我指定了当前日期。也就是说,我如何将其配置为仅获取-72小时内的记录?谢谢你,社区。

pu82cl6c

pu82cl6c1#

因为您使用的是should子句,所以它将只匹配条件和返回结果中的任何一个,因为默认情况下,minimum_should_match值设置为1

您可以将需要强制匹配的条件移动到must子句,并可以选择保留到should子句。

下面的查询将强制匹配date条件和should子句中的任何条件。

{
  "query": {
    "bool": {
      "must": [
        {
          "range": {
            "date": {
              "gte": "now-72h",
              "time_zone": "-06:00"
            }
          }
        }
      ],
      "should": [
        {
          "match_phrase": {
            "status": {
              "query": "process"
            }
          }
        },
        {
          "match_phrase": {
            "estatus": {
              "query": "error"
            }
          }
        }
      ],
      "minimum_should_match": 1
    }
  }
}

在这里,now-72h将为您提供在过去72小时内创建的录音。

相关问题