【问题标题】:adding filters dynamically to DSL query body generated using bodybuilder.js向使用 bodybuilder.js 生成的 DSL 查询正文动态添加过滤器
【发布时间】:2017-11-28 01:01:56
【问题描述】:

服务器从前端 ajax 调用中获取一组查询词:

req.query.filterTerms=['black', 'white', 'green']

我需要将每个过滤器链接到 bodybuilder 查询,即:

var body=bodybuilder()
.query('match', 'searchable', req.query.querytext)
.from(i)
.build();

如何将数组中每个查询项的 .filter() 方法/函数动态链接到 bodybuilder 实例?

【问题讨论】:

    标签: elasticsearch bodybuilder.js


    【解决方案1】:

    对于任何有类似问题的人,请尝试 console.log 在 bodybuilder 实例上使用 build 方法创建的 body 对象,在使用您手动键入的参数在实例上手动插入过滤器方法之后。它将显示结构您可以使用附加到 bodybuilder 过滤子句。

    【讨论】:

      【解决方案2】:

      你也许可以使用reduce:

          const filterTerms = ['red', 'green', 'black'];
          const body = bodybuilder();
          body.query('match', 'searchable', 'foobar');
          const chainedFilter = filterTerms.reduce((filterBody, term) => {
              return filterBody.filter('match', 'term', term)
          }, body);
          console.log(JSON.stringify(body.build(), null, 2))
      <script src="https://rawgit.com/danpaz/bodybuilder/master/browser/bodybuilder.min.js"></script>

      这相当于将命令链接在一起。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-02-17
        • 1970-01-01
        • 2021-07-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-14
        • 1970-01-01
        相关资源
        最近更新 更多