From 4e4fae2c89c3c473b10bd0aa021a3c06a852a72a Mon Sep 17 00:00:00 2001 From: Michail Romaios Date: Mon, 18 Aug 2025 18:27:09 +0200 Subject: [PATCH 01/27] fix(semantic_text): index underlying dense_vector field in older indices --- .../vectors/DenseVectorFieldMapper.java | 5 +++++ .../mapper/SemanticTextFieldMapper.java | 19 +++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/server/src/main/java/org/elasticsearch/index/mapper/vectors/DenseVectorFieldMapper.java b/server/src/main/java/org/elasticsearch/index/mapper/vectors/DenseVectorFieldMapper.java index 4edd6475b890d..c300673b34fe5 100644 --- a/server/src/main/java/org/elasticsearch/index/mapper/vectors/DenseVectorFieldMapper.java +++ b/server/src/main/java/org/elasticsearch/index/mapper/vectors/DenseVectorFieldMapper.java @@ -406,6 +406,11 @@ protected Parameter[] getParameters() { return new Parameter[] { elementType, dims, indexed, similarity, indexOptions, meta }; } + public Builder indexed(boolean indexed) { + this.indexed.setValue(indexed); + return this; + } + public Builder similarity(VectorSimilarity vectorSimilarity) { similarity.setValue(vectorSimilarity); return this; diff --git a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapper.java b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapper.java index 11dd2c47463f1..63ab9c4fd5f12 100644 --- a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapper.java +++ b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapper.java @@ -25,6 +25,7 @@ import org.elasticsearch.cluster.metadata.InferenceFieldMetadata; import org.elasticsearch.common.Strings; import org.elasticsearch.common.bytes.BytesReference; +import org.elasticsearch.common.logging.DeprecationCategory; import org.elasticsearch.common.xcontent.XContentHelper; import org.elasticsearch.common.xcontent.XContentParserUtils; import org.elasticsearch.common.xcontent.support.XContentMapValues; @@ -101,8 +102,10 @@ import java.util.function.Function; import java.util.function.Supplier; +import static org.elasticsearch.index.IndexVersions.NEW_SPARSE_VECTOR; import static org.elasticsearch.index.IndexVersions.SEMANTIC_TEXT_DEFAULTS_TO_BBQ; import static org.elasticsearch.index.IndexVersions.SEMANTIC_TEXT_DEFAULTS_TO_BBQ_BACKPORT_8_X; +import static org.elasticsearch.index.mapper.vectors.DenseVectorFieldMapper.INDEXED_BY_DEFAULT_INDEX_VERSION; import static org.elasticsearch.inference.TaskType.SPARSE_EMBEDDING; import static org.elasticsearch.inference.TaskType.TEXT_EMBEDDING; import static org.elasticsearch.lucene.search.uhighlight.CustomUnifiedHighlighter.MULTIVAL_SEP_CHAR; @@ -127,6 +130,11 @@ */ public class SemanticTextFieldMapper extends FieldMapper implements InferenceFieldMapper { private static final Logger logger = LogManager.getLogger(SemanticTextFieldMapper.class); + // TODO: rewrite the warning and error messages below, just placeholders for now + static final String WARNING_MESSAGE_8X = "The [dense_vector] field type created by `semantic_text` uses default index settings which may not be optimal. " + + "Consider creating a new index ...."; + private static final String ERROR_MESSAGE_UNSUPPORTED_SPARSE_VECTOR = "The [sparse_vector] field type created by `semantic_text` is not supported on indices created on versions 8.0 to 8.10." + + "Try using a `dense_vector` model or upgrade your index to 8.11 or later. ..."; public static final NodeFeature SEMANTIC_TEXT_IN_OBJECT_FIELD_FIX = new NodeFeature("semantic_text.in_object_field_fix"); public static final NodeFeature SEMANTIC_TEXT_SINGLE_FIELD_UPDATE_FIX = new NodeFeature("semantic_text.single_field_update_fix"); public static final NodeFeature SEMANTIC_TEXT_DELETE_FIX = new NodeFeature("semantic_text.delete_fix"); @@ -1276,6 +1284,10 @@ private static void configureSparseVectorMapperBuilder( SparseVectorFieldMapper.Builder sparseVectorMapperBuilder, SemanticTextIndexOptions indexOptions ) { + if (indexVersionCreated.before(NEW_SPARSE_VECTOR)) { + throw new IllegalArgumentException(ERROR_MESSAGE_UNSUPPORTED_SPARSE_VECTOR); + } + if (indexOptions != null) { SparseVectorFieldMapper.SparseVectorIndexOptions sparseVectorIndexOptions = (SparseVectorFieldMapper.SparseVectorIndexOptions) indexOptions.indexOptions(); @@ -1296,6 +1308,13 @@ private static void configureDenseVectorMapperBuilder( MinimalServiceSettings modelSettings, SemanticTextIndexOptions indexOptions ) { + if (indexVersionCreated.onOrAfter(IndexVersions.V_8_0_0)){ + if (indexVersionCreated.before(INDEXED_BY_DEFAULT_INDEX_VERSION)) { + deprecationLogger.warn(DeprecationCategory.MAPPINGS, "semantic_text", WARNING_MESSAGE_8X); + } + denseVectorMapperBuilder.indexed(true); + } + SimilarityMeasure similarity = modelSettings.similarity(); if (similarity != null) { switch (similarity) { From e63a078c3740af940b99767e6b184568e3115526 Mon Sep 17 00:00:00 2001 From: Michail Romaios <84708293+mromaios@users.noreply.github.com> Date: Mon, 18 Aug 2025 18:30:43 +0200 Subject: [PATCH 02/27] Update docs/changelog/133080.yaml --- docs/changelog/133080.yaml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 docs/changelog/133080.yaml diff --git a/docs/changelog/133080.yaml b/docs/changelog/133080.yaml new file mode 100644 index 0000000000000..1c136b20ee10d --- /dev/null +++ b/docs/changelog/133080.yaml @@ -0,0 +1,5 @@ +pr: 133080 +summary: "Fix(semantic_text): index underlying `dense_vector` field in older indices" +area: Relevance +type: bug +issues: [] From a8fd79535a543aead38fe24a42807ce68bab068e Mon Sep 17 00:00:00 2001 From: elasticsearchmachine Date: Mon, 18 Aug 2025 16:37:38 +0000 Subject: [PATCH 03/27] [CI] Auto commit changes from spotless --- .../inference/mapper/SemanticTextFieldMapper.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapper.java b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapper.java index 63ab9c4fd5f12..b1efc8ae0346e 100644 --- a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapper.java +++ b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapper.java @@ -131,10 +131,12 @@ public class SemanticTextFieldMapper extends FieldMapper implements InferenceFieldMapper { private static final Logger logger = LogManager.getLogger(SemanticTextFieldMapper.class); // TODO: rewrite the warning and error messages below, just placeholders for now - static final String WARNING_MESSAGE_8X = "The [dense_vector] field type created by `semantic_text` uses default index settings which may not be optimal. " + - "Consider creating a new index ...."; - private static final String ERROR_MESSAGE_UNSUPPORTED_SPARSE_VECTOR = "The [sparse_vector] field type created by `semantic_text` is not supported on indices created on versions 8.0 to 8.10." + - "Try using a `dense_vector` model or upgrade your index to 8.11 or later. ..."; + static final String WARNING_MESSAGE_8X = + "The [dense_vector] field type created by `semantic_text` uses default index settings which may not be optimal. " + + "Consider creating a new index ...."; + private static final String ERROR_MESSAGE_UNSUPPORTED_SPARSE_VECTOR = + "The [sparse_vector] field type created by `semantic_text` is not supported on indices created on versions 8.0 to 8.10." + + "Try using a `dense_vector` model or upgrade your index to 8.11 or later. ..."; public static final NodeFeature SEMANTIC_TEXT_IN_OBJECT_FIELD_FIX = new NodeFeature("semantic_text.in_object_field_fix"); public static final NodeFeature SEMANTIC_TEXT_SINGLE_FIELD_UPDATE_FIX = new NodeFeature("semantic_text.single_field_update_fix"); public static final NodeFeature SEMANTIC_TEXT_DELETE_FIX = new NodeFeature("semantic_text.delete_fix"); @@ -1308,7 +1310,7 @@ private static void configureDenseVectorMapperBuilder( MinimalServiceSettings modelSettings, SemanticTextIndexOptions indexOptions ) { - if (indexVersionCreated.onOrAfter(IndexVersions.V_8_0_0)){ + if (indexVersionCreated.onOrAfter(IndexVersions.V_8_0_0)) { if (indexVersionCreated.before(INDEXED_BY_DEFAULT_INDEX_VERSION)) { deprecationLogger.warn(DeprecationCategory.MAPPINGS, "semantic_text", WARNING_MESSAGE_8X); } From a6eb38732c629fc7e7066833bd0059b5e9b5925a Mon Sep 17 00:00:00 2001 From: Michail Romaios Date: Tue, 19 Aug 2025 15:23:00 +0200 Subject: [PATCH 04/27] update msg, change versions, add ut --- .../mapper/SemanticTextFieldMapper.java | 19 +++--- .../mapper/SemanticTextFieldMapperTests.java | 58 +++++++++++++++++++ 2 files changed, 67 insertions(+), 10 deletions(-) diff --git a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapper.java b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapper.java index 63ab9c4fd5f12..42d7d19a32d6a 100644 --- a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapper.java +++ b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapper.java @@ -131,10 +131,11 @@ public class SemanticTextFieldMapper extends FieldMapper implements InferenceFieldMapper { private static final Logger logger = LogManager.getLogger(SemanticTextFieldMapper.class); // TODO: rewrite the warning and error messages below, just placeholders for now - static final String WARNING_MESSAGE_8X = "The [dense_vector] field type created by `semantic_text` uses default index settings which may not be optimal. " + - "Consider creating a new index ...."; - private static final String ERROR_MESSAGE_UNSUPPORTED_SPARSE_VECTOR = "The [sparse_vector] field type created by `semantic_text` is not supported on indices created on versions 8.0 to 8.10." + - "Try using a `dense_vector` model or upgrade your index to 8.11 or later. ..."; + public static final String WARNING_MESSAGE_8X = "Creating a `semantic_text` field on this index version may not include" + + " optimized default settings. Consider creating a new index for a better performance."; + public static final String ERROR_MESSAGE_UNSUPPORTED_SPARSE_VECTOR = "Creating a `semantic_text` field with `sparse_vector` models" + + " is not supported on indices created with versions 8.0-8.10." + + " Try using a `dense_vector` model or create a new index with version 8.11+."; public static final NodeFeature SEMANTIC_TEXT_IN_OBJECT_FIELD_FIX = new NodeFeature("semantic_text.in_object_field_fix"); public static final NodeFeature SEMANTIC_TEXT_SINGLE_FIELD_UPDATE_FIX = new NodeFeature("semantic_text.single_field_update_fix"); public static final NodeFeature SEMANTIC_TEXT_DELETE_FIX = new NodeFeature("semantic_text.delete_fix"); @@ -1308,12 +1309,10 @@ private static void configureDenseVectorMapperBuilder( MinimalServiceSettings modelSettings, SemanticTextIndexOptions indexOptions ) { - if (indexVersionCreated.onOrAfter(IndexVersions.V_8_0_0)){ - if (indexVersionCreated.before(INDEXED_BY_DEFAULT_INDEX_VERSION)) { - deprecationLogger.warn(DeprecationCategory.MAPPINGS, "semantic_text", WARNING_MESSAGE_8X); - } - denseVectorMapperBuilder.indexed(true); - } + if (indexVersionCreated.before(INDEXED_BY_DEFAULT_INDEX_VERSION)) { + deprecationLogger.warn(DeprecationCategory.MAPPINGS, "semantic_text", WARNING_MESSAGE_8X); + denseVectorMapperBuilder.indexed(true); + } SimilarityMeasure similarity = modelSettings.similarity(); if (similarity != null) { diff --git a/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapperTests.java b/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapperTests.java index 7ee178cbe2af6..8d6cf56788dca 100644 --- a/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapperTests.java +++ b/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapperTests.java @@ -9,6 +9,7 @@ import com.carrotsearch.randomizedtesting.annotations.ParametersFactory; +import org.apache.logging.log4j.Level; import org.apache.lucene.codecs.lucene99.Lucene99HnswVectorsFormat; import org.apache.lucene.document.FeatureField; import org.apache.lucene.index.FieldInfo; @@ -27,15 +28,23 @@ import org.apache.lucene.search.join.ScoreMode; import org.elasticsearch.action.admin.indices.mapping.put.PutMappingRequest; import org.elasticsearch.cluster.ClusterChangedEvent; +import org.elasticsearch.cluster.metadata.DataStreamGlobalRetention; +import org.elasticsearch.cluster.metadata.DataStreamLifecycle; import org.elasticsearch.cluster.metadata.IndexMetadata; import org.elasticsearch.common.CheckedBiConsumer; import org.elasticsearch.common.CheckedBiFunction; import org.elasticsearch.common.Strings; import org.elasticsearch.common.bytes.BytesReference; import org.elasticsearch.common.compress.CompressedXContent; +import org.elasticsearch.common.logging.DeprecatedMessage; +import org.elasticsearch.common.logging.DeprecationLogger; +import org.elasticsearch.common.logging.ESLogMessage; +import org.elasticsearch.common.logging.HeaderWarning; import org.elasticsearch.common.lucene.search.Queries; import org.elasticsearch.common.settings.Settings; +import org.elasticsearch.common.util.concurrent.ThreadContext; import org.elasticsearch.core.CheckedConsumer; +import org.elasticsearch.core.TimeValue; import org.elasticsearch.index.IndexVersion; import org.elasticsearch.index.IndexVersions; import org.elasticsearch.index.mapper.DocumentMapper; @@ -110,7 +119,9 @@ import static org.elasticsearch.xpack.inference.mapper.SemanticTextField.getEmbeddingsFieldName; import static org.elasticsearch.xpack.inference.mapper.SemanticTextFieldMapper.DEFAULT_ELSER_2_INFERENCE_ID; import static org.elasticsearch.xpack.inference.mapper.SemanticTextFieldMapper.DEFAULT_RESCORE_OVERSAMPLE; +import static org.elasticsearch.xpack.inference.mapper.SemanticTextFieldMapper.ERROR_MESSAGE_UNSUPPORTED_SPARSE_VECTOR; import static org.elasticsearch.xpack.inference.mapper.SemanticTextFieldMapper.INDEX_OPTIONS_FIELD; +import static org.elasticsearch.xpack.inference.mapper.SemanticTextFieldMapper.WARNING_MESSAGE_8X; import static org.elasticsearch.xpack.inference.mapper.SemanticTextFieldTests.generateRandomChunkingSettings; import static org.elasticsearch.xpack.inference.mapper.SemanticTextFieldTests.generateRandomChunkingSettingsOtherThan; import static org.elasticsearch.xpack.inference.mapper.SemanticTextFieldTests.randomSemanticText; @@ -414,6 +425,53 @@ public void testInvalidTaskTypes() { } } + @Override + protected String[] getParseMinimalWarnings() { + return new String[] { + WARNING_MESSAGE_8X + }; + } + + public void testOldIndexSemanticTextDenseVectorCreation() throws IOException { + final String fieldName = "field"; + final XContentBuilder fieldMapping = fieldMapping(b -> { + b.field("type", "semantic_text"); + b.field(INFERENCE_ID_FIELD, "test_inference_id"); + b.startObject("model_settings"); + b.field("task_type", "text_embedding"); + b.field("dimensions", 384); + b.field("similarity", "cosine"); + b.field("element_type", "float"); + b.endObject(); + }); + + MapperService mapperService = createMapperService( + fieldMapping, + true, + IndexVersions.V_8_0_0, + IndexVersionUtils.getPreviousVersion(IndexVersions.FIRST_DETACHED_INDEX_VERSION)); + assertParseMinimalWarnings(); + assertSemanticTextField(mapperService, fieldName, true, null, null); + } + + public void testOldIndexSemanticTextSparseVersionRaisesError() throws IOException { + final XContentBuilder fieldMapping = fieldMapping(b -> { + b.field("type", "semantic_text"); + b.field("inference_id", "another_inference_id"); + b.startObject("model_settings"); + b.field("task_type", "sparse_embedding"); + b.endObject(); + }); + + MapperParsingException exception = assertThrows(MapperParsingException.class, () -> createMapperService( + fieldMapping, + true, + IndexVersions.V_8_0_0, + IndexVersionUtils.getPreviousVersion(IndexVersions.NEW_SPARSE_VECTOR))); + assertTrue(exception.getMessage().contains(ERROR_MESSAGE_UNSUPPORTED_SPARSE_VECTOR)); + assertTrue(exception.getRootCause() instanceof IllegalArgumentException); + } + public void testMultiFieldsSupport() throws IOException { if (useLegacyFormat) { Exception e = expectThrows(MapperParsingException.class, () -> createMapperService(fieldMapping(b -> { From 587726c6ac0663d910391a99fe2a76eddf3c3527 Mon Sep 17 00:00:00 2001 From: Michail Romaios Date: Tue, 19 Aug 2025 15:26:56 +0200 Subject: [PATCH 05/27] indent --- .../xpack/inference/mapper/SemanticTextFieldMapper.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapper.java b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapper.java index 42d7d19a32d6a..3a4b447e47795 100644 --- a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapper.java +++ b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapper.java @@ -1309,10 +1309,10 @@ private static void configureDenseVectorMapperBuilder( MinimalServiceSettings modelSettings, SemanticTextIndexOptions indexOptions ) { - if (indexVersionCreated.before(INDEXED_BY_DEFAULT_INDEX_VERSION)) { - deprecationLogger.warn(DeprecationCategory.MAPPINGS, "semantic_text", WARNING_MESSAGE_8X); - denseVectorMapperBuilder.indexed(true); - } + if (indexVersionCreated.before(INDEXED_BY_DEFAULT_INDEX_VERSION)) { + deprecationLogger.warn(DeprecationCategory.MAPPINGS, "semantic_text", WARNING_MESSAGE_8X); + } + denseVectorMapperBuilder.indexed(true); SimilarityMeasure similarity = modelSettings.similarity(); if (similarity != null) { From 46d0f472a6aa71c75a02bfc986206d615e9203ee Mon Sep 17 00:00:00 2001 From: Michail Romaios Date: Tue, 19 Aug 2025 15:29:00 +0200 Subject: [PATCH 06/27] remove todo --- .../xpack/inference/mapper/SemanticTextFieldMapper.java | 1 - 1 file changed, 1 deletion(-) diff --git a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapper.java b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapper.java index 3a4b447e47795..f052e3ce0086d 100644 --- a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapper.java +++ b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapper.java @@ -130,7 +130,6 @@ */ public class SemanticTextFieldMapper extends FieldMapper implements InferenceFieldMapper { private static final Logger logger = LogManager.getLogger(SemanticTextFieldMapper.class); - // TODO: rewrite the warning and error messages below, just placeholders for now public static final String WARNING_MESSAGE_8X = "Creating a `semantic_text` field on this index version may not include" + " optimized default settings. Consider creating a new index for a better performance."; public static final String ERROR_MESSAGE_UNSUPPORTED_SPARSE_VECTOR = "Creating a `semantic_text` field with `sparse_vector` models" + From db059154b4e933016b39cf2a8f482735d6c146dd Mon Sep 17 00:00:00 2001 From: elasticsearchmachine Date: Tue, 19 Aug 2025 13:35:42 +0000 Subject: [PATCH 07/27] [CI] Auto commit changes from spotless --- .../mapper/SemanticTextFieldMapper.java | 10 +++---- .../mapper/SemanticTextFieldMapperTests.java | 30 ++++++++----------- 2 files changed, 17 insertions(+), 23 deletions(-) diff --git a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapper.java b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapper.java index f052e3ce0086d..4b68c86683b3f 100644 --- a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapper.java +++ b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapper.java @@ -130,11 +130,11 @@ */ public class SemanticTextFieldMapper extends FieldMapper implements InferenceFieldMapper { private static final Logger logger = LogManager.getLogger(SemanticTextFieldMapper.class); - public static final String WARNING_MESSAGE_8X = "Creating a `semantic_text` field on this index version may not include" + - " optimized default settings. Consider creating a new index for a better performance."; - public static final String ERROR_MESSAGE_UNSUPPORTED_SPARSE_VECTOR = "Creating a `semantic_text` field with `sparse_vector` models" + - " is not supported on indices created with versions 8.0-8.10." + - " Try using a `dense_vector` model or create a new index with version 8.11+."; + public static final String WARNING_MESSAGE_8X = "Creating a `semantic_text` field on this index version may not include" + + " optimized default settings. Consider creating a new index for a better performance."; + public static final String ERROR_MESSAGE_UNSUPPORTED_SPARSE_VECTOR = "Creating a `semantic_text` field with `sparse_vector` models" + + " is not supported on indices created with versions 8.0-8.10." + + " Try using a `dense_vector` model or create a new index with version 8.11+."; public static final NodeFeature SEMANTIC_TEXT_IN_OBJECT_FIELD_FIX = new NodeFeature("semantic_text.in_object_field_fix"); public static final NodeFeature SEMANTIC_TEXT_SINGLE_FIELD_UPDATE_FIX = new NodeFeature("semantic_text.single_field_update_fix"); public static final NodeFeature SEMANTIC_TEXT_DELETE_FIX = new NodeFeature("semantic_text.delete_fix"); diff --git a/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapperTests.java b/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapperTests.java index 8d6cf56788dca..b10c3b9d37d41 100644 --- a/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapperTests.java +++ b/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapperTests.java @@ -9,7 +9,6 @@ import com.carrotsearch.randomizedtesting.annotations.ParametersFactory; -import org.apache.logging.log4j.Level; import org.apache.lucene.codecs.lucene99.Lucene99HnswVectorsFormat; import org.apache.lucene.document.FeatureField; import org.apache.lucene.index.FieldInfo; @@ -28,23 +27,15 @@ import org.apache.lucene.search.join.ScoreMode; import org.elasticsearch.action.admin.indices.mapping.put.PutMappingRequest; import org.elasticsearch.cluster.ClusterChangedEvent; -import org.elasticsearch.cluster.metadata.DataStreamGlobalRetention; -import org.elasticsearch.cluster.metadata.DataStreamLifecycle; import org.elasticsearch.cluster.metadata.IndexMetadata; import org.elasticsearch.common.CheckedBiConsumer; import org.elasticsearch.common.CheckedBiFunction; import org.elasticsearch.common.Strings; import org.elasticsearch.common.bytes.BytesReference; import org.elasticsearch.common.compress.CompressedXContent; -import org.elasticsearch.common.logging.DeprecatedMessage; -import org.elasticsearch.common.logging.DeprecationLogger; -import org.elasticsearch.common.logging.ESLogMessage; -import org.elasticsearch.common.logging.HeaderWarning; import org.elasticsearch.common.lucene.search.Queries; import org.elasticsearch.common.settings.Settings; -import org.elasticsearch.common.util.concurrent.ThreadContext; import org.elasticsearch.core.CheckedConsumer; -import org.elasticsearch.core.TimeValue; import org.elasticsearch.index.IndexVersion; import org.elasticsearch.index.IndexVersions; import org.elasticsearch.index.mapper.DocumentMapper; @@ -427,9 +418,7 @@ public void testInvalidTaskTypes() { @Override protected String[] getParseMinimalWarnings() { - return new String[] { - WARNING_MESSAGE_8X - }; + return new String[] { WARNING_MESSAGE_8X }; } public void testOldIndexSemanticTextDenseVectorCreation() throws IOException { @@ -449,7 +438,8 @@ public void testOldIndexSemanticTextDenseVectorCreation() throws IOException { fieldMapping, true, IndexVersions.V_8_0_0, - IndexVersionUtils.getPreviousVersion(IndexVersions.FIRST_DETACHED_INDEX_VERSION)); + IndexVersionUtils.getPreviousVersion(IndexVersions.FIRST_DETACHED_INDEX_VERSION) + ); assertParseMinimalWarnings(); assertSemanticTextField(mapperService, fieldName, true, null, null); } @@ -463,11 +453,15 @@ public void testOldIndexSemanticTextSparseVersionRaisesError() throws IOExceptio b.endObject(); }); - MapperParsingException exception = assertThrows(MapperParsingException.class, () -> createMapperService( - fieldMapping, - true, - IndexVersions.V_8_0_0, - IndexVersionUtils.getPreviousVersion(IndexVersions.NEW_SPARSE_VECTOR))); + MapperParsingException exception = assertThrows( + MapperParsingException.class, + () -> createMapperService( + fieldMapping, + true, + IndexVersions.V_8_0_0, + IndexVersionUtils.getPreviousVersion(IndexVersions.NEW_SPARSE_VECTOR) + ) + ); assertTrue(exception.getMessage().contains(ERROR_MESSAGE_UNSUPPORTED_SPARSE_VECTOR)); assertTrue(exception.getRootCause() instanceof IllegalArgumentException); } From d8b18acd14ae8543ffe2917a01006520c7086a25 Mon Sep 17 00:00:00 2001 From: Michail Romaios Date: Tue, 19 Aug 2025 15:38:56 +0200 Subject: [PATCH 08/27] update msg --- .../xpack/inference/mapper/SemanticTextFieldMapper.java | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapper.java b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapper.java index 4b68c86683b3f..0c5a8e33f02e8 100644 --- a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapper.java +++ b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapper.java @@ -130,11 +130,10 @@ */ public class SemanticTextFieldMapper extends FieldMapper implements InferenceFieldMapper { private static final Logger logger = LogManager.getLogger(SemanticTextFieldMapper.class); - public static final String WARNING_MESSAGE_8X = "Creating a `semantic_text` field on this index version may not include" - + " optimized default settings. Consider creating a new index for a better performance."; - public static final String ERROR_MESSAGE_UNSUPPORTED_SPARSE_VECTOR = "Creating a `semantic_text` field with `sparse_vector` models" - + " is not supported on indices created with versions 8.0-8.10." - + " Try using a `dense_vector` model or create a new index with version 8.11+."; + public static final String WARNING_MESSAGE_8X = "Creating a `semantic_text` field on this index version may not include" + + " optimized default settings. Consider creating a new index for better performance."; + public static final String ERROR_MESSAGE_UNSUPPORTED_SPARSE_VECTOR = "Creating a `semantic_text` field with `sparse_vector` models" + + " is not supported on this index. Try using a `dense_vector` model or create a new index with version 8.11+."; public static final NodeFeature SEMANTIC_TEXT_IN_OBJECT_FIELD_FIX = new NodeFeature("semantic_text.in_object_field_fix"); public static final NodeFeature SEMANTIC_TEXT_SINGLE_FIELD_UPDATE_FIX = new NodeFeature("semantic_text.single_field_update_fix"); public static final NodeFeature SEMANTIC_TEXT_DELETE_FIX = new NodeFeature("semantic_text.delete_fix"); From 42fa2200d367b7de1815c85768ea48cfead32203 Mon Sep 17 00:00:00 2001 From: elasticsearchmachine Date: Tue, 19 Aug 2025 13:45:45 +0000 Subject: [PATCH 09/27] [CI] Auto commit changes from spotless --- .../xpack/inference/mapper/SemanticTextFieldMapper.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapper.java b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapper.java index 0c5a8e33f02e8..fd2ae7f47ff3e 100644 --- a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapper.java +++ b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapper.java @@ -130,10 +130,10 @@ */ public class SemanticTextFieldMapper extends FieldMapper implements InferenceFieldMapper { private static final Logger logger = LogManager.getLogger(SemanticTextFieldMapper.class); - public static final String WARNING_MESSAGE_8X = "Creating a `semantic_text` field on this index version may not include" + - " optimized default settings. Consider creating a new index for better performance."; - public static final String ERROR_MESSAGE_UNSUPPORTED_SPARSE_VECTOR = "Creating a `semantic_text` field with `sparse_vector` models" + - " is not supported on this index. Try using a `dense_vector` model or create a new index with version 8.11+."; + public static final String WARNING_MESSAGE_8X = "Creating a `semantic_text` field on this index version may not include" + + " optimized default settings. Consider creating a new index for better performance."; + public static final String ERROR_MESSAGE_UNSUPPORTED_SPARSE_VECTOR = "Creating a `semantic_text` field with `sparse_vector` models" + + " is not supported on this index. Try using a `dense_vector` model or create a new index with version 8.11+."; public static final NodeFeature SEMANTIC_TEXT_IN_OBJECT_FIELD_FIX = new NodeFeature("semantic_text.in_object_field_fix"); public static final NodeFeature SEMANTIC_TEXT_SINGLE_FIELD_UPDATE_FIX = new NodeFeature("semantic_text.single_field_update_fix"); public static final NodeFeature SEMANTIC_TEXT_DELETE_FIX = new NodeFeature("semantic_text.delete_fix"); From d572fd7dc61f4eb743a8f65cb036085671c414f7 Mon Sep 17 00:00:00 2001 From: Michail Romaios Date: Tue, 19 Aug 2025 16:09:21 +0200 Subject: [PATCH 10/27] add densevectormapper indexed ut --- .../vectors/DenseVectorFieldMapperTests.java | 35 +++++++++---------- 1 file changed, 16 insertions(+), 19 deletions(-) diff --git a/server/src/test/java/org/elasticsearch/index/mapper/vectors/DenseVectorFieldMapperTests.java b/server/src/test/java/org/elasticsearch/index/mapper/vectors/DenseVectorFieldMapperTests.java index 02ef40eeda0ca..aa075ed6f10ca 100644 --- a/server/src/test/java/org/elasticsearch/index/mapper/vectors/DenseVectorFieldMapperTests.java +++ b/server/src/test/java/org/elasticsearch/index/mapper/vectors/DenseVectorFieldMapperTests.java @@ -67,6 +67,7 @@ import static org.apache.lucene.tests.index.BaseKnnVectorsFormatTestCase.randomNormalizedVector; import static org.elasticsearch.index.codec.vectors.IVFVectorsFormat.DYNAMIC_NPROBE; import static org.elasticsearch.index.mapper.vectors.DenseVectorFieldMapper.DEFAULT_OVERSAMPLE; +import static org.elasticsearch.index.mapper.vectors.DenseVectorFieldMapper.INDEXED_BY_DEFAULT_INDEX_VERSION; import static org.elasticsearch.index.mapper.vectors.DenseVectorFieldMapper.IVF_FORMAT; import static org.hamcrest.Matchers.containsString; import static org.hamcrest.Matchers.equalTo; @@ -106,7 +107,7 @@ private void indexMapping(XContentBuilder b, IndexVersion indexVersion) throws I if (elementType != ElementType.FLOAT) { b.field("element_type", elementType.toString()); } - if (indexVersion.onOrAfter(DenseVectorFieldMapper.INDEXED_BY_DEFAULT_INDEX_VERSION) || indexed) { + if (indexVersion.onOrAfter(INDEXED_BY_DEFAULT_INDEX_VERSION) || indexed) { // Serialize if it's new index version, or it was not the default for previous indices b.field("index", indexed); } @@ -2206,27 +2207,23 @@ public void testDefaultParamsIndexByDefault() throws Exception { assertEquals(VectorSimilarity.COSINE, denseVectorFieldType.getSimilarity()); } - public void testValidateOnBuild() { + public void testSetIndexed() { final MapperBuilderContext context = MapperBuilderContext.root(false, false); - int dimensions = randomIntBetween(64, 1024); - // Build a dense vector field mapper with float element type, which will trigger int8 HNSW index options - DenseVectorFieldMapper mapper = new DenseVectorFieldMapper.Builder("test", IndexVersion.current(), false).elementType( - ElementType.FLOAT - ).dimensions(dimensions).build(context); + DenseVectorFieldMapper mapper = new DenseVectorFieldMapper.Builder("test", + IndexVersionUtils.getPreviousVersion(INDEXED_BY_DEFAULT_INDEX_VERSION), false) + .elementType(ElementType.FLOAT) + .build(context); + DenseVectorFieldType denseVectorFieldType = mapper.fieldType(); + assertFalse(denseVectorFieldType.isIndexed()); - // Change the element type to byte, which is incompatible with int8 HNSW index options - DenseVectorFieldMapper.Builder builder = (DenseVectorFieldMapper.Builder) mapper.getMergeBuilder(); - builder.elementType(ElementType.BYTE); - IllegalArgumentException e = expectThrows(IllegalArgumentException.class, () -> builder.build(context)); - assertThat( - e.getMessage(), - containsString( - dimensions >= DenseVectorFieldMapper.BBQ_DIMS_DEFAULT_THRESHOLD - ? "[element_type] cannot be [byte] when using index type [bbq_hnsw]" - : "[element_type] cannot be [byte] when using index type [int8_hnsw]" - ) - ); + mapper = new DenseVectorFieldMapper.Builder("test", + IndexVersionUtils.getPreviousVersion(INDEXED_BY_DEFAULT_INDEX_VERSION), false) + .elementType(ElementType.FLOAT) + .indexed(true).similarity(VectorSimilarity.COSINE).build(context); + + denseVectorFieldType = mapper.fieldType(); + assertTrue(denseVectorFieldType.isIndexed()); } private static float[] decodeDenseVector(IndexVersion indexVersion, BytesRef encodedVector) { From 9c48f54c1d18850efe879ab42695e4d3771fe9f2 Mon Sep 17 00:00:00 2001 From: elasticsearchmachine Date: Tue, 19 Aug 2025 14:16:50 +0000 Subject: [PATCH 11/27] [CI] Auto commit changes from spotless --- .../vectors/DenseVectorFieldMapperTests.java | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/server/src/test/java/org/elasticsearch/index/mapper/vectors/DenseVectorFieldMapperTests.java b/server/src/test/java/org/elasticsearch/index/mapper/vectors/DenseVectorFieldMapperTests.java index aa075ed6f10ca..ec582a0c95e6c 100644 --- a/server/src/test/java/org/elasticsearch/index/mapper/vectors/DenseVectorFieldMapperTests.java +++ b/server/src/test/java/org/elasticsearch/index/mapper/vectors/DenseVectorFieldMapperTests.java @@ -2210,17 +2210,19 @@ public void testDefaultParamsIndexByDefault() throws Exception { public void testSetIndexed() { final MapperBuilderContext context = MapperBuilderContext.root(false, false); - DenseVectorFieldMapper mapper = new DenseVectorFieldMapper.Builder("test", - IndexVersionUtils.getPreviousVersion(INDEXED_BY_DEFAULT_INDEX_VERSION), false) - .elementType(ElementType.FLOAT) - .build(context); + DenseVectorFieldMapper mapper = new DenseVectorFieldMapper.Builder( + "test", + IndexVersionUtils.getPreviousVersion(INDEXED_BY_DEFAULT_INDEX_VERSION), + false + ).elementType(ElementType.FLOAT).build(context); DenseVectorFieldType denseVectorFieldType = mapper.fieldType(); assertFalse(denseVectorFieldType.isIndexed()); - mapper = new DenseVectorFieldMapper.Builder("test", - IndexVersionUtils.getPreviousVersion(INDEXED_BY_DEFAULT_INDEX_VERSION), false) + mapper = new DenseVectorFieldMapper.Builder("test", IndexVersionUtils.getPreviousVersion(INDEXED_BY_DEFAULT_INDEX_VERSION), false) .elementType(ElementType.FLOAT) - .indexed(true).similarity(VectorSimilarity.COSINE).build(context); + .indexed(true) + .similarity(VectorSimilarity.COSINE) + .build(context); denseVectorFieldType = mapper.fieldType(); assertTrue(denseVectorFieldType.isIndexed()); From 7fa638614dc63477f7098d71a3d8fdd6a9a3b7ba Mon Sep 17 00:00:00 2001 From: Michail Romaios Date: Tue, 19 Aug 2025 16:21:25 +0200 Subject: [PATCH 12/27] fix ut --- .../inference/mapper/SemanticTextFieldMapperTests.java | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapperTests.java b/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapperTests.java index b10c3b9d37d41..3a2a093f79f1c 100644 --- a/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapperTests.java +++ b/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapperTests.java @@ -416,11 +416,6 @@ public void testInvalidTaskTypes() { } } - @Override - protected String[] getParseMinimalWarnings() { - return new String[] { WARNING_MESSAGE_8X }; - } - public void testOldIndexSemanticTextDenseVectorCreation() throws IOException { final String fieldName = "field"; final XContentBuilder fieldMapping = fieldMapping(b -> { @@ -440,6 +435,7 @@ public void testOldIndexSemanticTextDenseVectorCreation() throws IOException { IndexVersions.V_8_0_0, IndexVersionUtils.getPreviousVersion(IndexVersions.FIRST_DETACHED_INDEX_VERSION) ); + assertWarnings(WARNING_MESSAGE_8X); assertParseMinimalWarnings(); assertSemanticTextField(mapperService, fieldName, true, null, null); } From f0ab1e1b80375fadd715b6dd8766ca5edbba7ba4 Mon Sep 17 00:00:00 2001 From: Michail Romaios Date: Tue, 19 Aug 2025 16:30:40 +0200 Subject: [PATCH 13/27] undo accidental ut removal --- .../vectors/DenseVectorFieldMapperTests.java | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/server/src/test/java/org/elasticsearch/index/mapper/vectors/DenseVectorFieldMapperTests.java b/server/src/test/java/org/elasticsearch/index/mapper/vectors/DenseVectorFieldMapperTests.java index ec582a0c95e6c..b5ac125e08c8a 100644 --- a/server/src/test/java/org/elasticsearch/index/mapper/vectors/DenseVectorFieldMapperTests.java +++ b/server/src/test/java/org/elasticsearch/index/mapper/vectors/DenseVectorFieldMapperTests.java @@ -2207,6 +2207,29 @@ public void testDefaultParamsIndexByDefault() throws Exception { assertEquals(VectorSimilarity.COSINE, denseVectorFieldType.getSimilarity()); } + public void testValidateOnBuild() { + final MapperBuilderContext context = MapperBuilderContext.root(false, false); + + int dimensions = randomIntBetween(64, 1024); + // Build a dense vector field mapper with float element type, which will trigger int8 HNSW index options + DenseVectorFieldMapper mapper = new DenseVectorFieldMapper.Builder("test", IndexVersion.current(), false).elementType( + ElementType.FLOAT + ).dimensions(dimensions).build(context); + + // Change the element type to byte, which is incompatible with int8 HNSW index options + DenseVectorFieldMapper.Builder builder = (DenseVectorFieldMapper.Builder) mapper.getMergeBuilder(); + builder.elementType(ElementType.BYTE); + IllegalArgumentException e = expectThrows(IllegalArgumentException.class, () -> builder.build(context)); + assertThat( + e.getMessage(), + containsString( + dimensions >= DenseVectorFieldMapper.BBQ_DIMS_DEFAULT_THRESHOLD + ? "[element_type] cannot be [byte] when using index type [bbq_hnsw]" + : "[element_type] cannot be [byte] when using index type [int8_hnsw]" + ) + ); + } + public void testSetIndexed() { final MapperBuilderContext context = MapperBuilderContext.root(false, false); From d5219ed4570ddb4842cd6e2d6acd0c7893ad215a Mon Sep 17 00:00:00 2001 From: elasticsearchmachine Date: Tue, 19 Aug 2025 14:38:06 +0000 Subject: [PATCH 14/27] [CI] Auto commit changes from spotless --- .../index/mapper/vectors/DenseVectorFieldMapperTests.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/src/test/java/org/elasticsearch/index/mapper/vectors/DenseVectorFieldMapperTests.java b/server/src/test/java/org/elasticsearch/index/mapper/vectors/DenseVectorFieldMapperTests.java index b5ac125e08c8a..8fb11bcfbe9f5 100644 --- a/server/src/test/java/org/elasticsearch/index/mapper/vectors/DenseVectorFieldMapperTests.java +++ b/server/src/test/java/org/elasticsearch/index/mapper/vectors/DenseVectorFieldMapperTests.java @@ -2229,7 +2229,7 @@ public void testValidateOnBuild() { ) ); } - + public void testSetIndexed() { final MapperBuilderContext context = MapperBuilderContext.root(false, false); From 0d00ec5f4a425208091131e87be12ed9fd084fb4 Mon Sep 17 00:00:00 2001 From: Michail Romaios <84708293+mromaios@users.noreply.github.com> Date: Wed, 20 Aug 2025 14:28:47 +0200 Subject: [PATCH 15/27] Update docs/changelog/133080.yaml Co-authored-by: Kathleen DeRusso --- docs/changelog/133080.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/changelog/133080.yaml b/docs/changelog/133080.yaml index 1c136b20ee10d..41d11269f269a 100644 --- a/docs/changelog/133080.yaml +++ b/docs/changelog/133080.yaml @@ -1,5 +1,5 @@ pr: 133080 -summary: "Fix(semantic_text): index underlying `dense_vector` field in older indices" +summary: "Ensure underlying `dense_vector` fields are indexed in semantic_text fields in indices created prior to 8.11.0" area: Relevance type: bug issues: [] From 0eeee593b8eb089016a5bbc7b21c58e2507d0c46 Mon Sep 17 00:00:00 2001 From: Michail Romaios Date: Thu, 21 Aug 2025 15:13:09 +0200 Subject: [PATCH 16/27] remove sparse_vector exception change --- .../mapper/SemanticTextFieldMapper.java | 6 ----- .../mapper/SemanticTextFieldMapperTests.java | 22 ------------------- 2 files changed, 28 deletions(-) diff --git a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapper.java b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapper.java index fd2ae7f47ff3e..ba8c9ee12aec8 100644 --- a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapper.java +++ b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapper.java @@ -132,8 +132,6 @@ public class SemanticTextFieldMapper extends FieldMapper implements InferenceFie private static final Logger logger = LogManager.getLogger(SemanticTextFieldMapper.class); public static final String WARNING_MESSAGE_8X = "Creating a `semantic_text` field on this index version may not include" + " optimized default settings. Consider creating a new index for better performance."; - public static final String ERROR_MESSAGE_UNSUPPORTED_SPARSE_VECTOR = "Creating a `semantic_text` field with `sparse_vector` models" - + " is not supported on this index. Try using a `dense_vector` model or create a new index with version 8.11+."; public static final NodeFeature SEMANTIC_TEXT_IN_OBJECT_FIELD_FIX = new NodeFeature("semantic_text.in_object_field_fix"); public static final NodeFeature SEMANTIC_TEXT_SINGLE_FIELD_UPDATE_FIX = new NodeFeature("semantic_text.single_field_update_fix"); public static final NodeFeature SEMANTIC_TEXT_DELETE_FIX = new NodeFeature("semantic_text.delete_fix"); @@ -1283,10 +1281,6 @@ private static void configureSparseVectorMapperBuilder( SparseVectorFieldMapper.Builder sparseVectorMapperBuilder, SemanticTextIndexOptions indexOptions ) { - if (indexVersionCreated.before(NEW_SPARSE_VECTOR)) { - throw new IllegalArgumentException(ERROR_MESSAGE_UNSUPPORTED_SPARSE_VECTOR); - } - if (indexOptions != null) { SparseVectorFieldMapper.SparseVectorIndexOptions sparseVectorIndexOptions = (SparseVectorFieldMapper.SparseVectorIndexOptions) indexOptions.indexOptions(); diff --git a/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapperTests.java b/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapperTests.java index 3a2a093f79f1c..3850ca22a8196 100644 --- a/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapperTests.java +++ b/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapperTests.java @@ -440,28 +440,6 @@ public void testOldIndexSemanticTextDenseVectorCreation() throws IOException { assertSemanticTextField(mapperService, fieldName, true, null, null); } - public void testOldIndexSemanticTextSparseVersionRaisesError() throws IOException { - final XContentBuilder fieldMapping = fieldMapping(b -> { - b.field("type", "semantic_text"); - b.field("inference_id", "another_inference_id"); - b.startObject("model_settings"); - b.field("task_type", "sparse_embedding"); - b.endObject(); - }); - - MapperParsingException exception = assertThrows( - MapperParsingException.class, - () -> createMapperService( - fieldMapping, - true, - IndexVersions.V_8_0_0, - IndexVersionUtils.getPreviousVersion(IndexVersions.NEW_SPARSE_VECTOR) - ) - ); - assertTrue(exception.getMessage().contains(ERROR_MESSAGE_UNSUPPORTED_SPARSE_VECTOR)); - assertTrue(exception.getRootCause() instanceof IllegalArgumentException); - } - public void testMultiFieldsSupport() throws IOException { if (useLegacyFormat) { Exception e = expectThrows(MapperParsingException.class, () -> createMapperService(fieldMapping(b -> { From 02d1eab900feea3f760467696cda42b70b1e7c82 Mon Sep 17 00:00:00 2001 From: elasticsearchmachine Date: Thu, 21 Aug 2025 13:20:46 +0000 Subject: [PATCH 17/27] [CI] Auto commit changes from spotless --- .../xpack/inference/mapper/SemanticTextFieldMapper.java | 1 - .../xpack/inference/mapper/SemanticTextFieldMapperTests.java | 1 - 2 files changed, 2 deletions(-) diff --git a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapper.java b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapper.java index ba8c9ee12aec8..f68dca99631fc 100644 --- a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapper.java +++ b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapper.java @@ -102,7 +102,6 @@ import java.util.function.Function; import java.util.function.Supplier; -import static org.elasticsearch.index.IndexVersions.NEW_SPARSE_VECTOR; import static org.elasticsearch.index.IndexVersions.SEMANTIC_TEXT_DEFAULTS_TO_BBQ; import static org.elasticsearch.index.IndexVersions.SEMANTIC_TEXT_DEFAULTS_TO_BBQ_BACKPORT_8_X; import static org.elasticsearch.index.mapper.vectors.DenseVectorFieldMapper.INDEXED_BY_DEFAULT_INDEX_VERSION; diff --git a/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapperTests.java b/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapperTests.java index 3850ca22a8196..12c4253662de2 100644 --- a/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapperTests.java +++ b/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapperTests.java @@ -110,7 +110,6 @@ import static org.elasticsearch.xpack.inference.mapper.SemanticTextField.getEmbeddingsFieldName; import static org.elasticsearch.xpack.inference.mapper.SemanticTextFieldMapper.DEFAULT_ELSER_2_INFERENCE_ID; import static org.elasticsearch.xpack.inference.mapper.SemanticTextFieldMapper.DEFAULT_RESCORE_OVERSAMPLE; -import static org.elasticsearch.xpack.inference.mapper.SemanticTextFieldMapper.ERROR_MESSAGE_UNSUPPORTED_SPARSE_VECTOR; import static org.elasticsearch.xpack.inference.mapper.SemanticTextFieldMapper.INDEX_OPTIONS_FIELD; import static org.elasticsearch.xpack.inference.mapper.SemanticTextFieldMapper.WARNING_MESSAGE_8X; import static org.elasticsearch.xpack.inference.mapper.SemanticTextFieldTests.generateRandomChunkingSettings; From 99bbd07af829009836b1d0f49d1bbaad6a4888d1 Mon Sep 17 00:00:00 2001 From: Michail Romaios Date: Thu, 21 Aug 2025 17:18:02 +0200 Subject: [PATCH 18/27] reverting most of the stuff --- .../vectors/DenseVectorFieldMapper.java | 5 --- .../vectors/DenseVectorFieldMapperTests.java | 21 --------- .../mapper/SemanticTextFieldMapper.java | 11 ++--- .../mapper/SemanticTextFieldMapperTests.java | 43 ++++++++++++++----- 4 files changed, 37 insertions(+), 43 deletions(-) diff --git a/server/src/main/java/org/elasticsearch/index/mapper/vectors/DenseVectorFieldMapper.java b/server/src/main/java/org/elasticsearch/index/mapper/vectors/DenseVectorFieldMapper.java index db884261e2b9a..9c5d28a4942d3 100644 --- a/server/src/main/java/org/elasticsearch/index/mapper/vectors/DenseVectorFieldMapper.java +++ b/server/src/main/java/org/elasticsearch/index/mapper/vectors/DenseVectorFieldMapper.java @@ -406,11 +406,6 @@ protected Parameter[] getParameters() { return new Parameter[] { elementType, dims, indexed, similarity, indexOptions, meta }; } - public Builder indexed(boolean indexed) { - this.indexed.setValue(indexed); - return this; - } - public Builder similarity(VectorSimilarity vectorSimilarity) { similarity.setValue(vectorSimilarity); return this; diff --git a/server/src/test/java/org/elasticsearch/index/mapper/vectors/DenseVectorFieldMapperTests.java b/server/src/test/java/org/elasticsearch/index/mapper/vectors/DenseVectorFieldMapperTests.java index a7a432e57e7e6..00c9cb4e68ae8 100644 --- a/server/src/test/java/org/elasticsearch/index/mapper/vectors/DenseVectorFieldMapperTests.java +++ b/server/src/test/java/org/elasticsearch/index/mapper/vectors/DenseVectorFieldMapperTests.java @@ -2230,27 +2230,6 @@ public void testValidateOnBuild() { ); } - public void testSetIndexed() { - final MapperBuilderContext context = MapperBuilderContext.root(false, false); - - DenseVectorFieldMapper mapper = new DenseVectorFieldMapper.Builder( - "test", - IndexVersionUtils.getPreviousVersion(INDEXED_BY_DEFAULT_INDEX_VERSION), - false - ).elementType(ElementType.FLOAT).build(context); - DenseVectorFieldType denseVectorFieldType = mapper.fieldType(); - assertFalse(denseVectorFieldType.isIndexed()); - - mapper = new DenseVectorFieldMapper.Builder("test", IndexVersionUtils.getPreviousVersion(INDEXED_BY_DEFAULT_INDEX_VERSION), false) - .elementType(ElementType.FLOAT) - .indexed(true) - .similarity(VectorSimilarity.COSINE) - .build(context); - - denseVectorFieldType = mapper.fieldType(); - assertTrue(denseVectorFieldType.isIndexed()); - } - private static float[] decodeDenseVector(IndexVersion indexVersion, BytesRef encodedVector) { int dimCount = VectorEncoderDecoder.denseVectorLength(indexVersion, encodedVector); float[] vector = new float[dimCount]; diff --git a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapper.java b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapper.java index ba8c9ee12aec8..9b2aadccd6adc 100644 --- a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapper.java +++ b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapper.java @@ -130,8 +130,7 @@ */ public class SemanticTextFieldMapper extends FieldMapper implements InferenceFieldMapper { private static final Logger logger = LogManager.getLogger(SemanticTextFieldMapper.class); - public static final String WARNING_MESSAGE_8X = "Creating a `semantic_text` field on this index version may not include" - + " optimized default settings. Consider creating a new index for better performance."; + public static final String UNSUPPORTED_INDEX_MESSAGE = "[semantic_text] is available on indices created with 8.11+."; public static final NodeFeature SEMANTIC_TEXT_IN_OBJECT_FIELD_FIX = new NodeFeature("semantic_text.in_object_field_fix"); public static final NodeFeature SEMANTIC_TEXT_SINGLE_FIELD_UPDATE_FIX = new NodeFeature("semantic_text.single_field_update_fix"); public static final NodeFeature SEMANTIC_TEXT_DELETE_FIX = new NodeFeature("semantic_text.delete_fix"); @@ -170,6 +169,9 @@ public static final TypeParser parser(Supplier modelRegistry) { public static BiConsumer validateParserContext(String type) { return (n, c) -> { + if (c.getIndexSettings().getIndexVersionCreated().before(NEW_SPARSE_VECTOR)) { + throw new UnsupportedOperationException(UNSUPPORTED_INDEX_MESSAGE); + }; if (InferenceMetadataFieldsMapper.isEnabled(c.getIndexSettings().getSettings()) == false) { notInMultiFields(type).accept(n, c); } @@ -1301,11 +1303,6 @@ private static void configureDenseVectorMapperBuilder( MinimalServiceSettings modelSettings, SemanticTextIndexOptions indexOptions ) { - if (indexVersionCreated.before(INDEXED_BY_DEFAULT_INDEX_VERSION)) { - deprecationLogger.warn(DeprecationCategory.MAPPINGS, "semantic_text", WARNING_MESSAGE_8X); - } - denseVectorMapperBuilder.indexed(true); - SimilarityMeasure similarity = modelSettings.similarity(); if (similarity != null) { switch (similarity) { diff --git a/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapperTests.java b/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapperTests.java index 3850ca22a8196..5c314b52a7a4f 100644 --- a/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapperTests.java +++ b/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapperTests.java @@ -110,9 +110,8 @@ import static org.elasticsearch.xpack.inference.mapper.SemanticTextField.getEmbeddingsFieldName; import static org.elasticsearch.xpack.inference.mapper.SemanticTextFieldMapper.DEFAULT_ELSER_2_INFERENCE_ID; import static org.elasticsearch.xpack.inference.mapper.SemanticTextFieldMapper.DEFAULT_RESCORE_OVERSAMPLE; -import static org.elasticsearch.xpack.inference.mapper.SemanticTextFieldMapper.ERROR_MESSAGE_UNSUPPORTED_SPARSE_VECTOR; import static org.elasticsearch.xpack.inference.mapper.SemanticTextFieldMapper.INDEX_OPTIONS_FIELD; -import static org.elasticsearch.xpack.inference.mapper.SemanticTextFieldMapper.WARNING_MESSAGE_8X; +import static org.elasticsearch.xpack.inference.mapper.SemanticTextFieldMapper.UNSUPPORTED_INDEX_MESSAGE; import static org.elasticsearch.xpack.inference.mapper.SemanticTextFieldTests.generateRandomChunkingSettings; import static org.elasticsearch.xpack.inference.mapper.SemanticTextFieldTests.generateRandomChunkingSettingsOtherThan; import static org.elasticsearch.xpack.inference.mapper.SemanticTextFieldTests.randomSemanticText; @@ -428,16 +427,40 @@ public void testOldIndexSemanticTextDenseVectorCreation() throws IOException { b.field("element_type", "float"); b.endObject(); }); + assertOldIndexUnsupported(fieldMapping); + } - MapperService mapperService = createMapperService( - fieldMapping, - true, - IndexVersions.V_8_0_0, - IndexVersionUtils.getPreviousVersion(IndexVersions.FIRST_DETACHED_INDEX_VERSION) + public void testOldIndexSemanticTextMinimalMappingRaisesError() throws IOException { + final XContentBuilder fieldMapping = fieldMapping(this::minimalMapping); + assertOldIndexUnsupported(fieldMapping); + } + + public void testOldIndexSemanticTextSparseVersionRaisesError() throws IOException { + final XContentBuilder fieldMapping = fieldMapping(b -> { + b.field("type", "semantic_text"); + b.field("inference_id", "another_inference_id"); + b.startObject("model_settings"); + b.field("task_type", "sparse_embedding"); + b.endObject(); + }); + assertOldIndexUnsupported(fieldMapping); + } + + private void assertOldIndexUnsupported( + XContentBuilder fieldMapping + ) { + + MapperParsingException exception = assertThrows( + MapperParsingException.class, + () -> createMapperService( + fieldMapping, + true, + IndexVersions.V_8_0_0, + IndexVersionUtils.getPreviousVersion(IndexVersions.NEW_SPARSE_VECTOR) + ) ); - assertWarnings(WARNING_MESSAGE_8X); - assertParseMinimalWarnings(); - assertSemanticTextField(mapperService, fieldName, true, null, null); + assertTrue(exception.getMessage().contains(UNSUPPORTED_INDEX_MESSAGE)); + assertTrue(exception.getRootCause() instanceof UnsupportedOperationException); } public void testMultiFieldsSupport() throws IOException { From 001c491c17f0ebd224ce4acfd2b7cc1aaffbe9bf Mon Sep 17 00:00:00 2001 From: Michail Romaios Date: Thu, 21 Aug 2025 17:21:32 +0200 Subject: [PATCH 19/27] removing unused import, rename test --- .../xpack/inference/mapper/SemanticTextFieldMapper.java | 1 - .../xpack/inference/mapper/SemanticTextFieldMapperTests.java | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapper.java b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapper.java index 19f1180d9d3da..79d78ffe2b41e 100644 --- a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapper.java +++ b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapper.java @@ -104,7 +104,6 @@ import static org.elasticsearch.index.IndexVersions.SEMANTIC_TEXT_DEFAULTS_TO_BBQ; import static org.elasticsearch.index.IndexVersions.SEMANTIC_TEXT_DEFAULTS_TO_BBQ_BACKPORT_8_X; -import static org.elasticsearch.index.mapper.vectors.DenseVectorFieldMapper.INDEXED_BY_DEFAULT_INDEX_VERSION; import static org.elasticsearch.inference.TaskType.SPARSE_EMBEDDING; import static org.elasticsearch.inference.TaskType.TEXT_EMBEDDING; import static org.elasticsearch.lucene.search.uhighlight.CustomUnifiedHighlighter.MULTIVAL_SEP_CHAR; diff --git a/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapperTests.java b/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapperTests.java index 5c314b52a7a4f..20cc1825b4568 100644 --- a/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapperTests.java +++ b/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapperTests.java @@ -415,7 +415,7 @@ public void testInvalidTaskTypes() { } } - public void testOldIndexSemanticTextDenseVectorCreation() throws IOException { + public void testOldIndexSemanticTextDenseVectorRaisesError() throws IOException { final String fieldName = "field"; final XContentBuilder fieldMapping = fieldMapping(b -> { b.field("type", "semantic_text"); From db153f538e475024d6e9ce8c39e924ddd2494b7f Mon Sep 17 00:00:00 2001 From: elasticsearchmachine Date: Thu, 21 Aug 2025 15:30:21 +0000 Subject: [PATCH 20/27] [CI] Auto commit changes from spotless --- .../xpack/inference/mapper/SemanticTextFieldMapper.java | 4 ++-- .../xpack/inference/mapper/SemanticTextFieldMapperTests.java | 4 +--- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapper.java b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapper.java index 79d78ffe2b41e..9134006c5e00d 100644 --- a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapper.java +++ b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapper.java @@ -25,7 +25,6 @@ import org.elasticsearch.cluster.metadata.InferenceFieldMetadata; import org.elasticsearch.common.Strings; import org.elasticsearch.common.bytes.BytesReference; -import org.elasticsearch.common.logging.DeprecationCategory; import org.elasticsearch.common.xcontent.XContentHelper; import org.elasticsearch.common.xcontent.XContentParserUtils; import org.elasticsearch.common.xcontent.support.XContentMapValues; @@ -169,7 +168,8 @@ public static BiConsumer validateParserContext(Str return (n, c) -> { if (c.getIndexSettings().getIndexVersionCreated().before(NEW_SPARSE_VECTOR)) { throw new UnsupportedOperationException(UNSUPPORTED_INDEX_MESSAGE); - }; + } + ; if (InferenceMetadataFieldsMapper.isEnabled(c.getIndexSettings().getSettings()) == false) { notInMultiFields(type).accept(n, c); } diff --git a/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapperTests.java b/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapperTests.java index 20cc1825b4568..c885cfc5f489d 100644 --- a/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapperTests.java +++ b/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapperTests.java @@ -446,9 +446,7 @@ public void testOldIndexSemanticTextSparseVersionRaisesError() throws IOExceptio assertOldIndexUnsupported(fieldMapping); } - private void assertOldIndexUnsupported( - XContentBuilder fieldMapping - ) { + private void assertOldIndexUnsupported(XContentBuilder fieldMapping) { MapperParsingException exception = assertThrows( MapperParsingException.class, From f5944c6b0acd282b8c7ebcf6db0d04639094db71 Mon Sep 17 00:00:00 2001 From: Michail Romaios Date: Thu, 21 Aug 2025 17:32:43 +0200 Subject: [PATCH 21/27] syntax --- .../xpack/inference/mapper/SemanticTextFieldMapper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapper.java b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapper.java index 9134006c5e00d..bcb4e135ac479 100644 --- a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapper.java +++ b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapper.java @@ -101,6 +101,7 @@ import java.util.function.Function; import java.util.function.Supplier; +import static org.elasticsearch.index.IndexVersions.NEW_SPARSE_VECTOR; import static org.elasticsearch.index.IndexVersions.SEMANTIC_TEXT_DEFAULTS_TO_BBQ; import static org.elasticsearch.index.IndexVersions.SEMANTIC_TEXT_DEFAULTS_TO_BBQ_BACKPORT_8_X; import static org.elasticsearch.inference.TaskType.SPARSE_EMBEDDING; @@ -169,7 +170,6 @@ public static BiConsumer validateParserContext(Str if (c.getIndexSettings().getIndexVersionCreated().before(NEW_SPARSE_VECTOR)) { throw new UnsupportedOperationException(UNSUPPORTED_INDEX_MESSAGE); } - ; if (InferenceMetadataFieldsMapper.isEnabled(c.getIndexSettings().getSettings()) == false) { notInMultiFields(type).accept(n, c); } From 6bd255a409fe2bb37448770b7a19371afb78ba37 Mon Sep 17 00:00:00 2001 From: Michail Romaios Date: Thu, 21 Aug 2025 17:41:01 +0200 Subject: [PATCH 22/27] revisit changelog --- docs/changelog/133080.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/changelog/133080.yaml b/docs/changelog/133080.yaml index 41d11269f269a..b256a60e92a4f 100644 --- a/docs/changelog/133080.yaml +++ b/docs/changelog/133080.yaml @@ -1,5 +1,5 @@ pr: 133080 -summary: "Ensure underlying `dense_vector` fields are indexed in semantic_text fields in indices created prior to 8.11.0" +summary: "Add mapping exception when creating a `semantic_text` field in indices created prior to 8.11.0" area: Relevance type: bug issues: [] From 171a7de5a1ec47a70149931d47405e4340eb19cf Mon Sep 17 00:00:00 2001 From: Michail Romaios Date: Thu, 21 Aug 2025 17:43:07 +0200 Subject: [PATCH 23/27] revisit changelog --- docs/changelog/133080.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/changelog/133080.yaml b/docs/changelog/133080.yaml index b256a60e92a4f..a2b4c7ab18edd 100644 --- a/docs/changelog/133080.yaml +++ b/docs/changelog/133080.yaml @@ -1,5 +1,5 @@ pr: 133080 -summary: "Add mapping exception when creating a `semantic_text` field in indices created prior to 8.11.0" +summary: "Add mapper parsing exception when creating a `semantic_text` field in indices created prior to 8.11.0" area: Relevance type: bug issues: [] From 6ef1540aa0aec0f01c6ba0dcf677aa818a03f689 Mon Sep 17 00:00:00 2001 From: Michail Romaios <84708293+mromaios@users.noreply.github.com> Date: Fri, 22 Aug 2025 09:17:23 +0200 Subject: [PATCH 24/27] Update docs/changelog/133080.yaml Co-authored-by: Kathleen DeRusso --- docs/changelog/133080.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/changelog/133080.yaml b/docs/changelog/133080.yaml index a2b4c7ab18edd..ff99bc8e7255e 100644 --- a/docs/changelog/133080.yaml +++ b/docs/changelog/133080.yaml @@ -1,5 +1,6 @@ pr: 133080 -summary: "Add mapper parsing exception when creating a `semantic_text` field in indices created prior to 8.11.0" +summary: " +Disallow creating `semantic_text` fields in indices created prior to 8.11.0" area: Relevance type: bug issues: [] From 4267858fe44880a7d0717bc061ff5ceac1072ccd Mon Sep 17 00:00:00 2001 From: Michail Romaios <84708293+mromaios@users.noreply.github.com> Date: Fri, 22 Aug 2025 09:17:43 +0200 Subject: [PATCH 25/27] Update x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapper.java Co-authored-by: Kathleen DeRusso --- .../xpack/inference/mapper/SemanticTextFieldMapper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapper.java b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapper.java index bcb4e135ac479..50ca0e61eaeb8 100644 --- a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapper.java +++ b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapper.java @@ -128,7 +128,7 @@ */ public class SemanticTextFieldMapper extends FieldMapper implements InferenceFieldMapper { private static final Logger logger = LogManager.getLogger(SemanticTextFieldMapper.class); - public static final String UNSUPPORTED_INDEX_MESSAGE = "[semantic_text] is available on indices created with 8.11+."; + public static final String UNSUPPORTED_INDEX_MESSAGE = "[semantic_text] is available on indices created with 8.11 or higher."; public static final NodeFeature SEMANTIC_TEXT_IN_OBJECT_FIELD_FIX = new NodeFeature("semantic_text.in_object_field_fix"); public static final NodeFeature SEMANTIC_TEXT_SINGLE_FIELD_UPDATE_FIX = new NodeFeature("semantic_text.single_field_update_fix"); public static final NodeFeature SEMANTIC_TEXT_DELETE_FIX = new NodeFeature("semantic_text.delete_fix"); From bb815c1dca10ff413aa9fb90cab228226d761f61 Mon Sep 17 00:00:00 2001 From: Michail Romaios Date: Fri, 22 Aug 2025 09:29:27 +0200 Subject: [PATCH 26/27] changelog format --- docs/changelog/133080.yaml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/changelog/133080.yaml b/docs/changelog/133080.yaml index ff99bc8e7255e..78b6f579f5959 100644 --- a/docs/changelog/133080.yaml +++ b/docs/changelog/133080.yaml @@ -1,6 +1,5 @@ pr: 133080 -summary: " -Disallow creating `semantic_text` fields in indices created prior to 8.11.0" +summary: "Disallow creating `semantic_text` fields in indices created prior to 8.11.0" area: Relevance type: bug issues: [] From 166964f359c75331ff0c87d64ac74ac123dbd61f Mon Sep 17 00:00:00 2001 From: Michail Romaios Date: Fri, 22 Aug 2025 10:12:09 +0200 Subject: [PATCH 27/27] fix UT --- .../xpack/inference/mapper/SemanticTextFieldMapperTests.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapperTests.java b/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapperTests.java index 105f090ae9122..838e4576716ff 100644 --- a/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapperTests.java +++ b/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapperTests.java @@ -415,6 +415,11 @@ public void testInvalidTaskTypes() { } } + @Override + protected IndexVersion boostNotAllowedIndexVersion() { + return IndexVersions.NEW_SPARSE_VECTOR; + } + public void testOldIndexSemanticTextDenseVectorRaisesError() throws IOException { final String fieldName = "field"; final XContentBuilder fieldMapping = fieldMapping(b -> {