如何在must子句下使用范围和匹配进行查询?

时间:2019-10-14 22:15:08

标签: elasticsearch

在给定必须与字段匹配的值的情况下,我正在尝试提取过去24小时的数据。我已经写了一些查询来匹配该字段的值并查询过去24小时,但是我不知道如何将它们组合起来。

查询最近24小时:

{
  "_source": ["instance_name", "@timestamp"], 
  "query": {
    "range": {
      "sampletime": {
        "gte": "now-24h",
        "lte": "now"
      }
    }
  }
}

查询要匹配的字段:

{
  "_source": ["instance_name", "@timestamp"], 
  "query": {
    "match": {
      "instance_name": "value_to_search"
    }
  }
}

试图将两者结合:

{
  "_source": ["instance_name", "@timestamp"], 
  "query": {
    "bool": {
      "must": [{
        "match": {
          "instance_name": "value"
        },
        "range": {
          "sampletime": {
            "gte": "now-24h",
            "lte": "now"
            }
          }
      }]
    }
  }
}

有没有办法将这些结合起来?同样,也可以定位同一字段下的多个值。

instance_name == x || instance_name == y || instance_name == z

1 个答案:

答案 0 :(得分:1)

您的尝试非常接近。 > x samp1 samp2 samp3 1 5 A 0 2 6 A 1 3 7 B 0 4 5 C 1 5 4 B 0 6 5 A 0 7 10 A 0 8 5 A 0 9 6 A 0 10 7 A 0 查询周围的格式略有偏离。

这是校正后的样本:

range

关于第二个问题,默认情况下,{ "_source": ["instance_name", "@timestamp"], "query": { "bool": { "must": [ { "match": { "instance_name": "value" } }, { "range": { "sampletime": { "gte": "now-24h", "lte": "now" } } } ] } } } 运算符将用于所有匹配查询。

例如,or将匹配所有具有FIELD的匹配:

a or b or c

您可以在以下网址中详细了解“匹配”查询的全部选项 official documentation