使用Bodybuilder进行嵌套查询

时间:2019-03-16 14:44:51

标签: javascript elasticsearch bodybuilder.js

我正在尝试使用BodyBuilder从一个对象数组动态构建一个弹性查询。我可以在对象数组上使用for循环构建一个没有嵌套聚合的查询,但是当需要深度聚合时会遇到困难。< / p>

这是我的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来自前端。

0 个答案:

没有答案