diff --git a/docs/changelog/135370.yaml b/docs/changelog/135370.yaml new file mode 100644 index 0000000000000..349d2f1862af1 --- /dev/null +++ b/docs/changelog/135370.yaml @@ -0,0 +1,5 @@ +pr: 135370 +summary: Add new `pattern_text` field mapper in tech preview +area: Mapping +type: feature +issues: [] diff --git a/test/test-clusters/src/main/java/org/elasticsearch/test/cluster/FeatureFlag.java b/test/test-clusters/src/main/java/org/elasticsearch/test/cluster/FeatureFlag.java index f822e5bdc963c..56fdac88dbfe1 100644 --- a/test/test-clusters/src/main/java/org/elasticsearch/test/cluster/FeatureFlag.java +++ b/test/test-clusters/src/main/java/org/elasticsearch/test/cluster/FeatureFlag.java @@ -20,7 +20,6 @@ public enum FeatureFlag { SUB_OBJECTS_AUTO_ENABLED("es.sub_objects_auto_feature_flag_enabled=true", Version.fromString("8.16.0"), null), DOC_VALUES_SKIPPER("es.doc_values_skipper_feature_flag_enabled=true", Version.fromString("8.18.1"), null), LOGS_STREAM("es.logs_stream_feature_flag_enabled=true", Version.fromString("9.1.0"), null), - PATTERN_TEXT("es.pattern_text_feature_flag_enabled=true", Version.fromString("9.1.0"), null), SYNTHETIC_VECTORS("es.mapping_synthetic_vectors=true", Version.fromString("9.2.0"), null), INDEX_DIMENSIONS_TSID_OPTIMIZATION_FEATURE_FLAG( "es.index_dimensions_tsid_optimization_feature_flag_enabled=true", diff --git a/x-pack/plugin/logsdb/src/javaRestTest/java/org/elasticsearch/xpack/logsdb/patterntext/PatternTextBasicRestIT.java b/x-pack/plugin/logsdb/src/javaRestTest/java/org/elasticsearch/xpack/logsdb/patterntext/PatternTextBasicRestIT.java index 7997419a77f09..da8721acc1c96 100644 --- a/x-pack/plugin/logsdb/src/javaRestTest/java/org/elasticsearch/xpack/logsdb/patterntext/PatternTextBasicRestIT.java +++ b/x-pack/plugin/logsdb/src/javaRestTest/java/org/elasticsearch/xpack/logsdb/patterntext/PatternTextBasicRestIT.java @@ -15,7 +15,6 @@ import org.elasticsearch.common.time.DateFormatter; import org.elasticsearch.common.time.FormatNames; import org.elasticsearch.test.cluster.ElasticsearchCluster; -import org.elasticsearch.test.cluster.FeatureFlag; import org.elasticsearch.test.cluster.local.distribution.DistributionType; import org.elasticsearch.test.rest.ESRestTestCase; import org.elasticsearch.test.rest.ObjectPath; @@ -39,7 +38,6 @@ public class PatternTextBasicRestIT extends ESRestTestCase { .distribution(DistributionType.DEFAULT) .setting("xpack.license.self_generated.type", "trial") .setting("xpack.security.enabled", "false") - .feature(FeatureFlag.PATTERN_TEXT) .build(); @Override diff --git a/x-pack/plugin/logsdb/src/javaRestTest/java/org/elasticsearch/xpack/logsdb/patterntext/PatternTextLicenseDowngradeIT.java b/x-pack/plugin/logsdb/src/javaRestTest/java/org/elasticsearch/xpack/logsdb/patterntext/PatternTextLicenseDowngradeIT.java index a3e75901755dd..e6f8ec12075d7 100644 --- a/x-pack/plugin/logsdb/src/javaRestTest/java/org/elasticsearch/xpack/logsdb/patterntext/PatternTextLicenseDowngradeIT.java +++ b/x-pack/plugin/logsdb/src/javaRestTest/java/org/elasticsearch/xpack/logsdb/patterntext/PatternTextLicenseDowngradeIT.java @@ -7,7 +7,6 @@ package org.elasticsearch.xpack.logsdb.patterntext; -import org.elasticsearch.Build; import org.elasticsearch.xpack.logsdb.DataStreamLicenseChangeTestCase; import org.junit.Before; @@ -22,7 +21,6 @@ public class PatternTextLicenseDowngradeIT extends DataStreamLicenseChangeTestCa @Before public void checkClusterFeature() { assumeTrue("[patterned_text] must be available", clusterHasFeature("mapper.patterned_text")); - assumeTrue("[patterned_text] is only available in snapshot builds", Build.current().isSnapshot()); } private static final String patternTextMapping = """ diff --git a/x-pack/plugin/logsdb/src/javaRestTest/java/org/elasticsearch/xpack/logsdb/patterntext/PatternTextLicenseUpgradeIT.java b/x-pack/plugin/logsdb/src/javaRestTest/java/org/elasticsearch/xpack/logsdb/patterntext/PatternTextLicenseUpgradeIT.java index 6a12c0f075c42..680e170efb48f 100644 --- a/x-pack/plugin/logsdb/src/javaRestTest/java/org/elasticsearch/xpack/logsdb/patterntext/PatternTextLicenseUpgradeIT.java +++ b/x-pack/plugin/logsdb/src/javaRestTest/java/org/elasticsearch/xpack/logsdb/patterntext/PatternTextLicenseUpgradeIT.java @@ -7,7 +7,6 @@ package org.elasticsearch.xpack.logsdb.patterntext; -import org.elasticsearch.Build; import org.elasticsearch.xpack.logsdb.DataStreamLicenseChangeTestCase; import org.junit.Before; @@ -22,7 +21,6 @@ public class PatternTextLicenseUpgradeIT extends DataStreamLicenseChangeTestCase @Before public void checkClusterFeature() { assumeTrue("[patterned_text] must be available", clusterHasFeature("mapper.patterned_text")); - assumeTrue("[patterned_text] is only available in snapshot builds", Build.current().isSnapshot()); } private static final String patternTextMapping = """ diff --git a/x-pack/plugin/logsdb/src/main/java/org/elasticsearch/xpack/logsdb/LogsDBPlugin.java b/x-pack/plugin/logsdb/src/main/java/org/elasticsearch/xpack/logsdb/LogsDBPlugin.java index 7736a2b912a04..3c7ceb883fd73 100644 --- a/x-pack/plugin/logsdb/src/main/java/org/elasticsearch/xpack/logsdb/LogsDBPlugin.java +++ b/x-pack/plugin/logsdb/src/main/java/org/elasticsearch/xpack/logsdb/LogsDBPlugin.java @@ -26,7 +26,6 @@ import java.util.ArrayList; import java.util.Collection; -import java.util.Collections; import java.util.List; import java.util.Map; @@ -94,11 +93,12 @@ public Collection getAdditionalIndexSettingProviders(Index @Override public List> getSettings() { - List> settings = new ArrayList<>(List.of(FALLBACK_SETTING, CLUSTER_LOGSDB_ENABLED, LOGSDB_PRIOR_LOGS_USAGE)); - if (PatternTextFieldMapper.PATTERN_TEXT_MAPPER.isEnabled()) { - settings.add(PatternTextFieldMapper.DISABLE_TEMPLATING_SETTING); - } - return Collections.unmodifiableList(settings); + return List.of( + FALLBACK_SETTING, + CLUSTER_LOGSDB_ENABLED, + LOGSDB_PRIOR_LOGS_USAGE, + PatternTextFieldMapper.DISABLE_TEMPLATING_SETTING + ); } @Override @@ -111,11 +111,7 @@ public List getActions() { @Override public Map getMappers() { - if (PatternTextFieldMapper.PATTERN_TEXT_MAPPER.isEnabled()) { - return singletonMap(PatternTextFieldType.CONTENT_TYPE, PatternTextFieldMapper.PARSER); - } else { - return Map.of(); - } + return singletonMap(PatternTextFieldType.CONTENT_TYPE, PatternTextFieldMapper.PARSER); } protected XPackLicenseState getLicenseState() { diff --git a/x-pack/plugin/logsdb/src/main/java/org/elasticsearch/xpack/logsdb/LogsdbIndexModeSettingsProvider.java b/x-pack/plugin/logsdb/src/main/java/org/elasticsearch/xpack/logsdb/LogsdbIndexModeSettingsProvider.java index a63845bcb13f0..64fe8f1376621 100644 --- a/x-pack/plugin/logsdb/src/main/java/org/elasticsearch/xpack/logsdb/LogsdbIndexModeSettingsProvider.java +++ b/x-pack/plugin/logsdb/src/main/java/org/elasticsearch/xpack/logsdb/LogsdbIndexModeSettingsProvider.java @@ -192,8 +192,7 @@ && matchesLogsPattern(dataStreamName)) { } } - if (PatternTextFieldMapper.PATTERN_TEXT_MAPPER.isEnabled() - && licenseService.allowPatternTextTemplating(isTemplateValidation) == false) { + if (licenseService.allowPatternTextTemplating(isTemplateValidation) == false) { additionalSettings.put(PatternTextFieldMapper.DISABLE_TEMPLATING_SETTING.getKey(), true); } } diff --git a/x-pack/plugin/logsdb/src/main/java/org/elasticsearch/xpack/logsdb/patterntext/PatternTextFieldMapper.java b/x-pack/plugin/logsdb/src/main/java/org/elasticsearch/xpack/logsdb/patterntext/PatternTextFieldMapper.java index b7a5909708db6..f605bc4360252 100644 --- a/x-pack/plugin/logsdb/src/main/java/org/elasticsearch/xpack/logsdb/patterntext/PatternTextFieldMapper.java +++ b/x-pack/plugin/logsdb/src/main/java/org/elasticsearch/xpack/logsdb/patterntext/PatternTextFieldMapper.java @@ -17,7 +17,6 @@ import org.apache.lucene.index.LeafReader; import org.apache.lucene.util.BytesRef; import org.elasticsearch.common.settings.Setting; -import org.elasticsearch.common.util.FeatureFlag; import org.elasticsearch.index.IndexSettings; import org.elasticsearch.index.IndexVersion; import org.elasticsearch.index.analysis.AnalyzerScope; @@ -50,7 +49,6 @@ */ public class PatternTextFieldMapper extends FieldMapper { - public static final FeatureFlag PATTERN_TEXT_MAPPER = new FeatureFlag("pattern_text"); private static final NamedAnalyzer STANDARD_ANALYZER = new NamedAnalyzer("standard", AnalyzerScope.GLOBAL, new StandardAnalyzer()); /** diff --git a/x-pack/plugin/logsdb/src/test/java/org/elasticsearch/xpack/logsdb/LogsdbIndexModeSettingsProviderTests.java b/x-pack/plugin/logsdb/src/test/java/org/elasticsearch/xpack/logsdb/LogsdbIndexModeSettingsProviderTests.java index 84f2d269f9cc7..f5b7916364bad 100644 --- a/x-pack/plugin/logsdb/src/test/java/org/elasticsearch/xpack/logsdb/LogsdbIndexModeSettingsProviderTests.java +++ b/x-pack/plugin/logsdb/src/test/java/org/elasticsearch/xpack/logsdb/LogsdbIndexModeSettingsProviderTests.java @@ -960,8 +960,6 @@ public void testExplicitRoutingPathNotAllowedByLicense() throws Exception { } public void testPatternTextNotAllowedByLicense() throws Exception { - assumeTrue("pattern_text feature must be enabled", PatternTextFieldMapper.PATTERN_TEXT_MAPPER.isEnabled()); - MockLicenseState licenseState = MockLicenseState.createMock(); when(licenseState.copyCurrentLicenseState()).thenReturn(licenseState); when(licenseState.isAllowed(same(LogsdbLicenseService.PATTERN_TEXT_TEMPLATING_FEATURE))).thenReturn(false); diff --git a/x-pack/plugin/logsdb/src/test/java/org/elasticsearch/xpack/logsdb/LogsdbIndexSettingsProviderLegacyLicenseTests.java b/x-pack/plugin/logsdb/src/test/java/org/elasticsearch/xpack/logsdb/LogsdbIndexSettingsProviderLegacyLicenseTests.java index e8fb07b8be376..f0411deaf81de 100644 --- a/x-pack/plugin/logsdb/src/test/java/org/elasticsearch/xpack/logsdb/LogsdbIndexSettingsProviderLegacyLicenseTests.java +++ b/x-pack/plugin/logsdb/src/test/java/org/elasticsearch/xpack/logsdb/LogsdbIndexSettingsProviderLegacyLicenseTests.java @@ -77,11 +77,11 @@ public void testGetAdditionalIndexSettingsDefault() { builder ); var result = builder.build(); - var expectedBuilder = Settings.builder().put(IndexSettings.INDEX_MAPPER_SOURCE_MODE_SETTING.getKey(), "STORED"); - if (PatternTextFieldMapper.PATTERN_TEXT_MAPPER.isEnabled()) { - expectedBuilder.put(PatternTextFieldMapper.DISABLE_TEMPLATING_SETTING.getKey(), true); - } - assertEquals(expectedBuilder.build(), result); + var expected = Settings.builder() + .put(IndexSettings.INDEX_MAPPER_SOURCE_MODE_SETTING.getKey(), "STORED") + .put(PatternTextFieldMapper.DISABLE_TEMPLATING_SETTING.getKey(), true) + .build(); + assertEquals(expected, result); } public void testGetAdditionalIndexSettingsApm() throws IOException { @@ -101,17 +101,17 @@ public void testGetAdditionalIndexSettingsApm() throws IOException { builder ); var result = builder.build(); - Settings expectedAdditionalSettings = PatternTextFieldMapper.PATTERN_TEXT_MAPPER.isEnabled() - ? Settings.builder().put(PatternTextFieldMapper.DISABLE_TEMPLATING_SETTING.getKey(), true).build() - : Settings.EMPTY; + Settings expectedAdditionalSettings = Settings.builder() + .put(PatternTextFieldMapper.DISABLE_TEMPLATING_SETTING.getKey(), true) + .build(); assertEquals(expectedAdditionalSettings, result); } public void testGetAdditionalIndexSettingsProfiling() throws IOException { Settings settings = Settings.builder().put(IndexSettings.INDEX_MAPPER_SOURCE_MODE_SETTING.getKey(), "SYNTHETIC").build(); - Settings expectedAdditionalSettings = PatternTextFieldMapper.PATTERN_TEXT_MAPPER.isEnabled() - ? Settings.builder().put(PatternTextFieldMapper.DISABLE_TEMPLATING_SETTING.getKey(), true).build() - : Settings.EMPTY; + Settings expectedAdditionalSettings = Settings.builder() + .put(PatternTextFieldMapper.DISABLE_TEMPLATING_SETTING.getKey(), true) + .build(); for (String dataStreamName : new String[] { "profiling-metrics", "profiling-events" }) { String indexName = DataStream.getDefaultBackingIndexName(dataStreamName, 0); Settings.Builder builder = Settings.builder(); @@ -155,9 +155,9 @@ public void testGetAdditionalIndexSettingsTsdb() throws IOException { builder ); var result = builder.build(); - Settings expectedAdditionalSettings = PatternTextFieldMapper.PATTERN_TEXT_MAPPER.isEnabled() - ? Settings.builder().put(PatternTextFieldMapper.DISABLE_TEMPLATING_SETTING.getKey(), true).build() - : Settings.EMPTY; + Settings expectedAdditionalSettings = Settings.builder() + .put(PatternTextFieldMapper.DISABLE_TEMPLATING_SETTING.getKey(), true) + .build(); assertEquals(expectedAdditionalSettings, result); } @@ -200,13 +200,12 @@ public void testGetAdditionalIndexSettingsTsdbAfterCutoffDate() throws Exception IndexVersion.current(), builder ); - var result = builder.build(); - var expectedBuilder = Settings.builder().put(IndexSettings.INDEX_MAPPER_SOURCE_MODE_SETTING.getKey(), "STORED"); - if (PatternTextFieldMapper.PATTERN_TEXT_MAPPER.isEnabled()) { - expectedBuilder.put(PatternTextFieldMapper.DISABLE_TEMPLATING_SETTING.getKey(), true); - } - - assertEquals(expectedBuilder.build(), result); + var result = builder.build(); + var expected = Settings.builder() + .put(IndexSettings.INDEX_MAPPER_SOURCE_MODE_SETTING.getKey(), "STORED") + .put(PatternTextFieldMapper.DISABLE_TEMPLATING_SETTING.getKey(), true) + .build(); + assertEquals(expected, result); } } diff --git a/x-pack/plugin/logsdb/src/test/java/org/elasticsearch/xpack/logsdb/patterntext/PatternTextFieldMapperTests.java b/x-pack/plugin/logsdb/src/test/java/org/elasticsearch/xpack/logsdb/patterntext/PatternTextFieldMapperTests.java index 5466d4b785731..1b3ccb376febf 100644 --- a/x-pack/plugin/logsdb/src/test/java/org/elasticsearch/xpack/logsdb/patterntext/PatternTextFieldMapperTests.java +++ b/x-pack/plugin/logsdb/src/test/java/org/elasticsearch/xpack/logsdb/patterntext/PatternTextFieldMapperTests.java @@ -52,7 +52,6 @@ import org.elasticsearch.xcontent.json.JsonXContent; import org.elasticsearch.xpack.logsdb.LogsDBPlugin; import org.junit.AssumptionViolatedException; -import org.junit.Before; import java.io.IOException; import java.util.ArrayList; @@ -91,11 +90,6 @@ protected void assertExistsQuery(MappedFieldType fieldType, Query query, LuceneD assertNoFieldNamesField(fields); } - @Before - public void setup() { - assumeTrue("Only when pattern_text feature flag is enabled", PatternTextFieldMapper.PATTERN_TEXT_MAPPER.isEnabled()); - } - public void testExistsStandardSource() throws IOException { assertExistsQuery(createMapperService(fieldMapping(b -> b.field("type", "pattern_text")))); } diff --git a/x-pack/plugin/logsdb/src/test/java/org/elasticsearch/xpack/logsdb/patterntext/PatternTextIntegrationTests.java b/x-pack/plugin/logsdb/src/test/java/org/elasticsearch/xpack/logsdb/patterntext/PatternTextIntegrationTests.java index 68ceed8e9341f..3d3cd07069790 100644 --- a/x-pack/plugin/logsdb/src/test/java/org/elasticsearch/xpack/logsdb/patterntext/PatternTextIntegrationTests.java +++ b/x-pack/plugin/logsdb/src/test/java/org/elasticsearch/xpack/logsdb/patterntext/PatternTextIntegrationTests.java @@ -35,7 +35,6 @@ import org.elasticsearch.xpack.core.XPackPlugin; import org.elasticsearch.xpack.logsdb.LogsDBPlugin; import org.junit.After; -import org.junit.Before; import java.io.IOException; import java.time.Instant; @@ -110,16 +109,9 @@ protected Collection> getPlugins() { private static final Settings LOGSDB_SETTING = Settings.builder().put(IndexSettings.MODE.getKey(), "logsdb").build(); - @Before - public void setup() { - assumeTrue("Only when pattern_text feature flag is enabled", PatternTextFieldMapper.PATTERN_TEXT_MAPPER.isEnabled()); - } - @After public void cleanup() { - if (PatternTextFieldMapper.PATTERN_TEXT_MAPPER.isEnabled()) { - assertAcked(admin().indices().prepareDelete(INDEX)); - } + assertAcked(admin().indices().prepareDelete(INDEX)); } private String getMapping(String indexOptions, boolean disableTemplating) { diff --git a/x-pack/plugin/logsdb/src/test/java/org/elasticsearch/xpack/logsdb/patterntext/PatternTextNestedObjectTests.java b/x-pack/plugin/logsdb/src/test/java/org/elasticsearch/xpack/logsdb/patterntext/PatternTextNestedObjectTests.java index f5eecd66ad62e..40d2e6fcf55da 100644 --- a/x-pack/plugin/logsdb/src/test/java/org/elasticsearch/xpack/logsdb/patterntext/PatternTextNestedObjectTests.java +++ b/x-pack/plugin/logsdb/src/test/java/org/elasticsearch/xpack/logsdb/patterntext/PatternTextNestedObjectTests.java @@ -28,7 +28,6 @@ import org.elasticsearch.xpack.core.XPackPlugin; import org.elasticsearch.xpack.logsdb.LogsDBPlugin; import org.junit.After; -import org.junit.Before; import java.util.Collection; import java.util.HashSet; @@ -60,11 +59,6 @@ protected Collection> getPlugins() { .put(IndexSettings.INDEX_MAPPER_SOURCE_MODE_SETTING.getKey(), "synthetic") .build(); - @Before - public void setup() { - assumeTrue("Only when pattern_text feature flag is enabled", PatternTextFieldMapper.PATTERN_TEXT_MAPPER.isEnabled()); - } - @After public void cleanup() { assertAcked(admin().indices().prepareDelete(INDEX).setIndicesOptions(IndicesOptions.lenientExpandOpen()).get()); diff --git a/x-pack/plugin/logsdb/src/yamlRestTest/java/org/elasticsearch/xpack/logsdb/LogsdbTestSuiteIT.java b/x-pack/plugin/logsdb/src/yamlRestTest/java/org/elasticsearch/xpack/logsdb/LogsdbTestSuiteIT.java index ed0c7b7957e84..5a1ccb4e08140 100644 --- a/x-pack/plugin/logsdb/src/yamlRestTest/java/org/elasticsearch/xpack/logsdb/LogsdbTestSuiteIT.java +++ b/x-pack/plugin/logsdb/src/yamlRestTest/java/org/elasticsearch/xpack/logsdb/LogsdbTestSuiteIT.java @@ -37,7 +37,6 @@ public class LogsdbTestSuiteIT extends ESClientYamlSuiteTestCase { .setting("xpack.security.autoconfiguration.enabled", "false") .setting("xpack.license.self_generated.type", "trial") .feature(FeatureFlag.DOC_VALUES_SKIPPER) - .feature(FeatureFlag.PATTERN_TEXT) .build(); public LogsdbTestSuiteIT(@Name("yaml") ClientYamlTestCandidate testCandidate) {