Я пытаюсь построить эластичный запрос динамически из массива объектов, используя BodyBuilder. Я могу построить запрос без вложенных агрегаций, используя цикл for для массива объектов, но сталкиваясь с трудностями, когда требуется глубокая агрегация.
Вот как выглядит мой JSON-
let queries = [
{
"type": "filter",
"action": "range",
"field": "transactionDate",
"input": {
"gte": "",
"lte": ""
},
"children": []
},
{
"type": "filter",
"action": "terms",
"field": "store.keyword",
"input": [],
"children": []
},
{
"type": "filter",
"action": "nested",
"path": "lineItems",
"field": "",
"children": [
{
"type": "query",
"action": "terms",
"field": "lineItems.stockNo.keyword",
"path":""
"input": [],
"children":[]
}
]
}
];
Может также содержать агрегаты.
То, как я строю запрос -
queries.forEach((element) => {
if(element.children.length === 0)
ds[element.type](element.action, element.field, element.input);
else
//what should I do here
});
Это не работает для вложенных запросов.
Вложенные запросы в bodybuilder возвращают функцию с запросом.
Как это -
.query('nested', 'path', 'obj1', (q) => {
return q.query('match', 'obj1.color', 'blue')
})
Я хочу, чтобы он возвращал несколько запросов в зависимости от потомков. Как я могу добиться этого или есть какой-либо другой способ создания динамических запросов. Этот JSON будет исходить из внешнего интерфейса.