Проблема с безболезненным наблюдателем за Elasticsearch скрипта

#elasticsearch #kibana #elasticsearch-painless

Вопрос:

Я создаю наблюдатель в elasticsearch, который сообщает, когда у нас не было новой записи или событий в индексе в течение 10 минут, это дополнительно разделяется, просматривая поле источника в записи.

Я получаю только последние 10 минут индекса и вижу, какой источник отсутствует в корзинах.

для этого я сначала создаю список всех типов источников, которые мы получаем, а затем создаю список из возвращенных ключей корзины. Затем я хочу сравнить списки, чтобы увидеть, какой из них отсутствует, чтобы затем передать это в сообщение.

Я получаю общую ошибку для цикла for. Любая обратная связь полезна, совершенно новая для эластичной и безболезненной, так что может быть что-то простое, что я пропустил.

 "transform": {
          "script": {
            "source": """String vMessage = 'Clickstream data has been loaded although there are no iovation records from the following source in the last 10 mins:

';if(ctx.payload.clickstream.hits.total > 0 amp;amp; ctx.payload.iovation.aggregations.source.buckets.size() < 3) { source_list = ['wintech', 'login', 'clickstream']; source_array = new String[] for (source in ctx.payload.iovation.aggregations.source.buckets){ source_array.add(source.key);  } for (key in source_list){ if (!source_array.contains(key){ vMessage  = '<ul><li>'   key   '</li></ul>';}  } }return [ 'message': vMessage ];""",
            "lang": "painless"
          }
        },
 

Ответ №1:

Поэтому я понял это, покопавшись в дополнительной документации.

Я неправильно объявлял свои списки. Чтобы объявить список, он должен быть в формате, как показано ниже.

  List new_list = new ArrayList();
 

Это решило мою проблему, и теперь сценарий преобразования работает так, как ожидалось.

 """String vMessage = 'Clickstream data has been loaded although there are no iovation records from the following source in the last 10 mins:

';if(ctx.payload.clickstream.hits.total > 0 amp;amp; ctx.payload.iovation.aggregations.source.buckets.size() < 3) { List source_list = new ArrayList(['wintech', 'login', 'clickstream']); List source_array = new ArrayList(); for (source in ctx.payload.iovation.aggregations.source.buckets){ source_array.add(source.key);  } for (key in source_list){ if (!source_array.contains(key)){ vMessage  = '<ul><li>'   key   '</li></ul>';}  } }return [ 'message': vMessage ];""",