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);