Kibana 6合并2个过滤器

时间:2019-03-07 18:19:03

标签: elasticsearch kibana kibana-6

我有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个字段

1 个答案:

答案 0 :(得分:1)

在使用可视化工具进行发现之前,请确保在 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中看到结果,即图表下的文档详细信息。

Visualizer

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

让我知道这是否有帮助!