@@ -46,17 +46,36 @@ public class TimeSeriesIdFieldMapper extends MetadataFieldMapper {
4646 public static final String NAME = "_tsid" ;
4747 public static final String CONTENT_TYPE = "_tsid" ;
4848 public static final TimeSeriesIdFieldType FIELD_TYPE = new TimeSeriesIdFieldType ();
49- public static final TimeSeriesIdFieldMapper INSTANCE = new TimeSeriesIdFieldMapper ();
49+
50+ private static final TimeSeriesIdFieldMapper INSTANCE_WITHOUT_SKIPPER = new TimeSeriesIdFieldMapper (false );
51+ private static final TimeSeriesIdFieldMapper INSTANCE_WITH_SKIPPER = new TimeSeriesIdFieldMapper (true );
52+
53+ public static TimeSeriesIdFieldMapper getInstance (boolean useDocValuesSkipper ) {
54+ if (useDocValuesSkipper ) {
55+ return INSTANCE_WITH_SKIPPER ;
56+ } else {
57+ return INSTANCE_WITHOUT_SKIPPER ;
58+ }
59+ }
60+
61+ public static TimeSeriesIdFieldMapper getInstance (MappingParserContext context ) {
62+ boolean useDocValuesSkipper = context .indexVersionCreated ().onOrAfter (IndexVersions .TIME_SERIES_ID_DOC_VALUES_SPARSE_INDEX )
63+ && context .getIndexSettings ().useDocValuesSkipper ();
64+ return TimeSeriesIdFieldMapper .getInstance (useDocValuesSkipper );
65+ }
5066
5167 @ Override
5268 public FieldMapper .Builder getMergeBuilder () {
53- return new Builder ().init (this );
69+ return new Builder (this . useDocValuesSkipper ).init (this );
5470 }
5571
5672 public static class Builder extends MetadataFieldMapper .Builder {
5773
58- protected Builder () {
74+ private final boolean useDocValuesSkipper ;
75+
76+ protected Builder (boolean useDocValuesSkipper ) {
5977 super (NAME );
78+ this .useDocValuesSkipper = useDocValuesSkipper ;
6079 }
6180
6281 @ Override
@@ -66,11 +85,11 @@ protected Parameter<?>[] getParameters() {
6685
6786 @ Override
6887 public TimeSeriesIdFieldMapper build () {
69- return INSTANCE ;
88+ return TimeSeriesIdFieldMapper . getInstance ( useDocValuesSkipper ) ;
7089 }
7190 }
7291
73- public static final TypeParser PARSER = new FixedTypeParser (c -> c .getIndexSettings ().getMode ().timeSeriesIdFieldMapper ());
92+ public static final TypeParser PARSER = new FixedTypeParser (c -> c .getIndexSettings ().getMode ().timeSeriesIdFieldMapper (c ));
7493
7594 public static final class TimeSeriesIdFieldType extends MappedFieldType {
7695 private TimeSeriesIdFieldType () {
@@ -115,8 +134,11 @@ public Query termQuery(Object value, SearchExecutionContext context) {
115134 }
116135 }
117136
118- private TimeSeriesIdFieldMapper () {
137+ private final boolean useDocValuesSkipper ;
138+
139+ private TimeSeriesIdFieldMapper (boolean useDocValuesSkipper ) {
119140 super (FIELD_TYPE );
141+ this .useDocValuesSkipper = useDocValuesSkipper ;
120142 }
121143
122144 @ Override
@@ -135,7 +157,12 @@ public void postParse(DocumentParserContext context) throws IOException {
135157 } else {
136158 timeSeriesId = routingPathFields .buildHash ().toBytesRef ();
137159 }
138- context .doc ().add (new SortedDocValuesField (fieldType ().name (), timeSeriesId ));
160+
161+ if (this .useDocValuesSkipper ) {
162+ context .doc ().add (SortedDocValuesField .indexedField (fieldType ().name (), timeSeriesId ));
163+ } else {
164+ context .doc ().add (new SortedDocValuesField (fieldType ().name (), timeSeriesId ));
165+ }
139166
140167 BytesRef uidEncoded = TsidExtractingIdFieldMapper .createField (
141168 context ,
0 commit comments