elasticsearch 中的存储桶脚本 java api
Bucket script java api in elasticsearch
我进行了 elasticsearch 查询,获取每个 oid 名称并将其计数除以 1000。(数字 (1000) 可以更改)
"aggregations" : {
"agg_oid" : {
"terms" : {
"field" : "oid",
"order" : {
"_count" : "desc"
}
},
"aggregations" : {
"agg_values" : {
"bucket_script": {
"buckets_path": {
"count": "_count"
},
"script": "count / 1000"
}
}
}
}
}
效果不错,尝试用javaapi(目前用的是jest)来实现。
AggregationBuilders
.terms( "agg_oid")
.field( "oid")
.subAggregation(
AggregationBuilders
// bucket script and path for count
);
如何在java中实现'bucket_script'?如果没有,有什么方法可以通过计算 java api?
来查询聚合的计数
应该这样做:
Map<String, String> bucketsPathsMap = new HashMap<>();
bucketsPathsMap.put("count", "_count");
Script script = new Script("count / 1000");
BucketScriptPipelineAggregationBuilder bs = PipelineAggregatorBuilders
.bucketScript("agg_values", bucketsPathsMap, script);
TermsAggregationBuilder oid = AggregationBuilders.terms("agg_oid")
.field("oid")
.order(InternalOrder.COUNT_DESC).
subAggregation(bs);
我进行了 elasticsearch 查询,获取每个 oid 名称并将其计数除以 1000。(数字 (1000) 可以更改)
"aggregations" : { "agg_oid" : { "terms" : { "field" : "oid", "order" : { "_count" : "desc" } }, "aggregations" : { "agg_values" : { "bucket_script": { "buckets_path": { "count": "_count" }, "script": "count / 1000" } } } } }
效果不错,尝试用javaapi(目前用的是jest)来实现。
AggregationBuilders
.terms( "agg_oid")
.field( "oid")
.subAggregation(
AggregationBuilders
// bucket script and path for count
);
如何在java中实现'bucket_script'?如果没有,有什么方法可以通过计算 java api?
来查询聚合的计数应该这样做:
Map<String, String> bucketsPathsMap = new HashMap<>();
bucketsPathsMap.put("count", "_count");
Script script = new Script("count / 1000");
BucketScriptPipelineAggregationBuilder bs = PipelineAggregatorBuilders
.bucketScript("agg_values", bucketsPathsMap, script);
TermsAggregationBuilder oid = AggregationBuilders.terms("agg_oid")
.field("oid")
.order(InternalOrder.COUNT_DESC).
subAggregation(bs);