如何解决使用 elastic-builder.js 构建多级聚合查询
我正在尝试使用 javascript 和 elasticsearch,并尝试使用 elastic-builder javascript 库创建查询。 我可能遗漏了一些我想弄清楚的东西,但不幸的是我无法做到。
问题:我正在尝试创建如下所示的多级聚合,
"aggs": {
"1": {
"date_histogram": {
"field": "f1","calendar_interval": "1D"
},"aggs": {
"2": {
"date_histogram": {
"field": "f2","calendar_interval": "1D"
},"aggs": {
"3": {
"date_histogram": {
"field": "f3","calendar_interval": "1D"
}
}
}
}
}
}
但我得到的是:
"aggs": {
"1": {
"date_histogram": {
"field": "f1","calendar_interval": "1D"
}
},"3": {
"date_histogram": {
"field": "f3","calendar_interval": "1D"
}
}
}
}
我得到的当前输出有两个嵌套在一个中的聚合。我正在尝试使用其中定义了聚合的数组来构建它。
我使用的代码如下:
let a = [
esb.dateHistogramAggregation('1',"d[key]['field']").calendarInterval('1D'),esb.dateHistogramAggregation('2',"d[key]['field']").calendarInterval("1D"),esb.dateHistogramAggregation('3',"d[key]['field']").calendarInterval("1D")
];
let m = null;
for(i=0;i<a.length;i++) {
if(i === 0) {
m = a[i]
} else {
m.agg(a[i])
}
}
//m = esb.dateHistogramAggregation('1',"d[key]['field']").calendarInterval('1D')
//m = m.agg(esb.dateHistogramAggregation('2',"d[key]['field']").calendarInterval("1D").agg(esb.dateHistogramAggregation('3',"d[key]['field']").calendarInterval("1D")))
esb.requestBodySearch()
.query(
esb.boolQuery()
.must(esb.matchQuery('message','this is a test'))
.filter(esb.termQuery('user','kimchy'))
.filter(esb.termQuery('user','herald'))
.should(esb.termQuery('user','johnny'))
.mustNot(esb.termQuery('user','cassie'))
)
.agg(esb.termsAggregation('user_terms','user').agg(esb.termsAggregation('user_terms','user'))))
.agg(m);
解决方法
您可以将数组变成一组子聚合,如下所示:
let a = [
esb.dateHistogramAggregation('1',"d[key]['field']").calendarInterval('1D'),esb.dateHistogramAggregation('2',"d[key]['field']").calendarInterval("1D"),esb.dateHistogramAggregation('3',"d[key]['field']").calendarInterval("1D")
];
const reqBody = esb.requestBodySearch()
.agg(
a[0].agg(
a[1].agg(
a[2]
)
)
);
,
我像下面这样解决了它。我不确定这是正确的方法。但如果我错了,有人可以纠正我。
let temp = null;
for (i = a.length - 1; i >= 0; i--) {
if (i === a.length - 1) {
temp = a[i];
} else {
temp = a[i].agg(temp)
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。