diff --git a/server/src/main/java/org/elasticsearch/index/codec/tsdb/AbstractTSDBSyntheticIdCodec.java b/server/src/main/java/org/elasticsearch/index/codec/tsdb/AbstractTSDBSyntheticIdCodec.java index 33c2a57afff28..fbab71afc5790 100644 --- a/server/src/main/java/org/elasticsearch/index/codec/tsdb/AbstractTSDBSyntheticIdCodec.java +++ b/server/src/main/java/org/elasticsearch/index/codec/tsdb/AbstractTSDBSyntheticIdCodec.java @@ -9,15 +9,17 @@ package org.elasticsearch.index.codec.tsdb; -import org.apache.lucene.codecs.Codec; +import org.apache.lucene.codecs.DocValuesFormat; import org.apache.lucene.codecs.FieldInfosFormat; import org.apache.lucene.codecs.FilterCodec; import org.apache.lucene.codecs.StoredFieldsFormat; +import org.apache.lucene.codecs.lucene104.Lucene104Codec; import org.apache.lucene.index.FieldInfos; import org.apache.lucene.index.IndexOptions; import org.apache.lucene.index.SegmentInfo; import org.apache.lucene.store.Directory; import org.apache.lucene.store.IOContext; +import org.elasticsearch.index.codec.perfield.XPerFieldDocValuesFormat; import org.elasticsearch.index.codec.storedfields.TSDBStoredFieldsFormat; import org.elasticsearch.index.mapper.SyntheticIdField; @@ -50,11 +52,18 @@ abstract class AbstractTSDBSyntheticIdCodec extends FilterCodec { private final TSDBStoredFieldsFormat storedFieldsFormat; private final ValidatingFieldInfosFormat fieldInfosFormat; + private final DocValuesFormat docValuesFormat; - AbstractTSDBSyntheticIdCodec(String name, Codec delegate) { + AbstractTSDBSyntheticIdCodec(String name, Lucene104Codec delegate) { super(name, delegate); this.storedFieldsFormat = new TSDBStoredFieldsFormat(delegate.storedFieldsFormat()); this.fieldInfosFormat = new ValidatingFieldInfosFormat(delegate.fieldInfosFormat()); + this.docValuesFormat = new XPerFieldDocValuesFormat() { + @Override + public DocValuesFormat getDocValuesFormatForField(String field) { + return delegate.getDocValuesFormatForField(field); + } + }; } @Override @@ -62,6 +71,11 @@ public StoredFieldsFormat storedFieldsFormat() { return storedFieldsFormat; } + @Override + public DocValuesFormat docValuesFormat() { + return docValuesFormat; + } + @Override public final FieldInfosFormat fieldInfosFormat() { return fieldInfosFormat; diff --git a/server/src/test/java/org/elasticsearch/index/codec/tsdb/es819/TSDBDocValuesFormatSingleNodeTests.java b/server/src/test/java/org/elasticsearch/index/codec/tsdb/es819/TSDBDocValuesFormatSingleNodeTests.java index f4e2d70bc599f..09514b3a44f4c 100644 --- a/server/src/test/java/org/elasticsearch/index/codec/tsdb/es819/TSDBDocValuesFormatSingleNodeTests.java +++ b/server/src/test/java/org/elasticsearch/index/codec/tsdb/es819/TSDBDocValuesFormatSingleNodeTests.java @@ -10,7 +10,6 @@ package org.elasticsearch.index.codec.tsdb.es819; import org.apache.lucene.codecs.DocValuesFormat; -import org.apache.lucene.codecs.perfield.PerFieldDocValuesFormat; import org.apache.lucene.index.DocValuesType; import org.apache.lucene.index.FieldInfo; import org.apache.lucene.index.LeafReaderContext; @@ -24,6 +23,7 @@ import org.elasticsearch.index.codec.CodecService; import org.elasticsearch.index.codec.Elasticsearch93Lucene104Codec; import org.elasticsearch.index.codec.LegacyPerFieldMapperCodec; +import org.elasticsearch.index.codec.perfield.XPerFieldDocValuesFormat; import org.elasticsearch.index.codec.tsdb.ES93TSDBDefaultCompressionLucene103Codec; import org.elasticsearch.index.codec.tsdb.PartitionedDocValues; import org.elasticsearch.index.engine.Engine; @@ -169,8 +169,8 @@ private void assertDocValuesFormat(String indexName, DocValuesFormat expectedFor if (deduplicateFieldInfosCodec.delegate() instanceof LegacyPerFieldMapperCodec legacyPerFieldMapperCodec) { docValuesFormatProvider = legacyPerFieldMapperCodec::getDocValuesFormatForField; } else if (deduplicateFieldInfosCodec.delegate() instanceof ES93TSDBDefaultCompressionLucene103Codec es93TSDB103Codec) { - assertThat(es93TSDB103Codec.docValuesFormat(), instanceOf(PerFieldDocValuesFormat.class)); - docValuesFormatProvider = (field) -> ((PerFieldDocValuesFormat) es93TSDB103Codec.docValuesFormat()) + assertThat(es93TSDB103Codec.docValuesFormat(), instanceOf(XPerFieldDocValuesFormat.class)); + docValuesFormatProvider = (field) -> ((XPerFieldDocValuesFormat) es93TSDB103Codec.docValuesFormat()) .getDocValuesFormatForField(field); } else { fail("Unexpected codec type: " + codec.getClass().getName());