From 4e02782658861d43a06fee8673402c920933176a Mon Sep 17 00:00:00 2001 From: Mike Pellegrini Date: Mon, 3 Feb 2025 13:39:27 -0500 Subject: [PATCH 1/6] Use function to determine default value for index.mapping.semantic_text.use_legacy_format --- .../index/mapper/InferenceMetadataFieldsMapper.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/server/src/main/java/org/elasticsearch/index/mapper/InferenceMetadataFieldsMapper.java b/server/src/main/java/org/elasticsearch/index/mapper/InferenceMetadataFieldsMapper.java index be4237fec3303..0f6f0e4bdebba 100644 --- a/server/src/main/java/org/elasticsearch/index/mapper/InferenceMetadataFieldsMapper.java +++ b/server/src/main/java/org/elasticsearch/index/mapper/InferenceMetadataFieldsMapper.java @@ -15,6 +15,7 @@ import org.elasticsearch.cluster.metadata.IndexMetadata; import org.elasticsearch.common.settings.Setting; import org.elasticsearch.common.settings.Settings; +import org.elasticsearch.index.IndexVersion; import org.elasticsearch.index.IndexVersions; import org.elasticsearch.index.query.SearchExecutionContext; @@ -35,7 +36,12 @@ public abstract class InferenceMetadataFieldsMapper extends MetadataFieldMapper */ public static final Setting USE_LEGACY_SEMANTIC_TEXT_FORMAT = Setting.boolSetting( "index.mapping.semantic_text.use_legacy_format", - false, + s -> { + // Check index version SOURCE_MAPPER_MODE_ATTRIBUTE_NOOP because that index version was added in the same serverless promotion + // where the new format was enabled by default + IndexVersion indexVersion = IndexMetadata.SETTING_INDEX_VERSION_CREATED.get(s); + return Boolean.toString(indexVersion.before(IndexVersions.SOURCE_MAPPER_MODE_ATTRIBUTE_NOOP)); + }, Setting.Property.Final, Setting.Property.IndexScope, Setting.Property.InternalIndex From e1cf3a70d073d16a3c64f8b2805e6770ae439a72 Mon Sep 17 00:00:00 2001 From: Mike Pellegrini Date: Mon, 3 Feb 2025 13:50:06 -0500 Subject: [PATCH 2/6] Added test --- ...anticInferenceMetadataFieldsMapperTests.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/mapper/SemanticInferenceMetadataFieldsMapperTests.java b/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/mapper/SemanticInferenceMetadataFieldsMapperTests.java index 57d71a48a4aeb..61981e5b094f6 100644 --- a/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/mapper/SemanticInferenceMetadataFieldsMapperTests.java +++ b/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/mapper/SemanticInferenceMetadataFieldsMapperTests.java @@ -55,6 +55,23 @@ public void testIsEnabled() { assertTrue(InferenceMetadataFieldsMapper.isEnabled(settings)); } + public void testIsEnabledByDefault() { + // Check index version SOURCE_MAPPER_MODE_ATTRIBUTE_NOOP because that index version was added in the same serverless promotion + // where the new format was enabled by default + var settings = Settings.builder() + .put( + IndexMetadata.SETTING_INDEX_VERSION_CREATED.getKey(), + IndexVersionUtils.getPreviousVersion(IndexVersions.SOURCE_MAPPER_MODE_ATTRIBUTE_NOOP) + ) + .build(); + assertFalse(InferenceMetadataFieldsMapper.isEnabled(settings)); + + settings = Settings.builder() + .put(IndexMetadata.SETTING_INDEX_VERSION_CREATED.getKey(), IndexVersions.SOURCE_MAPPER_MODE_ATTRIBUTE_NOOP) + .build(); + assertTrue(InferenceMetadataFieldsMapper.isEnabled(settings)); + } + @Override public void testFieldHasValue() { assertTrue( From 0af15a294e8db48e7e0be692a892134ab2c3a61d Mon Sep 17 00:00:00 2001 From: Mike Pellegrini Date: Mon, 3 Feb 2025 13:56:33 -0500 Subject: [PATCH 3/6] Update docs/changelog/121556.yaml --- docs/changelog/121556.yaml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 docs/changelog/121556.yaml diff --git a/docs/changelog/121556.yaml b/docs/changelog/121556.yaml new file mode 100644 index 0000000000000..b6d55684c4d72 --- /dev/null +++ b/docs/changelog/121556.yaml @@ -0,0 +1,5 @@ +pr: 121556 +summary: Enable New Semantic Text Format Only On Newly Created Indices +area: Relevance +type: bug +issues: [] From 89fa6103e2c4bf417fd44364c314cf423e811a15 Mon Sep 17 00:00:00 2001 From: Mike Pellegrini Date: Mon, 3 Feb 2025 14:11:52 -0500 Subject: [PATCH 4/6] Fix changelog --- docs/changelog/121556.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/changelog/121556.yaml b/docs/changelog/121556.yaml index b6d55684c4d72..d5fad5f37e5c8 100644 --- a/docs/changelog/121556.yaml +++ b/docs/changelog/121556.yaml @@ -1,5 +1,5 @@ pr: 121556 summary: Enable New Semantic Text Format Only On Newly Created Indices -area: Relevance +area: Mapping type: bug issues: [] From 5eba99c1d9c2a7d41da3104104340cc443cab462 Mon Sep 17 00:00:00 2001 From: Mike Pellegrini Date: Mon, 3 Feb 2025 14:29:37 -0500 Subject: [PATCH 5/6] Use alternate approach --- .../mapper/InferenceMetadataFieldsMapper.java | 17 +++++++++-------- ...anticInferenceMetadataFieldsMapperTests.java | 6 ++---- 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/server/src/main/java/org/elasticsearch/index/mapper/InferenceMetadataFieldsMapper.java b/server/src/main/java/org/elasticsearch/index/mapper/InferenceMetadataFieldsMapper.java index 0f6f0e4bdebba..427f998af2745 100644 --- a/server/src/main/java/org/elasticsearch/index/mapper/InferenceMetadataFieldsMapper.java +++ b/server/src/main/java/org/elasticsearch/index/mapper/InferenceMetadataFieldsMapper.java @@ -36,17 +36,16 @@ public abstract class InferenceMetadataFieldsMapper extends MetadataFieldMapper */ public static final Setting USE_LEGACY_SEMANTIC_TEXT_FORMAT = Setting.boolSetting( "index.mapping.semantic_text.use_legacy_format", - s -> { - // Check index version SOURCE_MAPPER_MODE_ATTRIBUTE_NOOP because that index version was added in the same serverless promotion - // where the new format was enabled by default - IndexVersion indexVersion = IndexMetadata.SETTING_INDEX_VERSION_CREATED.get(s); - return Boolean.toString(indexVersion.before(IndexVersions.SOURCE_MAPPER_MODE_ATTRIBUTE_NOOP)); - }, + false, Setting.Property.Final, Setting.Property.IndexScope, Setting.Property.InternalIndex ); + // Check index version SOURCE_MAPPER_MODE_ATTRIBUTE_NOOP because that index version was added in the same serverless promotion + // where the new format was enabled by default + public static final IndexVersion USE_NEW_FORMAT_BY_DEFAULT = IndexVersions.SOURCE_MAPPER_MODE_ATTRIBUTE_NOOP; + public static final String NAME = "_inference_fields"; public static final String CONTENT_TYPE = "_inference_fields"; @@ -92,10 +91,12 @@ public abstract ValueFetcher valueFetcher( */ public static boolean isEnabled(Settings settings) { var version = IndexMetadata.SETTING_INDEX_VERSION_CREATED.get(settings); - if (version.before(IndexVersions.INFERENCE_METADATA_FIELDS) - && version.between(IndexVersions.INFERENCE_METADATA_FIELDS_BACKPORT, IndexVersions.UPGRADE_TO_LUCENE_10_0_0) == false) { + if ((version.before(IndexVersions.INFERENCE_METADATA_FIELDS) + && version.between(IndexVersions.INFERENCE_METADATA_FIELDS_BACKPORT, IndexVersions.UPGRADE_TO_LUCENE_10_0_0) == false) + || (version.before(USE_NEW_FORMAT_BY_DEFAULT) && USE_LEGACY_SEMANTIC_TEXT_FORMAT.exists(settings) == false)) { return false; } + return USE_LEGACY_SEMANTIC_TEXT_FORMAT.get(settings) == false; } diff --git a/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/mapper/SemanticInferenceMetadataFieldsMapperTests.java b/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/mapper/SemanticInferenceMetadataFieldsMapperTests.java index 61981e5b094f6..8bb1956c0bc8d 100644 --- a/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/mapper/SemanticInferenceMetadataFieldsMapperTests.java +++ b/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/mapper/SemanticInferenceMetadataFieldsMapperTests.java @@ -56,18 +56,16 @@ public void testIsEnabled() { } public void testIsEnabledByDefault() { - // Check index version SOURCE_MAPPER_MODE_ATTRIBUTE_NOOP because that index version was added in the same serverless promotion - // where the new format was enabled by default var settings = Settings.builder() .put( IndexMetadata.SETTING_INDEX_VERSION_CREATED.getKey(), - IndexVersionUtils.getPreviousVersion(IndexVersions.SOURCE_MAPPER_MODE_ATTRIBUTE_NOOP) + IndexVersionUtils.getPreviousVersion(InferenceMetadataFieldsMapper.USE_NEW_FORMAT_BY_DEFAULT) ) .build(); assertFalse(InferenceMetadataFieldsMapper.isEnabled(settings)); settings = Settings.builder() - .put(IndexMetadata.SETTING_INDEX_VERSION_CREATED.getKey(), IndexVersions.SOURCE_MAPPER_MODE_ATTRIBUTE_NOOP) + .put(IndexMetadata.SETTING_INDEX_VERSION_CREATED.getKey(), InferenceMetadataFieldsMapper.USE_NEW_FORMAT_BY_DEFAULT) .build(); assertTrue(InferenceMetadataFieldsMapper.isEnabled(settings)); } From ab5cea5c22d9e613b6a3e5726ecc0fbef82a5ef8 Mon Sep 17 00:00:00 2001 From: Mike Pellegrini Date: Mon, 3 Feb 2025 14:35:18 -0500 Subject: [PATCH 6/6] Change variable name --- .../index/mapper/InferenceMetadataFieldsMapper.java | 4 ++-- .../mapper/SemanticInferenceMetadataFieldsMapperTests.java | 7 +++++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/server/src/main/java/org/elasticsearch/index/mapper/InferenceMetadataFieldsMapper.java b/server/src/main/java/org/elasticsearch/index/mapper/InferenceMetadataFieldsMapper.java index 427f998af2745..4039bccf1fd18 100644 --- a/server/src/main/java/org/elasticsearch/index/mapper/InferenceMetadataFieldsMapper.java +++ b/server/src/main/java/org/elasticsearch/index/mapper/InferenceMetadataFieldsMapper.java @@ -44,7 +44,7 @@ public abstract class InferenceMetadataFieldsMapper extends MetadataFieldMapper // Check index version SOURCE_MAPPER_MODE_ATTRIBUTE_NOOP because that index version was added in the same serverless promotion // where the new format was enabled by default - public static final IndexVersion USE_NEW_FORMAT_BY_DEFAULT = IndexVersions.SOURCE_MAPPER_MODE_ATTRIBUTE_NOOP; + public static final IndexVersion USE_NEW_SEMANTIC_TEXT_FORMAT_BY_DEFAULT = IndexVersions.SOURCE_MAPPER_MODE_ATTRIBUTE_NOOP; public static final String NAME = "_inference_fields"; public static final String CONTENT_TYPE = "_inference_fields"; @@ -93,7 +93,7 @@ public static boolean isEnabled(Settings settings) { var version = IndexMetadata.SETTING_INDEX_VERSION_CREATED.get(settings); if ((version.before(IndexVersions.INFERENCE_METADATA_FIELDS) && version.between(IndexVersions.INFERENCE_METADATA_FIELDS_BACKPORT, IndexVersions.UPGRADE_TO_LUCENE_10_0_0) == false) - || (version.before(USE_NEW_FORMAT_BY_DEFAULT) && USE_LEGACY_SEMANTIC_TEXT_FORMAT.exists(settings) == false)) { + || (version.before(USE_NEW_SEMANTIC_TEXT_FORMAT_BY_DEFAULT) && USE_LEGACY_SEMANTIC_TEXT_FORMAT.exists(settings) == false)) { return false; } diff --git a/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/mapper/SemanticInferenceMetadataFieldsMapperTests.java b/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/mapper/SemanticInferenceMetadataFieldsMapperTests.java index 8bb1956c0bc8d..f877b0182d888 100644 --- a/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/mapper/SemanticInferenceMetadataFieldsMapperTests.java +++ b/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/mapper/SemanticInferenceMetadataFieldsMapperTests.java @@ -59,13 +59,16 @@ public void testIsEnabledByDefault() { var settings = Settings.builder() .put( IndexMetadata.SETTING_INDEX_VERSION_CREATED.getKey(), - IndexVersionUtils.getPreviousVersion(InferenceMetadataFieldsMapper.USE_NEW_FORMAT_BY_DEFAULT) + IndexVersionUtils.getPreviousVersion(InferenceMetadataFieldsMapper.USE_NEW_SEMANTIC_TEXT_FORMAT_BY_DEFAULT) ) .build(); assertFalse(InferenceMetadataFieldsMapper.isEnabled(settings)); settings = Settings.builder() - .put(IndexMetadata.SETTING_INDEX_VERSION_CREATED.getKey(), InferenceMetadataFieldsMapper.USE_NEW_FORMAT_BY_DEFAULT) + .put( + IndexMetadata.SETTING_INDEX_VERSION_CREATED.getKey(), + InferenceMetadataFieldsMapper.USE_NEW_SEMANTIC_TEXT_FORMAT_BY_DEFAULT + ) .build(); assertTrue(InferenceMetadataFieldsMapper.isEnabled(settings)); }