Использование Bodybuilder для вложенных запросов - PullRequest
0 голосов
/ 16 марта 2019

Я пытаюсь построить эластичный запрос динамически из массива объектов, используя 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 будет исходить из внешнего интерфейса.

...