Skip to content

Commit a702ddc

Browse files
committed
In NumberFieldType equals and hashCode, make sure that NumberType is taken into account. (elastic#31514)
(cherry picked from commit 3b7225e)
1 parent 9a1e764 commit a702ddc

File tree

2 files changed

+29
-4
lines changed

2 files changed

+29
-4
lines changed

server/src/main/java/org/elasticsearch/index/mapper/NumberFieldMapper.java

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -847,7 +847,7 @@ private static double objectToDouble(Object value) {
847847

848848
public static final class NumberFieldType extends SimpleMappedFieldType {
849849

850-
NumberType type;
850+
private final NumberType type;
851851

852852
public NumberFieldType(NumberType type) {
853853
super();
@@ -857,7 +857,7 @@ public NumberFieldType(NumberType type) {
857857
setOmitNorms(true);
858858
}
859859

860-
NumberFieldType(NumberFieldType other) {
860+
private NumberFieldType(NumberFieldType other) {
861861
super(other);
862862
this.type = other.type;
863863
}
@@ -937,6 +937,20 @@ public DocValueFormat docValueFormat(String format, DateTimeZone timeZone) {
937937
return new DocValueFormat.Decimal(format);
938938
}
939939
}
940+
941+
@Override
942+
public boolean equals(Object o) {
943+
if (super.equals(o) == false) {
944+
return false;
945+
}
946+
NumberFieldType that = (NumberFieldType) o;
947+
return type == that.type;
948+
}
949+
950+
@Override
951+
public int hashCode() {
952+
return Objects.hash(super.hashCode(), type);
953+
}
940954
}
941955

942956
private Boolean includeInAll;

server/src/test/java/org/elasticsearch/index/mapper/NumberFieldTypeTests.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
package org.elasticsearch.index.mapper;
2121

2222
import com.carrotsearch.randomizedtesting.generators.RandomPicks;
23-
2423
import org.apache.lucene.document.Document;
2524
import org.apache.lucene.document.FloatPoint;
2625
import org.apache.lucene.document.HalfFloatPoint;
@@ -37,10 +36,11 @@
3736
import org.apache.lucene.search.Query;
3837
import org.apache.lucene.store.Directory;
3938
import org.apache.lucene.util.BytesRef;
40-
import org.elasticsearch.core.internal.io.IOUtils;
4139
import org.apache.lucene.util.TestUtil;
40+
import org.elasticsearch.core.internal.io.IOUtils;
4241
import org.elasticsearch.index.mapper.MappedFieldType.Relation;
4342
import org.elasticsearch.index.mapper.NumberFieldMapper.NumberType;
43+
import org.elasticsearch.index.mapper.NumberFieldMapper.NumberFieldType;
4444
import org.hamcrest.Matchers;
4545
import org.junit.Before;
4646

@@ -68,6 +68,17 @@ protected MappedFieldType createDefaultFieldType() {
6868
return new NumberFieldMapper.NumberFieldType(type);
6969
}
7070

71+
public void testEqualsWithDifferentNumberTypes() {
72+
NumberType type = randomFrom(NumberType.values());
73+
NumberFieldType fieldType = new NumberFieldType(type);
74+
75+
NumberType otherType = randomValueOtherThan(type,
76+
() -> randomFrom(NumberType.values()));
77+
NumberFieldType otherFieldType = new NumberFieldType(otherType);
78+
79+
assertNotEquals(fieldType, otherFieldType);
80+
}
81+
7182
public void testIsFieldWithinQuery() throws IOException {
7283
MappedFieldType ft = createDefaultFieldType();
7384
// current impl ignores args and should always return INTERSECTS

0 commit comments

Comments
 (0)