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

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

我需要将每个这些过滤器链接到bodybuilder查询,即:
var body=bodybuilder()
.query('match', 'searchable', req.query.querytext)
.from(i)
.build();

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

最佳答案

您可能可以使用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>


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

关于elasticsearch - 向使用bodybuilder.js生成的DSL查询正文中动态添加过滤器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44738531/

10-11 06:17