From a5ca0189c86264b2a3f65367e8d6bc1d1e2182ec Mon Sep 17 00:00:00 2001 From: Jim Ferenczi Date: Mon, 26 Dec 2016 16:33:08 +0100 Subject: [PATCH 1/3] Fix scaled_float numeric type in aggregations `scaled_float` should be used as FLOAT in aggregations but currently they are used as LONG. This change fixes this issue and adds a simple it test for it. --- .../index/mapper/ScaledFloatFieldMapper.java | 5 +- .../mapper/ScaledFloatFieldTypeTests.java | 1 + .../test/search.aggregation/20_terms.yaml | 49 +++++++++++++++++++ 3 files changed, 54 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/org/elasticsearch/index/mapper/ScaledFloatFieldMapper.java b/core/src/main/java/org/elasticsearch/index/mapper/ScaledFloatFieldMapper.java index c1ac00326a766..bd6bafe1a8edb 100644 --- a/core/src/main/java/org/elasticsearch/index/mapper/ScaledFloatFieldMapper.java +++ b/core/src/main/java/org/elasticsearch/index/mapper/ScaledFloatFieldMapper.java @@ -504,7 +504,10 @@ public Index index() { @Override public NumericType getNumericType() { - return scaledFieldData.getNumericType(); + /** + * {@link ScaledFloatLeafFieldData#getDoubleValues()} transforms the raw long values in `scaled float. + */ + return NumericType.FLOAT; } } diff --git a/core/src/test/java/org/elasticsearch/index/mapper/ScaledFloatFieldTypeTests.java b/core/src/test/java/org/elasticsearch/index/mapper/ScaledFloatFieldTypeTests.java index fd390c5da8a8f..9b10843d55ccb 100644 --- a/core/src/test/java/org/elasticsearch/index/mapper/ScaledFloatFieldTypeTests.java +++ b/core/src/test/java/org/elasticsearch/index/mapper/ScaledFloatFieldTypeTests.java @@ -182,6 +182,7 @@ public void testFieldData() throws IOException { // single-valued ft.setName("scaled_float1"); IndexNumericFieldData fielddata = (IndexNumericFieldData) ft.fielddataBuilder().build(indexSettings, ft, null, null, null); + assertEquals(fielddata.getNumericType(), IndexNumericFieldData.NumericType.FLOAT); AtomicNumericFieldData leafFieldData = fielddata.load(reader.leaves().get(0)); SortedNumericDoubleValues values = leafFieldData.getDoubleValues(); values.setDocument(0); diff --git a/rest-api-spec/src/main/resources/rest-api-spec/test/search.aggregation/20_terms.yaml b/rest-api-spec/src/main/resources/rest-api-spec/test/search.aggregation/20_terms.yaml index 769865bd0e30f..b1b9baf8ba8aa 100644 --- a/rest-api-spec/src/main/resources/rest-api-spec/test/search.aggregation/20_terms.yaml +++ b/rest-api-spec/src/main/resources/rest-api-spec/test/search.aggregation/20_terms.yaml @@ -18,6 +18,9 @@ setup: type: long double: type: double + scaled_float: + type: scaled_float + scaling_factor: 100 date: type: date @@ -282,6 +285,52 @@ setup: - match: { aggregations.double_terms.buckets.1.doc_count: 1 } +--- +"Scaled float test": + - do: + index: + index: test_1 + type: test + id: 1 + body: { "scaled_float": 9.99 } + + - do: + index: + index: test_1 + type: test + id: 2 + body: { "scaled_float": 9.994 } + + - do: + index: + index: test_1 + type: test + id: 3 + body: { "scaled_float": 8.99 } + + - do: + indices.refresh: {} + + - do: + search: + body: { "size" : 0, "aggs" : { "scaled_float_terms" : { "terms" : { "field" : "scaled_float" } } } } + + - match: { hits.total: 3 } + + - length: { aggregations.scaled_float_terms.buckets: 2 } + + - match: { aggregations.scaled_float_terms.buckets.0.key: 9.99 } + + - is_false: aggregations.scaled_float_terms.buckets.0.key_as_string + + - match: { aggregations.scaled_float_terms.buckets.0.doc_count: 2 } + + - match: { aggregations.scaled_float_terms.buckets.1.key: 8.99 } + + - is_false: aggregations.scaled_float_terms.buckets.1.key_as_string + + - match: { aggregations.scaled_float_terms.buckets.1.doc_count: 1 } + --- "Date test": - do: From 17d27109fe69579d34c6638edc5fae8e02eaf716 Mon Sep 17 00:00:00 2001 From: Jim Ferenczi Date: Mon, 26 Dec 2016 16:35:02 +0100 Subject: [PATCH 2/3] cosmetic --- .../org/elasticsearch/index/mapper/ScaledFloatFieldMapper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/java/org/elasticsearch/index/mapper/ScaledFloatFieldMapper.java b/core/src/main/java/org/elasticsearch/index/mapper/ScaledFloatFieldMapper.java index bd6bafe1a8edb..8ac2fb01b0058 100644 --- a/core/src/main/java/org/elasticsearch/index/mapper/ScaledFloatFieldMapper.java +++ b/core/src/main/java/org/elasticsearch/index/mapper/ScaledFloatFieldMapper.java @@ -505,7 +505,7 @@ public Index index() { @Override public NumericType getNumericType() { /** - * {@link ScaledFloatLeafFieldData#getDoubleValues()} transforms the raw long values in `scaled float. + * {@link ScaledFloatLeafFieldData#getDoubleValues()} transforms the raw long values in `scaled` floats. */ return NumericType.FLOAT; } From d720d13fd4c9c947ed7f48a665bc9700759f853b Mon Sep 17 00:00:00 2001 From: Jim Ferenczi Date: Tue, 27 Dec 2016 09:21:42 +0100 Subject: [PATCH 3/3] ScaledFloat fielddata type should be DOUBLE and not FLOAT --- .../org/elasticsearch/index/mapper/ScaledFloatFieldMapper.java | 2 +- .../elasticsearch/index/mapper/ScaledFloatFieldTypeTests.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/org/elasticsearch/index/mapper/ScaledFloatFieldMapper.java b/core/src/main/java/org/elasticsearch/index/mapper/ScaledFloatFieldMapper.java index 8ac2fb01b0058..6cd69c0fc6b7f 100644 --- a/core/src/main/java/org/elasticsearch/index/mapper/ScaledFloatFieldMapper.java +++ b/core/src/main/java/org/elasticsearch/index/mapper/ScaledFloatFieldMapper.java @@ -507,7 +507,7 @@ public NumericType getNumericType() { /** * {@link ScaledFloatLeafFieldData#getDoubleValues()} transforms the raw long values in `scaled` floats. */ - return NumericType.FLOAT; + return NumericType.DOUBLE; } } diff --git a/core/src/test/java/org/elasticsearch/index/mapper/ScaledFloatFieldTypeTests.java b/core/src/test/java/org/elasticsearch/index/mapper/ScaledFloatFieldTypeTests.java index 9b10843d55ccb..1ba58fa2dedab 100644 --- a/core/src/test/java/org/elasticsearch/index/mapper/ScaledFloatFieldTypeTests.java +++ b/core/src/test/java/org/elasticsearch/index/mapper/ScaledFloatFieldTypeTests.java @@ -182,7 +182,7 @@ public void testFieldData() throws IOException { // single-valued ft.setName("scaled_float1"); IndexNumericFieldData fielddata = (IndexNumericFieldData) ft.fielddataBuilder().build(indexSettings, ft, null, null, null); - assertEquals(fielddata.getNumericType(), IndexNumericFieldData.NumericType.FLOAT); + assertEquals(fielddata.getNumericType(), IndexNumericFieldData.NumericType.DOUBLE); AtomicNumericFieldData leafFieldData = fielddata.load(reader.leaves().get(0)); SortedNumericDoubleValues values = leafFieldData.getDoubleValues(); values.setDocument(0);