我正在使用一个名为Body Builder的查询构建器
我需要构建器根据所选过滤器的数量进行工作。
因此,特定列表类型的默认过滤器如下所示:
bodybuilder()
.aggregations('terms', 'listingType.keyword', 'Type')
.build()
哪个按预期工作。我有我需要的聚合存储桶。
如果选择了一个项目怎么办?我想添加该过滤器。
这是我想要的样子:
bodybuilder()
.addFilter('term', 'itemTypeId', 2)
.aggregations('terms', 'listingType.keyword', 'Type')
.build()
或者,如果选择了多个项目。
bodybuilder()
.addFilter('term', 'itemTypeId', id)
.addFilter('term', 'moo.keyword', moo)
.addFilter('term', 'make.keyword', make)
.aggregations('terms', 'listingType.keyword', 'Type')
.build()
我有一组选定的过滤器。我想我可以做些类似的事情:
const activeFilters = [{type: 'make.keyword, value: 'SAMSUNG'}, {type: 'moo.keyword', value: 'moo'}]
if (activeFilters) {
activeFilters.map(item => {
addFilter(item.type, item.value)
}
}
//OR
bodybuilder()
activeFilters.map(item => addFilter(item.type, item.value)
.aggregation('terms' , 'listingType.keyword', 'Type')
.build()
遵循这些原则。有什么建议吗?
谢谢!
最佳答案
是的,您可以这样做,可以执行以下操作:
const activeFilters = [{type: 'make.keyword, value: 'SAMSUNG'}, {type: 'moo.keyword', value: 'moo'}];
let query = bodybuilder();
activeFilters.forEach(filter => {
query = query.addFilter('term', filter.type, filter.value);
});
query.aggregation('terms' , 'listingType.keyword', 'Type')
.build()
这个想法是保留对返回值的引用,而不是链接调用。
关于javascript - 动态建立功能?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55976850/