【问题标题】:Range or missing - ElasticSearch - Query DSL范围或缺失 - ElasticSearch - 查询 DSL
【发布时间】:2018-05-23 11:08:08
【问题描述】:

我目前正在尝试将以下逻辑放入 ES 查询中 - http_code 是否存在?如果是的话,应该在400-600之间;但它也可能丢失。

以下查询不起作用,我认为它需要更改和更正。

{
  "query": {
    "bool": {
      "must": [
        {
          "range": {
            "http_code": {
              "gte": 400,
              "lt": 600
            }
          }
        },
        {
          "bool": {
            "should": [
              {
                "bool": {
                  "must_not": {
                    "exists": {
                      "field": "http_code"
                    }
                  }
                }
              }
            ]
          }
        }
      ]
    }
  }
}

最初的要求是在 Kibana 仪表板中保存一个过滤器,其范围为 400-600 或丢失。

【问题讨论】:

  • 您是否尝试过删除must 查询中的第二个块?它返回什么?
  • 它返回的范围是 400 到 600,但我也想要缺少该字段的记录。

标签: elasticsearch elasticsearch-5 kibana-6


【解决方案1】:

要进行您建议的查询,您需要执行以下操作:

The original requirement is to save a filter in a Kibana dashboard with range 400-600 OR it's missing. as:

{
  "query": {
    "bool": {
      "minimum_should_match": 1,
      "should": [
        {
          "range": {
            "http_code": {
              "gte": 400,
              "lt": 600
            }
          }
        },
        {
          "bool": {
            "must_not": {
              "exists": {
                "field": "http_code"
              }
            }
          }
        }
      ]
    }
  }
}

【讨论】:

  • 请问您是否曾经有过类似的过滤器集,然后是过滤掉http_code 500-600 的量规;这将覆盖此查询,并且不会显示缺少http_code 的记录;有办法解决吗?
  • 您可以根据需要为搜索添加任意数量的条件。您要求的示例,我应该尝试在您的布尔查询中添加一个必须部分,其中 http_code.range 从 500 到 600 并且存在。http_code 另一方面,如果您的 http_code 它已经是 500 到 600,我想您会删除您的存在查询.
猜你喜欢
  • 2021-05-20
  • 1970-01-01
  • 2021-05-06
  • 1970-01-01
  • 2020-09-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-17
  • 1970-01-01
相关资源
最近更新 更多