входы цепочки наблюдателя elasticsearch с промежуточным массивом - PullRequest
1 голос
/ 08 мая 2020

Вопрос

Я связываю разные запросы elasticsearch в наблюдателе. Короче, я бы хотел сделать это:

  • find container_ids
  • запустить запрос для всех записей с любым из этих container_ids

первый запрос дает мне массив. Поэтому я хотел бы передать этот массив в качестве входных данных в запрос terms . Проблема в том, что переменные ctx.payload..., кажется, расширяются только внутри строк.

"query": {
  "terms" : {
    "container_id" : ctx.payload.first_query._value,
  }
}

выдаст мне такие ошибки, как:

Unrecognized token 'ctx'

Есть ли способ вставить массив без расширения до строки? Если я использую «ctx.payload.first_query._value», он запросит строку "[id1, id2]" ...

Текущее решение

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

"input": {
  "chain": {
    "inputs" : [ {
      "container_ids" : {
        ...
      }
    }, {
      "container_id_regex": {
        "transform" : {
          "script": """
            def container_id_rexexp = "";
            def regexp_separator = "";
            for(def hit : ctx.payload.container_ids.hits.hits){
              container_id_rexexp += regexp_separator + hit._source.container_id;
              regexp_separator = "|";
            }
            return container_id_rexexp;
          """
        }
      }
    }, {
      "container_details": {
        "search": {
          "request": {
            ...
            "body": {
              "query": {
                "regexp": {
                  "container_id": {
                    "value": "{{ '{{ctx.payload.container_id_regex._value}}' }}"
                  }
                }
              }
            }
          }
        }
      }
    } ]
  }
}
...