diff --git a/docs/changelog/128509.yaml b/docs/changelog/128509.yaml new file mode 100644 index 0000000000000..2c51b4b684583 --- /dev/null +++ b/docs/changelog/128509.yaml @@ -0,0 +1,5 @@ +pr: 128509 +summary: Use default Lucene postings format when index mode is standard. +area: Codec +type: enhancement +issues: [] diff --git a/server/src/main/java/org/elasticsearch/index/IndexMode.java b/server/src/main/java/org/elasticsearch/index/IndexMode.java index 2be1c6fc41d96..06b10bef8514d 100644 --- a/server/src/main/java/org/elasticsearch/index/IndexMode.java +++ b/server/src/main/java/org/elasticsearch/index/IndexMode.java @@ -129,6 +129,11 @@ public void validateSourceFieldMapper(SourceFieldMapper sourceFieldMapper) {} public SourceFieldMapper.Mode defaultSourceMode() { return SourceFieldMapper.Mode.STORED; } + + @Override + public boolean useDefaultPostingsFormat() { + return true; + } }, TIME_SERIES("time_series") { @Override @@ -552,6 +557,13 @@ public String getDefaultCodec() { return CodecService.DEFAULT_CODEC; } + /** + * Whether the default posting format (for inverted indices) from Lucene should be used. + */ + public boolean useDefaultPostingsFormat() { + return false; + } + /** * Parse a string into an {@link IndexMode}. */ diff --git a/server/src/main/java/org/elasticsearch/index/codec/PerFieldFormatSupplier.java b/server/src/main/java/org/elasticsearch/index/codec/PerFieldFormatSupplier.java index b88ae698134b9..ecb0d6d5eb3ca 100644 --- a/server/src/main/java/org/elasticsearch/index/codec/PerFieldFormatSupplier.java +++ b/server/src/main/java/org/elasticsearch/index/codec/PerFieldFormatSupplier.java @@ -15,7 +15,6 @@ import org.apache.lucene.codecs.lucene90.Lucene90DocValuesFormat; import org.apache.lucene.codecs.lucene99.Lucene99HnswVectorsFormat; import org.elasticsearch.common.util.BigArrays; -import org.elasticsearch.common.util.FeatureFlag; import org.elasticsearch.index.IndexMode; import org.elasticsearch.index.IndexSettings; import org.elasticsearch.index.IndexVersions; @@ -33,7 +32,6 @@ * vectors. */ public class PerFieldFormatSupplier { - public static final FeatureFlag USE_DEFAULT_LUCENE_POSTINGS_FORMAT = new FeatureFlag("use_default_lucene_postings_format"); private static final DocValuesFormat docValuesFormat = new Lucene90DocValuesFormat(); private static final KnnVectorsFormat knnVectorsFormat = new Lucene99HnswVectorsFormat(); @@ -51,9 +49,8 @@ public PerFieldFormatSupplier(MapperService mapperService, BigArrays bigArrays) this.bloomFilterPostingsFormat = new ES87BloomFilterPostingsFormat(bigArrays, this::internalGetPostingsFormatForField); if (mapperService != null - && USE_DEFAULT_LUCENE_POSTINGS_FORMAT.isEnabled() && mapperService.getIndexSettings().getIndexVersionCreated().onOrAfter(IndexVersions.USE_LUCENE101_POSTINGS_FORMAT) - && mapperService.getIndexSettings().getMode() == IndexMode.STANDARD) { + && mapperService.getIndexSettings().getMode().useDefaultPostingsFormat()) { defaultPostingsFormat = Elasticsearch900Lucene101Codec.DEFAULT_POSTINGS_FORMAT; } else { // our own posting format using PFOR diff --git a/server/src/test/java/org/elasticsearch/index/codec/PerFieldMapperCodecTests.java b/server/src/test/java/org/elasticsearch/index/codec/PerFieldMapperCodecTests.java index dcd43326dcbb1..d92eb3d1359a3 100644 --- a/server/src/test/java/org/elasticsearch/index/codec/PerFieldMapperCodecTests.java +++ b/server/src/test/java/org/elasticsearch/index/codec/PerFieldMapperCodecTests.java @@ -94,8 +94,7 @@ public void testUseBloomFilter() throws IOException { assertThat(perFieldMapperCodec.getPostingsFormatForField("_id"), instanceOf(ES87BloomFilterPostingsFormat.class)); assertThat(perFieldMapperCodec.useBloomFilter("another_field"), is(false)); - Class expectedPostingsFormat = PerFieldFormatSupplier.USE_DEFAULT_LUCENE_POSTINGS_FORMAT.isEnabled() - && timeSeries == false ? Lucene101PostingsFormat.class : ES812PostingsFormat.class; + Class expectedPostingsFormat = timeSeries ? ES812PostingsFormat.class : Lucene101PostingsFormat.class; assertThat(perFieldMapperCodec.getPostingsFormatForField("another_field"), instanceOf(expectedPostingsFormat)); } @@ -110,10 +109,7 @@ public void testUseBloomFilterWithTimestampFieldEnabled() throws IOException { public void testUseBloomFilterWithTimestampFieldEnabled_noTimeSeriesMode() throws IOException { PerFieldFormatSupplier perFieldMapperCodec = createFormatSupplier(true, false, false); assertThat(perFieldMapperCodec.useBloomFilter("_id"), is(false)); - Class expectedPostingsFormat = PerFieldFormatSupplier.USE_DEFAULT_LUCENE_POSTINGS_FORMAT.isEnabled() - ? Lucene101PostingsFormat.class - : ES812PostingsFormat.class; - assertThat(perFieldMapperCodec.getPostingsFormatForField("_id"), instanceOf(expectedPostingsFormat)); + assertThat(perFieldMapperCodec.getPostingsFormatForField("_id"), instanceOf(Lucene101PostingsFormat.class)); } public void testUseBloomFilterWithTimestampFieldEnabled_disableBloomFilter() throws IOException {