From 05f99dbfa32165d4622efdfa19f86a8683c14b54 Mon Sep 17 00:00:00 2001 From: Asim Mahmood Date: Fri, 1 Aug 2025 12:01:42 -0700 Subject: [PATCH 1/3] Add skip_list parameter to Numeric Field Mappers - Add skip_list parameter to numeric field mappers (default false) - Add mapping unit tests for skip_list functionality Signed-off-by: Asim Mahmood --- CHANGELOG.md | 1 + .../index/mapper/ScaledFloatFieldMapper.java | 9 +- .../index/mapper/TokenCountFieldMapper.java | 3 +- .../percolator/CandidateQueryTests.java | 3 +- .../index/mapper/size/SizeFieldMapper.java | 2 +- .../index/mapper/NumberFieldMapper.java | 141 +++++++++++++++--- .../plain/HalfFloatFielddataTests.java | 6 +- .../index/mapper/NumberFieldMapperTests.java | 20 +++ .../index/mapper/NumberFieldTypeTests.java | 4 +- .../FilterRewriteSubAggTests.java | 2 +- .../bucket/range/RangeAggregatorTests.java | 14 +- .../SignificantTermsAggregatorTests.java | 6 +- 12 files changed, 172 insertions(+), 39 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 81c78debe9afa..e2c060b6043f7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -44,6 +44,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), - Make GRPC transport extensible to allow plugins to register and expose their own GRPC services ([#18516](https://github.com/opensearch-project/OpenSearch/pull/18516)) - Added approximation support for range queries with now in date field ([#18511](https://github.com/opensearch-project/OpenSearch/pull/18511)) - Upgrade to protobufs 0.6.0 and clean up deprecated TermQueryProtoUtils code ([#18880](https://github.com/opensearch-project/OpenSearch/pull/18880)) +- Add skip_list parameter to Numeric Field Mappers (default false) ([#18889](https://github.com/opensearch-project/OpenSearch/pull/18889)) ### Changed - Update Subject interface to use CheckedRunnable ([#18570](https://github.com/opensearch-project/OpenSearch/issues/18570)) diff --git a/modules/mapper-extras/src/main/java/org/opensearch/index/mapper/ScaledFloatFieldMapper.java b/modules/mapper-extras/src/main/java/org/opensearch/index/mapper/ScaledFloatFieldMapper.java index cf091f8d03590..60c2cd15a757f 100644 --- a/modules/mapper-extras/src/main/java/org/opensearch/index/mapper/ScaledFloatFieldMapper.java +++ b/modules/mapper-extras/src/main/java/org/opensearch/index/mapper/ScaledFloatFieldMapper.java @@ -468,7 +468,14 @@ protected void parseCreateField(ParseContext context) throws IOException { } long scaledValue = Math.round(doubleValue * scalingFactor); - List fields = NumberFieldMapper.NumberType.LONG.createFields(fieldType().name(), scaledValue, indexed, hasDocValues, stored); + List fields = NumberFieldMapper.NumberType.LONG.createFields( + fieldType().name(), + scaledValue, + indexed, + hasDocValues, + false, + stored + ); context.doc().addAll(fields); if (hasDocValues == false && (indexed || stored)) { diff --git a/modules/mapper-extras/src/main/java/org/opensearch/index/mapper/TokenCountFieldMapper.java b/modules/mapper-extras/src/main/java/org/opensearch/index/mapper/TokenCountFieldMapper.java index 1851afcf0af85..4ae0dba0d7839 100644 --- a/modules/mapper-extras/src/main/java/org/opensearch/index/mapper/TokenCountFieldMapper.java +++ b/modules/mapper-extras/src/main/java/org/opensearch/index/mapper/TokenCountFieldMapper.java @@ -173,7 +173,8 @@ protected void parseCreateField(ParseContext context) throws IOException { tokenCount = countPositions(analyzer, name(), value, enablePositionIncrements); } - context.doc().addAll(NumberFieldMapper.NumberType.INTEGER.createFields(fieldType().name(), tokenCount, index, hasDocValues, store)); + context.doc() + .addAll(NumberFieldMapper.NumberType.INTEGER.createFields(fieldType().name(), tokenCount, index, hasDocValues, false, store)); } /** diff --git a/modules/percolator/src/test/java/org/opensearch/percolator/CandidateQueryTests.java b/modules/percolator/src/test/java/org/opensearch/percolator/CandidateQueryTests.java index 1dd626f22a7f7..1c7a22be1b8f8 100644 --- a/modules/percolator/src/test/java/org/opensearch/percolator/CandidateQueryTests.java +++ b/modules/percolator/src/test/java/org/opensearch/percolator/CandidateQueryTests.java @@ -321,7 +321,7 @@ public void testDuel() throws Exception { document.add(new TextField(entry.getKey(), value, Field.Store.NO)); } for (Integer intValue : intValues) { - List numberFields = NumberFieldMapper.NumberType.INTEGER.createFields("int_field", intValue, true, true, false); + List numberFields = NumberFieldMapper.NumberType.INTEGER.createFields("int_field", intValue, true, true, false, false); for (Field numberField : numberFields) { document.add(numberField); } @@ -449,6 +449,7 @@ public void testDuel2() throws Exception { between(range[0], range[1]), true, true, + false, false ); for (Field numberField : numberFields) { diff --git a/plugins/mapper-size/src/main/java/org/opensearch/index/mapper/size/SizeFieldMapper.java b/plugins/mapper-size/src/main/java/org/opensearch/index/mapper/size/SizeFieldMapper.java index a937b5358e366..dc966a3dfc50f 100644 --- a/plugins/mapper-size/src/main/java/org/opensearch/index/mapper/size/SizeFieldMapper.java +++ b/plugins/mapper-size/src/main/java/org/opensearch/index/mapper/size/SizeFieldMapper.java @@ -99,7 +99,7 @@ public void postParse(ParseContext context) throws IOException { return; } final int value = context.sourceToParse().source().length(); - context.doc().addAll(NumberType.INTEGER.createFields(name(), value, true, true, true)); + context.doc().addAll(NumberType.INTEGER.createFields(name(), value, true, true, false, true)); } @Override diff --git a/server/src/main/java/org/opensearch/index/mapper/NumberFieldMapper.java b/server/src/main/java/org/opensearch/index/mapper/NumberFieldMapper.java index 39f1407ecbeaa..92bc0ebe324b4 100644 --- a/server/src/main/java/org/opensearch/index/mapper/NumberFieldMapper.java +++ b/server/src/main/java/org/opensearch/index/mapper/NumberFieldMapper.java @@ -58,6 +58,7 @@ import org.opensearch.common.settings.Setting; import org.opensearch.common.settings.Setting.Property; import org.opensearch.common.settings.Settings; +import org.opensearch.common.xcontent.support.XContentMapValues; import org.opensearch.core.common.bytes.BytesArray; import org.opensearch.core.xcontent.XContentBuilder; import org.opensearch.core.xcontent.XContentParser; @@ -118,6 +119,13 @@ public static class Builder extends ParametrizedFieldMapper.Builder { private final Parameter indexed = Parameter.indexParam(m -> toType(m).indexed, true); private final Parameter hasDocValues = Parameter.docValuesParam(m -> toType(m).hasDocValues, true); private final Parameter stored = Parameter.storeParam(m -> toType(m).stored, false); + private final Parameter skiplist = new Parameter<>( + "skip_list", + false, + () -> false, + (n, c, o) -> XContentMapValues.nodeBooleanValue(o), + m -> toType(m).skiplist + ); private final Parameter> ignoreMalformed; private final Parameter> coerce; @@ -169,7 +177,7 @@ public Builder docValues(boolean hasDocValues) { @Override protected List> getParameters() { - return Arrays.asList(indexed, hasDocValues, stored, ignoreMalformed, coerce, nullValue, meta); + return Arrays.asList(indexed, hasDocValues, stored, skiplist, ignoreMalformed, coerce, nullValue, meta); } @Override @@ -405,13 +413,26 @@ public Query rangeQuery( } @Override - public List createFields(String name, Number value, boolean indexed, boolean docValued, boolean stored) { + public List createFields( + String name, + Number value, + boolean indexed, + boolean docValued, + boolean skiplist, + boolean stored + ) { List fields = new ArrayList<>(); if (indexed) { fields.add(new HalfFloatPoint(name, value.floatValue())); } if (docValued) { - fields.add(new SortedNumericDocValuesField(name, HalfFloatPoint.halfFloatToSortableShort(value.floatValue()))); + if (skiplist) { + fields.add( + SortedNumericDocValuesField.indexedField(name, HalfFloatPoint.halfFloatToSortableShort(value.floatValue())) + ); + } else { + fields.add(new SortedNumericDocValuesField(name, HalfFloatPoint.halfFloatToSortableShort(value.floatValue()))); + } } if (stored) { fields.add(new StoredField(name, value.floatValue())); @@ -581,13 +602,24 @@ public Query rangeQuery( } @Override - public List createFields(String name, Number value, boolean indexed, boolean docValued, boolean stored) { + public List createFields( + String name, + Number value, + boolean indexed, + boolean docValued, + boolean skiplist, + boolean stored + ) { List fields = new ArrayList<>(); if (indexed) { fields.add(new FloatPoint(name, value.floatValue())); } if (docValued) { - fields.add(new SortedNumericDocValuesField(name, NumericUtils.floatToSortableInt(value.floatValue()))); + if (skiplist) { + fields.add(SortedNumericDocValuesField.indexedField(name, NumericUtils.floatToSortableInt(value.floatValue()))); + } else { + fields.add(new SortedNumericDocValuesField(name, NumericUtils.floatToSortableInt(value.floatValue()))); + } } if (stored) { fields.add(new StoredField(name, value.floatValue())); @@ -733,13 +765,24 @@ public Query rangeQuery( } @Override - public List createFields(String name, Number value, boolean indexed, boolean docValued, boolean stored) { + public List createFields( + String name, + Number value, + boolean indexed, + boolean docValued, + boolean skiplist, + boolean stored + ) { List fields = new ArrayList<>(); if (indexed) { fields.add(new DoublePoint(name, value.doubleValue())); } if (docValued) { - fields.add(new SortedNumericDocValuesField(name, NumericUtils.doubleToSortableLong(value.doubleValue()))); + if (skiplist) { + fields.add(SortedNumericDocValuesField.indexedField(name, NumericUtils.doubleToSortableLong(value.doubleValue()))); + } else { + fields.add(new SortedNumericDocValuesField(name, NumericUtils.doubleToSortableLong(value.doubleValue()))); + } } if (stored) { fields.add(new StoredField(name, value.doubleValue())); @@ -828,8 +871,15 @@ public Query rangeQuery( } @Override - public List createFields(String name, Number value, boolean indexed, boolean docValued, boolean stored) { - return INTEGER.createFields(name, value, indexed, docValued, stored); + public List createFields( + String name, + Number value, + boolean indexed, + boolean docValued, + boolean skiplist, + boolean stored + ) { + return INTEGER.createFields(name, value, indexed, docValued, skiplist, stored); } @Override @@ -908,8 +958,15 @@ public Query rangeQuery( } @Override - public List createFields(String name, Number value, boolean indexed, boolean docValued, boolean stored) { - return INTEGER.createFields(name, value, indexed, docValued, stored); + public List createFields( + String name, + Number value, + boolean indexed, + boolean docValued, + boolean skiplist, + boolean stored + ) { + return INTEGER.createFields(name, value, indexed, docValued, skiplist, stored); } @Override @@ -1102,13 +1159,24 @@ public Query rangeQuery( } @Override - public List createFields(String name, Number value, boolean indexed, boolean docValued, boolean stored) { + public List createFields( + String name, + Number value, + boolean indexed, + boolean docValued, + boolean skiplist, + boolean stored + ) { List fields = new ArrayList<>(); if (indexed) { fields.add(new IntPoint(name, value.intValue())); } if (docValued) { - fields.add(new SortedNumericDocValuesField(name, value.intValue())); + if (skiplist) { + fields.add(SortedNumericDocValuesField.indexedField(name, value.intValue())); + } else { + fields.add(new SortedNumericDocValuesField(name, value.intValue())); + } } if (stored) { fields.add(new StoredField(name, value.intValue())); @@ -1244,13 +1312,24 @@ public Query rangeQuery( } @Override - public List createFields(String name, Number value, boolean indexed, boolean docValued, boolean stored) { + public List createFields( + String name, + Number value, + boolean indexed, + boolean docValued, + boolean skiplist, + boolean stored + ) { List fields = new ArrayList<>(); if (indexed) { fields.add(new LongPoint(name, value.longValue())); } if (docValued) { - fields.add(new SortedNumericDocValuesField(name, value.longValue())); + if (skiplist) { + fields.add(SortedNumericDocValuesField.indexedField(name, value.longValue())); + } else { + fields.add(new SortedNumericDocValuesField(name, value.longValue())); + } } if (stored) { fields.add(new StoredField(name, value.longValue())); @@ -1375,7 +1454,14 @@ public Query rangeQuery( } @Override - public List createFields(String name, Number value, boolean indexed, boolean docValued, boolean stored) { + public List createFields( + String name, + Number value, + boolean indexed, + boolean docValued, + boolean skiplist, + boolean stored + ) { List fields = new ArrayList<>(); final BigInteger v = Numbers.toUnsignedLongExact(value); @@ -1384,7 +1470,11 @@ public List createFields(String name, Number value, boolean indexed, bool } if (docValued) { - fields.add(new SortedNumericDocValuesField(name, v.longValue())); + if (skiplist) { + fields.add(SortedNumericDocValuesField.indexedField(name, v.longValue())); + } else { + fields.add(new SortedNumericDocValuesField(name, v.longValue())); + } } if (stored) { @@ -1453,7 +1543,14 @@ public abstract Query rangeQuery( public abstract Number parsePoint(byte[] value); - public abstract List createFields(String name, Number value, boolean indexed, boolean docValued, boolean stored); + public abstract List createFields( + String name, + Number value, + boolean indexed, + boolean docValued, + boolean skiplist, + boolean stored + ); abstract Number valueForSearch(String value); @@ -1866,6 +1963,7 @@ public Number parse(Object value) { private final boolean indexed; private final boolean hasDocValues; private final boolean stored; + private final boolean skiplist; private final Explicit ignoreMalformed; private final Explicit coerce; private final Number nullValue; @@ -1879,6 +1977,7 @@ private NumberFieldMapper(String simpleName, MappedFieldType mappedFieldType, Mu this.indexed = builder.indexed.getValue(); this.hasDocValues = builder.hasDocValues.getValue(); this.stored = builder.stored.getValue(); + this.skiplist = builder.skiplist.getValue(); this.ignoreMalformed = builder.ignoreMalformed.getValue(); this.coerce = builder.coerce.getValue(); this.nullValue = builder.nullValue.getValue(); @@ -1890,6 +1989,10 @@ boolean coerce() { return coerce.value(); } + boolean skiplist() { + return skiplist; + } + @Override protected Explicit ignoreMalformed() { return ignoreMalformed; @@ -1947,7 +2050,7 @@ protected void parseCreateField(ParseContext context) throws IOException { numericValue = fieldType().type.parse(value, coerce.value()); } - context.doc().addAll(fieldType().type.createFields(fieldType().name(), numericValue, indexed, hasDocValues, stored)); + context.doc().addAll(fieldType().type.createFields(fieldType().name(), numericValue, indexed, hasDocValues, false, stored)); if (hasDocValues == false && (stored || indexed)) { createFieldNamesField(context); diff --git a/server/src/test/java/org/opensearch/index/fielddata/plain/HalfFloatFielddataTests.java b/server/src/test/java/org/opensearch/index/fielddata/plain/HalfFloatFielddataTests.java index b5d936910b84c..c60dedd57bbcc 100644 --- a/server/src/test/java/org/opensearch/index/fielddata/plain/HalfFloatFielddataTests.java +++ b/server/src/test/java/org/opensearch/index/fielddata/plain/HalfFloatFielddataTests.java @@ -55,7 +55,7 @@ public void testSingleValued() throws IOException { // we need the default codec to check for singletons IndexWriter w = new IndexWriter(dir, new IndexWriterConfig(null).setCodec(TestUtil.getDefaultCodec())); Document doc = new Document(); - for (IndexableField f : NumberFieldMapper.NumberType.HALF_FLOAT.createFields("half_float", 3f, false, true, false)) { + for (IndexableField f : NumberFieldMapper.NumberType.HALF_FLOAT.createFields("half_float", 3f, false, true, false, false)) { doc.add(f); } w.addDocument(doc); @@ -74,10 +74,10 @@ public void testMultiValued() throws IOException { Directory dir = newDirectory(); IndexWriter w = new IndexWriter(dir, new IndexWriterConfig(null)); Document doc = new Document(); - for (IndexableField f : NumberFieldMapper.NumberType.HALF_FLOAT.createFields("half_float", 3f, false, true, false)) { + for (IndexableField f : NumberFieldMapper.NumberType.HALF_FLOAT.createFields("half_float", 3f, false, true, false, false)) { doc.add(f); } - for (IndexableField f : NumberFieldMapper.NumberType.HALF_FLOAT.createFields("half_float", 2f, false, true, false)) { + for (IndexableField f : NumberFieldMapper.NumberType.HALF_FLOAT.createFields("half_float", 2f, false, true, false, false)) { doc.add(f); } w.addDocument(doc); diff --git a/server/src/test/java/org/opensearch/index/mapper/NumberFieldMapperTests.java b/server/src/test/java/org/opensearch/index/mapper/NumberFieldMapperTests.java index 92cc42cec96fb..78eba099f94b0 100644 --- a/server/src/test/java/org/opensearch/index/mapper/NumberFieldMapperTests.java +++ b/server/src/test/java/org/opensearch/index/mapper/NumberFieldMapperTests.java @@ -36,6 +36,7 @@ import org.apache.lucene.document.SortedNumericDocValuesField; import org.apache.lucene.document.StoredField; import org.apache.lucene.index.DirectoryReader; +import org.apache.lucene.index.DocValuesSkipIndexType; import org.apache.lucene.index.DocValuesType; import org.apache.lucene.index.IndexWriter; import org.apache.lucene.index.IndexWriterConfig; @@ -121,7 +122,9 @@ public void doTestDefaults(String type) throws Exception { assertEquals(123, pointField.numericValue().doubleValue(), 0d); IndexableField dvField = fields[1]; assertEquals(DocValuesType.SORTED_NUMERIC, dvField.fieldType().docValuesType()); + assertEquals(DocValuesSkipIndexType.NONE, dvField.fieldType().docValuesSkipIndexType()); assertFalse(dvField.fieldType().stored()); + } @Override @@ -133,6 +136,7 @@ public void doTestNotIndexed(String type) throws Exception { assertEquals(1, fields.length); IndexableField dvField = fields[0]; assertEquals(DocValuesType.SORTED_NUMERIC, dvField.fieldType().docValuesType()); + assertEquals(DocValuesSkipIndexType.NONE, dvField.fieldType().docValuesSkipIndexType()); } @Override @@ -159,6 +163,7 @@ public void doTestStore(String type) throws Exception { assertEquals(123, pointField.numericValue().doubleValue(), 0d); IndexableField dvField = fields[1]; assertEquals(DocValuesType.SORTED_NUMERIC, dvField.fieldType().docValuesType()); + assertEquals(DocValuesSkipIndexType.NONE, dvField.fieldType().docValuesSkipIndexType()); IndexableField storedField = fields[2]; assertTrue(storedField.fieldType().stored()); // The 'unsigned_long' is stored as a string @@ -472,6 +477,21 @@ public void testUnsignedLongFieldDerivedValueFetchingMultiValue_DocValues() thro } } + public void testSkipList() throws IOException { + for (String type : types()) { + DocumentMapper mapper = createDocumentMapper( + fieldMapping(b -> b.field("type", type).field("index", false).field("skip_list", true)) + ); + ParsedDocument doc = mapper.parse(source(b -> b.field("field", 123))); + + IndexableField[] fields = doc.rootDoc().getFields("field"); + assertEquals(1, fields.length); + IndexableField dvField = fields[0]; + assertEquals(DocValuesType.SORTED_NUMERIC, dvField.fieldType().docValuesType()); + assertEquals(DocValuesSkipIndexType.RANGE, dvField.fieldType().docValuesSkipIndexType()); + } + } + private NumberFieldMapper getMapper(NumberType numberType, FieldMapper.CopyTo copyTo, boolean hasDocValues, boolean isStored) throws IOException { MapperService mapperService = createMapperService( diff --git a/server/src/test/java/org/opensearch/index/mapper/NumberFieldTypeTests.java b/server/src/test/java/org/opensearch/index/mapper/NumberFieldTypeTests.java index 5fc771a422c01..8d794220ea6c5 100644 --- a/server/src/test/java/org/opensearch/index/mapper/NumberFieldTypeTests.java +++ b/server/src/test/java/org/opensearch/index/mapper/NumberFieldTypeTests.java @@ -687,7 +687,7 @@ public void doTestDocValueRangeQueries(NumberType type, Supplier valueSu IndexWriter w = new IndexWriter(dir, newIndexWriterConfig()); final int numDocs = TestUtil.nextInt(random(), 100, 500); for (int i = 0; i < numDocs; ++i) { - w.addDocument(type.createFields("foo", valueSupplier.get(), true, true, false)); + w.addDocument(type.createFields("foo", valueSupplier.get(), true, true, false, false)); } DirectoryReader reader = DirectoryReader.open(w); IndexSearcher searcher = newSearcher(reader); @@ -752,7 +752,7 @@ public void doTestIndexSortRangeQueries(NumberType type, Supplier valueS IndexWriter w = new IndexWriter(dir, writerConfig); final int numDocs = TestUtil.nextInt(random(), 100, 500); for (int i = 0; i < numDocs; ++i) { - w.addDocument(type.createFields("field", valueSupplier.get(), true, true, false)); + w.addDocument(type.createFields("field", valueSupplier.get(), true, true, false, false)); } // Ensure that the optimized index sort query gives the same results as a points query. diff --git a/server/src/test/java/org/opensearch/search/aggregations/bucket/filterrewrite/FilterRewriteSubAggTests.java b/server/src/test/java/org/opensearch/search/aggregations/bucket/filterrewrite/FilterRewriteSubAggTests.java index 1187eeac34d84..4221a2837387d 100644 --- a/server/src/test/java/org/opensearch/search/aggregations/bucket/filterrewrite/FilterRewriteSubAggTests.java +++ b/server/src/test/java/org/opensearch/search/aggregations/bucket/filterrewrite/FilterRewriteSubAggTests.java @@ -422,7 +422,7 @@ public TestDoc(long metric, Instant timestamp) { public ParseContext.Document toDocument() { ParseContext.Document doc = new ParseContext.Document(); - List fieldList = numberType.createFields(longFieldName, metric, true, true, false); + List fieldList = numberType.createFields(longFieldName, metric, true, true, false, false); for (Field fld : fieldList) doc.add(fld); doc.add(new LongField(dateFieldName, dateFieldType.parse(timestamp.toString()), Field.Store.NO)); diff --git a/server/src/test/java/org/opensearch/search/aggregations/bucket/range/RangeAggregatorTests.java b/server/src/test/java/org/opensearch/search/aggregations/bucket/range/RangeAggregatorTests.java index 630326967aae1..5eb6a5c140634 100644 --- a/server/src/test/java/org/opensearch/search/aggregations/bucket/range/RangeAggregatorTests.java +++ b/server/src/test/java/org/opensearch/search/aggregations/bucket/range/RangeAggregatorTests.java @@ -542,9 +542,9 @@ public void testTopLevelFilterTermQuery() throws IOException { for (int i = 0; i < 3; i++) docList.add(new Document()); - docList.get(0).addAll(numType.createFields(numType.typeName(), 3.0, true, true, false)); - docList.get(1).addAll(numType.createFields(numType.typeName(), 11.0, true, true, false)); - docList.get(2).addAll(numType.createFields(numType.typeName(), 15.0, true, true, false)); + docList.get(0).addAll(numType.createFields(numType.typeName(), 3.0, true, true, false, false)); + docList.get(1).addAll(numType.createFields(numType.typeName(), 11.0, true, true, false, false)); + docList.get(2).addAll(numType.createFields(numType.typeName(), 15.0, true, true, false, false)); docList.get(0).add(new KeywordField(KEYWORD_FIELD_NAME, "route1", Field.Store.NO)); docList.get(1).add(new KeywordField(KEYWORD_FIELD_NAME, "route1", Field.Store.NO)); docList.get(2).add(new KeywordField(KEYWORD_FIELD_NAME, "route2", Field.Store.NO)); @@ -577,9 +577,9 @@ public void testTopLevelEffectiveMatchAll() throws IOException { for (int i = 0; i < 3; i++) docList.add(new Document()); - docList.get(0).addAll(numType.createFields(numType.typeName(), 3.0, true, true, false)); - docList.get(1).addAll(numType.createFields(numType.typeName(), 11.0, true, true, false)); - docList.get(2).addAll(numType.createFields(numType.typeName(), 15.0, true, true, false)); + docList.get(0).addAll(numType.createFields(numType.typeName(), 3.0, true, true, false, false)); + docList.get(1).addAll(numType.createFields(numType.typeName(), 11.0, true, true, false, false)); + docList.get(2).addAll(numType.createFields(numType.typeName(), 15.0, true, true, false, false)); docList.get(0).add(new KeywordField(KEYWORD_FIELD_NAME, "route1", Field.Store.NO)); docList.get(1).add(new KeywordField(KEYWORD_FIELD_NAME, "route1", Field.Store.NO)); docList.get(2).add(new KeywordField(KEYWORD_FIELD_NAME, "route1", Field.Store.NO)); @@ -662,7 +662,7 @@ private void testRewriteOptimizationCase( for (Number dataPoint : dataPoints) { Document doc = new Document(); - List fieldList = numberType.createFields(fieldName, dataPoint, true, true, false); + List fieldList = numberType.createFields(fieldName, dataPoint, true, true, false, false); for (Field fld : fieldList) doc.add(fld); docs.add(doc); diff --git a/server/src/test/java/org/opensearch/search/aggregations/bucket/terms/SignificantTermsAggregatorTests.java b/server/src/test/java/org/opensearch/search/aggregations/bucket/terms/SignificantTermsAggregatorTests.java index a106ef47dc469..fb1a52b789011 100644 --- a/server/src/test/java/org/opensearch/search/aggregations/bucket/terms/SignificantTermsAggregatorTests.java +++ b/server/src/test/java/org/opensearch/search/aggregations/bucket/terms/SignificantTermsAggregatorTests.java @@ -221,13 +221,13 @@ public void testNumericSignificance() throws IOException { for (int i = 0; i < 10; i++) { Document doc = new Document(); if (i % 2 == 0) { - addFields(doc, NumberType.LONG.createFields("long_field", ODD_VALUE, true, true, false)); + addFields(doc, NumberType.LONG.createFields("long_field", ODD_VALUE, true, true, false, false)); doc.add(new Field("text", "odd", TextFieldMapper.Defaults.FIELD_TYPE)); } else { - addFields(doc, NumberType.LONG.createFields("long_field", EVEN_VALUE, true, true, false)); + addFields(doc, NumberType.LONG.createFields("long_field", EVEN_VALUE, true, true, false, false)); doc.add(new Field("text", "even", TextFieldMapper.Defaults.FIELD_TYPE)); } - addFields(doc, NumberType.LONG.createFields("long_field", COMMON_VALUE, true, true, false)); + addFields(doc, NumberType.LONG.createFields("long_field", COMMON_VALUE, true, true, false, false)); w.addDocument(doc); } From ca817885b66535886291540fe22209c5806a47c4 Mon Sep 17 00:00:00 2001 From: Asim Mahmood Date: Fri, 1 Aug 2025 16:20:05 -0700 Subject: [PATCH 2/3] Fix test Signed-off-by: Asim Mahmood --- .../java/org/opensearch/index/mapper/NumberFieldMapper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/src/main/java/org/opensearch/index/mapper/NumberFieldMapper.java b/server/src/main/java/org/opensearch/index/mapper/NumberFieldMapper.java index 92bc0ebe324b4..14ae07096bf8e 100644 --- a/server/src/main/java/org/opensearch/index/mapper/NumberFieldMapper.java +++ b/server/src/main/java/org/opensearch/index/mapper/NumberFieldMapper.java @@ -2050,7 +2050,7 @@ protected void parseCreateField(ParseContext context) throws IOException { numericValue = fieldType().type.parse(value, coerce.value()); } - context.doc().addAll(fieldType().type.createFields(fieldType().name(), numericValue, indexed, hasDocValues, false, stored)); + context.doc().addAll(fieldType().type.createFields(fieldType().name(), numericValue, indexed, hasDocValues, skiplist, stored)); if (hasDocValues == false && (stored || indexed)) { createFieldNamesField(context); From 7be8e959f42ac3d25ab0ee2732e332eb389cf420 Mon Sep 17 00:00:00 2001 From: Asim Mahmood Date: Tue, 5 Aug 2025 10:06:03 -0700 Subject: [PATCH 3/3] Remove unused code Signed-off-by: Asim Mahmood --- .../java/org/opensearch/index/mapper/NumberFieldMapper.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/server/src/main/java/org/opensearch/index/mapper/NumberFieldMapper.java b/server/src/main/java/org/opensearch/index/mapper/NumberFieldMapper.java index 14ae07096bf8e..fa1f7eb390510 100644 --- a/server/src/main/java/org/opensearch/index/mapper/NumberFieldMapper.java +++ b/server/src/main/java/org/opensearch/index/mapper/NumberFieldMapper.java @@ -1989,10 +1989,6 @@ boolean coerce() { return coerce.value(); } - boolean skiplist() { - return skiplist; - } - @Override protected Explicit ignoreMalformed() { return ignoreMalformed;