diff --git a/modules/lang-painless/src/test/resources/rest-api-spec/test/painless/100_terms_agg.yml b/modules/lang-painless/src/test/resources/rest-api-spec/test/painless/100_terms_agg.yml new file mode 100644 index 00000000000..774a5dd59b0 --- /dev/null +++ b/modules/lang-painless/src/test/resources/rest-api-spec/test/painless/100_terms_agg.yml @@ -0,0 +1,104 @@ +setup: + - do: + indices.create: + index: test_1 + body: + settings: + number_of_replicas: 0 + mappings: + properties: + str: + type: keyword + double: + type: double + number: + type: long + + - do: + cluster.health: + wait_for_status: green + + - do: + index: + index: test_1 + id: 1 + body: + str: "abc" + double: 1.0 + number: 1 + + - do: + index: + index: test_1 + id: 2 + body: + str: "abc" + double: 1.0 + number: 1 + + - do: + index: + index: test_1 + id: 3 + body: + str: "bcd" + double: 2.0 + number: 2 + + - do: + indices.refresh: {} + +--- +"String Value Script with doc notation": + + - do: + search: + rest_total_hits_as_int: true + body: { "size" : 0, "aggs" : { "str_terms" : { "terms" : { "field" : "str", "script": { "source": "return doc.str[0] + \"1\""} } } } } + + - match: { hits.total: 3 } + + - length: { aggregations.str_terms.buckets: 2 } + - match: { aggregations.str_terms.buckets.0.key: "abc1" } + - is_false: aggregations.str_terms.buckets.0.key_as_string + - match: { aggregations.str_terms.buckets.0.doc_count: 2 } + - match: { aggregations.str_terms.buckets.1.key: "bcd1" } + - is_false: aggregations.str_terms.buckets.1.key_as_string + - match: { aggregations.str_terms.buckets.1.doc_count: 1 } + +--- +"Long Value Script with doc notation": + + - do: + search: + rest_total_hits_as_int: true + body: { "size" : 0, "aggs" : { "long_terms" : { "terms" : { "field" : "number", "script": { "source": "return doc.number[0] + 1"} } } } } + + - match: { hits.total: 3 } + + - length: { aggregations.long_terms.buckets: 2 } + - match: { aggregations.long_terms.buckets.0.key: 2.0 } + - is_false: aggregations.long_terms.buckets.0.key_as_string + - match: { aggregations.long_terms.buckets.0.doc_count: 2 } + - match: { aggregations.long_terms.buckets.1.key: 3.0 } + - is_false: aggregations.long_terms.buckets.1.key_as_string + - match: { aggregations.long_terms.buckets.1.doc_count: 1 } + +--- +"Double Value Script with doc notation": + + - do: + search: + rest_total_hits_as_int: true + body: { "size" : 0, "aggs" : { "double_terms" : { "terms" : { "field" : "double", "script": { "source": "return doc.double[0] + 1"} } } } } + + - match: { hits.total: 3 } + + - length: { aggregations.double_terms.buckets: 2 } + - match: { aggregations.double_terms.buckets.0.key: 2.0 } + - is_false: aggregations.double_terms.buckets.0.key_as_string + - match: { aggregations.double_terms.buckets.0.doc_count: 2 } + - match: { aggregations.double_terms.buckets.1.key: 3.0 } + - is_false: aggregations.double_terms.buckets.1.key_as_string + - match: { aggregations.double_terms.buckets.1.doc_count: 1 } + diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/support/ValuesSource.java b/server/src/main/java/org/elasticsearch/search/aggregations/support/ValuesSource.java index b931cd81da9..e5cfa694cbf 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/support/ValuesSource.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/support/ValuesSource.java @@ -452,6 +452,7 @@ public abstract class ValuesSource { if (bytesValues.advanceExact(doc)) { count = bytesValues.docValueCount(); grow(); + script.setDocument(doc); for (int i = 0; i < count; ++i) { final BytesRef value = bytesValues.nextValue(); script.setNextAggregationValue(value.utf8ToString());