2016-07-27 12 views
0

Ich habe Elasticsearch Abfrage, die jeder oid Namen bekommen und es ist geteilt Zahl um 1000 (die Nummer (1000) geändert werden kann)Bucket Skript java api in Elasticsearch

"aggregations" : { 
     "agg_oid" : { 
      "terms" : { 
      "field" : "oid", 
      "order" : { 
       "_count" : "desc" 
      } 
      }, 
      "aggregations" : { 
       "agg_values" : { 
        "bucket_script": { 
         "buckets_path": { 
          "count": "_count" 
         }, 
         "script": "count/1000" 
        } 
       } 
      } 
     } 
     } 

Es funktioniert gut, und versuchte es mit java api (derzeit mit jest) zu machen.

AggregationBuilders 
    .terms("agg_oid") 
    .field("oid") 
    .subAggregation(
     AggregationBuilders 
      // bucket script and path for count 
    ); 

Wie zu implementieren von 'bucket_script' in Java? Wenn nicht, gibt es eine Möglichkeit, die Zählung der Aggregation mit caculating in java api abzufragen?

Antwort

2

So etwas sollte tun:

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

Es könnte für mich arbeiten. Vielen Dank :) –

Verwandte Themen