Вопрос
Я связываю разные запросы 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}}' }}"
}
}
}
}
}
}
}
} ]
}
}