服务器从前端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/