首页 > 解决方案 > Kibana 6 合并 2 个过滤器

问题描述

我有 2 个效果很好的过滤器: 1. 匹配短语“NA”

{
  "query": {
    "match": {
      "region.keyword": {
        "query": "NA",
        "type": "phrase"
      }
    }
  }
}

2.使用一个脚本化的字段来拉取过滤器以显示不介于 0-7 之间的所有时间:

{
  "script": {
    "script": {
      "inline": "boolean gte(Supplier s, def v) {return s.get() >= v} boolean lt(Supplier s, def v) {return s.get() < v}gte(() -> { doc['@timestamp'].date.hourOfDay }, params.gte) && lt(() -> { doc['@timestamp'].date.hourOfDay }, params.lt)",
      "params": {
        "gte": 0,
        "lt": 7,
        "value": ">=0 <7"
      },
      "lang": "painless"
    }
  }
}

我想将其分组到一个过滤器中,这样它的“NA 小时不在 0-7 之间”这样我就可以更改区域和时间并仍然应用其他过滤器。

也不确定如何添加这种自定义过滤器,因为添加过滤器只允许我输入 1 个字段

标签: elasticsearchkibanakibana-6

解决方案


在使用可视化工具和发现之前,请确保在Management -> Index Pattern -> Create index pattern` 下创建索引模式并添加要应用过滤器的索引的名称。

现在,结合您在问题中添加的查询,组合查询将如下所示:

{
  "query": {
    "bool": {
      "must": [
        {
          "region.keyword": {
            "query": "NA",
            "type": "phrase"
          }
        },
        {
          "script": {
            "script": {
              "inline": "boolean gte(Supplier s, def v) {return s.get() >= v} boolean lt(Supplier s, def v) {return s.get() < v}gte(() -> { doc['@timestamp'].date.hourOfDay }, params.gte) && lt(() -> { doc['@timestamp'].date.hourOfDay }, params.lt)",
              "params": {
                "gte": 0,
                "lt": 7,
                "value": ">=0 <7"
              },
              "lang": "painless"
            }
          }
        }
      ]
    }
  }
}

发现部分

在Kibana 的Discover部分,选择索引名称index pattern section(请参阅图片链接),然后单击Add a filter,在右侧您会看到一个选项Edit Query DSL

复制并粘贴上述查询。您应该能够看到结果,Document Table即图表下的文档详细信息。

展示台

好吧,如果这与特定的可视化工具(或发现选项卡)有关,您没有在问题中提到,但是就像我们在发现部分添加过滤器的方式一样,您也可以在可视化工具中这样做(例如在Metric Visualizer您将在)Edit Query DSL下看到部分Add a filter

让我知道这是否有帮助!


推荐阅读