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"
    }
  }
}

Я хотел бы сгруппировать это в один фильтр, чтобы его «часы Северной Америки не были между 0-7», таким образом, я могу изменить регион и время и по-прежнему применять дополнительные фильтры.

Также не уверен, как добавить этот своеобразный настраиваемый фильтр, поскольку добавление фильтра позволяет мне ввести только 1 поле.


person chowpay    schedule 07.03.2019    source источник


Ответы (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 выберите имя индекса в < strong>index pattern section(см. ссылку на изображение), а затем нажмите Add a filter, там справа вы увидите опцию Edit Query DSL.

Скопируйте и вставьте приведенный выше запрос. Вы должны увидеть результаты в Document Table, то есть детали документа под графиком.

Визуализатор

Ну, вы не упомянули в вопросе, связано ли это с конкретным визуализатором (или вкладкой обнаружения), однако так же, как мы добавили фильтр в разделе обнаружения, вы можете сделать это в визуализаторы (скажем, например, в Metric Visualizer, где вы увидите раздел Edit Query DSL под Add a filter)

Позвольте мне знать, если это помогает!

person Opster ES Ninja - Kamal    schedule 08.03.2019
comment
Это очень полезно, хотя я получил эту ошибку `[parsing_exception] no [query] зарегистрирован для [region.keyword] с {line=1 & col=646}`, что странно, потому что это работает нормально, когда скрипт не присоединен. Я нахожу region.keyword просто отлично. - person chowpay; 09.03.2019
comment
@chowpay, я пробовал использовать образец сопоставления и использовал его field.keyword, и на моем конце он отлично работает. В том числе со сценарием. Не могли бы вы попытаться изолировать проблему, используя базовые match с range.keyword, а также с другими полями, и посмотреть, работает ли это в Edit Query DSL. Также удалите "type": "phrase" в первом запросе, который у вас есть. Проверьте, возвращают ли сначала оба запроса ответ через Kibana, а затем объедините их. - person Opster ES Ninja - Kamal; 09.03.2019