如何使用bodybuilder从前端生成动态查询?

时间:2018-04-05 09:26:25

标签: elasticsearch query-builder

我正在使用bodybuilder生成elasticsearch查询,但我不知道如何使用查询,过滤器和所有内容创建复杂查询。

假设我在数组中有字段

let queryArr =
[
  {
    type: 'query',
    field: 'message',
    input: 'this is a test'    
  },
  {
    type: 'filter',
    field: 'user',
    input: 'sample'    
  },
  {
    type: 'notfilter',
    field: 'user',
    input: 'demo'    
  },
  {
    type: 'query',
    field: 'name',
    input: 'test'    
  }
]

如何生成以下最终查询结构以从此数组传递给bodybuilder?

let finalQuery = bodybuilder()
        .query('match', 'message', 'this is a test')
        .filter('term', 'user', 'sample')
        .notFilter('term', 'user', 'demo')
        .query('match', 'name', 'test')
        .build()

这里的健美和构建是健美运动员提供的功能。

我尝试使用模板字符串,但它不起作用。

我愿意接受任何其他客户端JS querybuilder的建议,它将数组作为输入并返回弹性搜索查询。

1 个答案:

答案 0 :(得分:0)

我几天前遇到了同样的问题,但我找到了一种与健美运动员合作的方法,但你需要这个功能..术语/匹配等

        const ds = bodybuilder()
        queryArr.forEach((element) => {
            ds[element.type](element.function, element.field, element.input);
        });
        const build = ds.build();

并且查询构建得很好。除非你需要嵌套的聚合/过滤器,这种方法不起作用