Skip to content

Commit 4c174a8

Browse files
Use Lucene101 postings format by default (#126080)
Update the PerFieldFormatSupplier so that new standard indices use the Lucene101PostingsFormat instead of the current default ES812PostingsFormat. Currently, use of the new codec is gated behind a feature flag.
1 parent fce28cc commit 4c174a8

File tree

8 files changed

+38
-6
lines changed

8 files changed

+38
-6
lines changed

qa/smoke-test-multinode/src/yamlRestTest/java/org/elasticsearch/smoketest/SmokeTestMultiNodeClientYamlTestSuiteIT.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ public class SmokeTestMultiNodeClientYamlTestSuiteIT extends ESClientYamlSuiteTe
3737
.feature(FeatureFlag.TIME_SERIES_MODE)
3838
.feature(FeatureFlag.SUB_OBJECTS_AUTO_ENABLED)
3939
.feature(FeatureFlag.DOC_VALUES_SKIPPER)
40+
.feature(FeatureFlag.USE_LUCENE101_POSTINGS_FORMAT)
4041
.build();
4142

4243
public SmokeTestMultiNodeClientYamlTestSuiteIT(@Name("yaml") ClientYamlTestCandidate testCandidate) {

rest-api-spec/src/yamlRestTest/java/org/elasticsearch/test/rest/ClientYamlTestSuiteIT.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ public class ClientYamlTestSuiteIT extends ESClientYamlSuiteTestCase {
3737
.feature(FeatureFlag.TIME_SERIES_MODE)
3838
.feature(FeatureFlag.SUB_OBJECTS_AUTO_ENABLED)
3939
.feature(FeatureFlag.DOC_VALUES_SKIPPER)
40+
.feature(FeatureFlag.USE_LUCENE101_POSTINGS_FORMAT)
4041
.build();
4142

4243
public ClientYamlTestSuiteIT(@Name("yaml") ClientYamlTestCandidate testCandidate) {

server/src/main/java/org/elasticsearch/index/IndexVersions.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,7 @@ private static Version parseUnchecked(String version) {
158158
public static final IndexVersion RESCORE_PARAMS_ALLOW_ZERO_TO_QUANTIZED_VECTORS = def(9_018_0_00, Version.LUCENE_10_1_0);
159159
public static final IndexVersion SYNTHETIC_SOURCE_STORE_ARRAYS_NATIVELY_UNSIGNED_LONG = def(9_019_0_00, Version.LUCENE_10_1_0);
160160
public static final IndexVersion SYNTHETIC_SOURCE_STORE_ARRAYS_NATIVELY_SCALED_FLOAT = def(9_020_0_00, Version.LUCENE_10_1_0);
161+
public static final IndexVersion USE_LUCENE101_POSTINGS_FORMAT = def(9_021_0_00, Version.LUCENE_10_1_0);
161162
/*
162163
* STOP! READ THIS FIRST! No, really,
163164
* ____ _____ ___ ____ _ ____ _____ _ ____ _____ _ _ ___ ____ _____ ___ ____ ____ _____ _

server/src/main/java/org/elasticsearch/index/codec/PerFieldFormatSupplier.java

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,14 @@
1212
import org.apache.lucene.codecs.DocValuesFormat;
1313
import org.apache.lucene.codecs.KnnVectorsFormat;
1414
import org.apache.lucene.codecs.PostingsFormat;
15+
import org.apache.lucene.codecs.lucene101.Lucene101PostingsFormat;
1516
import org.apache.lucene.codecs.lucene90.Lucene90DocValuesFormat;
1617
import org.apache.lucene.codecs.lucene99.Lucene99HnswVectorsFormat;
1718
import org.elasticsearch.common.util.BigArrays;
19+
import org.elasticsearch.common.util.FeatureFlag;
1820
import org.elasticsearch.index.IndexMode;
1921
import org.elasticsearch.index.IndexSettings;
22+
import org.elasticsearch.index.IndexVersions;
2023
import org.elasticsearch.index.codec.bloomfilter.ES87BloomFilterPostingsFormat;
2124
import org.elasticsearch.index.codec.postings.ES812PostingsFormat;
2225
import org.elasticsearch.index.codec.tsdb.es819.ES819TSDBDocValuesFormat;
@@ -31,19 +34,33 @@
3134
* vectors.
3235
*/
3336
public class PerFieldFormatSupplier {
37+
public static final FeatureFlag USE_LUCENE101_POSTINGS_FORMAT = new FeatureFlag("use_lucene101_postings_format");
3438

3539
private static final DocValuesFormat docValuesFormat = new Lucene90DocValuesFormat();
3640
private static final KnnVectorsFormat knnVectorsFormat = new Lucene99HnswVectorsFormat();
3741
private static final ES819TSDBDocValuesFormat tsdbDocValuesFormat = new ES819TSDBDocValuesFormat();
3842
private static final ES812PostingsFormat es812PostingsFormat = new ES812PostingsFormat();
43+
private static final Lucene101PostingsFormat lucene101PostingsFormat = new Lucene101PostingsFormat();
3944
private static final PostingsFormat completionPostingsFormat = PostingsFormat.forName("Completion101");
4045

4146
private final ES87BloomFilterPostingsFormat bloomFilterPostingsFormat;
4247
private final MapperService mapperService;
4348

49+
private final PostingsFormat defaultPostingsFormat;
50+
4451
public PerFieldFormatSupplier(MapperService mapperService, BigArrays bigArrays) {
4552
this.mapperService = mapperService;
4653
this.bloomFilterPostingsFormat = new ES87BloomFilterPostingsFormat(bigArrays, this::internalGetPostingsFormatForField);
54+
55+
if (mapperService != null
56+
&& USE_LUCENE101_POSTINGS_FORMAT.isEnabled()
57+
&& mapperService.getIndexSettings().getIndexVersionCreated().onOrAfter(IndexVersions.USE_LUCENE101_POSTINGS_FORMAT)
58+
&& mapperService.getIndexSettings().getMode() == IndexMode.STANDARD) {
59+
defaultPostingsFormat = lucene101PostingsFormat;
60+
} else {
61+
// our own posting format using PFOR
62+
defaultPostingsFormat = es812PostingsFormat;
63+
}
4764
}
4865

4966
public PostingsFormat getPostingsFormatForField(String field) {
@@ -60,8 +77,8 @@ private PostingsFormat internalGetPostingsFormatForField(String field) {
6077
return completionPostingsFormat;
6178
}
6279
}
63-
// return our own posting format using PFOR
64-
return es812PostingsFormat;
80+
81+
return defaultPostingsFormat;
6582
}
6683

6784
boolean useBloomFilter(String field) {

server/src/test/java/org/elasticsearch/index/codec/PerFieldMapperCodecTests.java

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99

1010
package org.elasticsearch.index.codec;
1111

12+
import org.apache.lucene.codecs.PostingsFormat;
13+
import org.apache.lucene.codecs.lucene101.Lucene101PostingsFormat;
1214
import org.elasticsearch.cluster.metadata.IndexMetadata;
1315
import org.elasticsearch.common.compress.CompressedXContent;
1416
import org.elasticsearch.common.settings.Settings;
@@ -86,11 +88,15 @@ public class PerFieldMapperCodecTests extends ESTestCase {
8688
""";
8789

8890
public void testUseBloomFilter() throws IOException {
89-
PerFieldFormatSupplier perFieldMapperCodec = createFormatSupplier(false, randomBoolean(), false);
91+
boolean timeSeries = randomBoolean();
92+
PerFieldFormatSupplier perFieldMapperCodec = createFormatSupplier(false, timeSeries, false);
9093
assertThat(perFieldMapperCodec.useBloomFilter("_id"), is(true));
9194
assertThat(perFieldMapperCodec.getPostingsFormatForField("_id"), instanceOf(ES87BloomFilterPostingsFormat.class));
9295
assertThat(perFieldMapperCodec.useBloomFilter("another_field"), is(false));
93-
assertThat(perFieldMapperCodec.getPostingsFormatForField("another_field"), instanceOf(ES812PostingsFormat.class));
96+
97+
Class<? extends PostingsFormat> expectedPostingsFormat = PerFieldFormatSupplier.USE_LUCENE101_POSTINGS_FORMAT.isEnabled()
98+
&& timeSeries == false ? Lucene101PostingsFormat.class : ES812PostingsFormat.class;
99+
assertThat(perFieldMapperCodec.getPostingsFormatForField("another_field"), instanceOf(expectedPostingsFormat));
94100
}
95101

96102
public void testUseBloomFilterWithTimestampFieldEnabled() throws IOException {
@@ -104,7 +110,10 @@ public void testUseBloomFilterWithTimestampFieldEnabled() throws IOException {
104110
public void testUseBloomFilterWithTimestampFieldEnabled_noTimeSeriesMode() throws IOException {
105111
PerFieldFormatSupplier perFieldMapperCodec = createFormatSupplier(true, false, false);
106112
assertThat(perFieldMapperCodec.useBloomFilter("_id"), is(false));
107-
assertThat(perFieldMapperCodec.getPostingsFormatForField("_id"), instanceOf(ES812PostingsFormat.class));
113+
Class<? extends PostingsFormat> expectedPostingsFormat = PerFieldFormatSupplier.USE_LUCENE101_POSTINGS_FORMAT.isEnabled()
114+
? Lucene101PostingsFormat.class
115+
: ES812PostingsFormat.class;
116+
assertThat(perFieldMapperCodec.getPostingsFormatForField("_id"), instanceOf(expectedPostingsFormat));
108117
}
109118

110119
public void testUseBloomFilterWithTimestampFieldEnabled_disableBloomFilter() throws IOException {

test/test-clusters/src/main/java/org/elasticsearch/test/cluster/FeatureFlag.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ public enum FeatureFlag {
1919
TIME_SERIES_MODE("es.index_mode_feature_flag_registered=true", Version.fromString("8.0.0"), null),
2020
FAILURE_STORE_ENABLED("es.failure_store_feature_flag_enabled=true", Version.fromString("8.12.0"), null),
2121
SUB_OBJECTS_AUTO_ENABLED("es.sub_objects_auto_feature_flag_enabled=true", Version.fromString("8.16.0"), null),
22-
DOC_VALUES_SKIPPER("es.doc_values_skipper_feature_flag_enabled=true", Version.fromString("8.18.1"), null);
22+
DOC_VALUES_SKIPPER("es.doc_values_skipper_feature_flag_enabled=true", Version.fromString("8.18.1"), null),
23+
USE_LUCENE101_POSTINGS_FORMAT("es.use_lucene101_postings_format_feature_flag_enabled=true", Version.fromString("9.1.0"), null);
2324

2425
public final String systemProperty;
2526
public final Version from;

x-pack/plugin/logsdb/src/yamlRestTest/java/org/elasticsearch/xpack/logsdb/LogsdbTestSuiteIT.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ public class LogsdbTestSuiteIT extends ESClientYamlSuiteTestCase {
2525
.setting("xpack.security.enabled", "false")
2626
.setting("xpack.license.self_generated.type", "trial")
2727
.feature(FeatureFlag.DOC_VALUES_SKIPPER)
28+
.feature(FeatureFlag.USE_LUCENE101_POSTINGS_FORMAT)
2829
.build();
2930

3031
public LogsdbTestSuiteIT(@Name("yaml") ClientYamlTestCandidate testCandidate) {

x-pack/qa/core-rest-tests-with-security/src/yamlRestTest/java/org/elasticsearch/xpack/security/CoreWithSecurityClientYamlTestSuiteIT.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ public class CoreWithSecurityClientYamlTestSuiteIT extends ESClientYamlSuiteTest
5151
.feature(FeatureFlag.TIME_SERIES_MODE)
5252
.feature(FeatureFlag.SUB_OBJECTS_AUTO_ENABLED)
5353
.feature(FeatureFlag.DOC_VALUES_SKIPPER)
54+
.feature(FeatureFlag.USE_LUCENE101_POSTINGS_FORMAT)
5455
.build();
5556

5657
public CoreWithSecurityClientYamlTestSuiteIT(@Name("yaml") ClientYamlTestCandidate testCandidate) {

0 commit comments

Comments
 (0)