Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
a8d6c64
Default indexed to false for keyword dimension fields
romseygeek Oct 23, 2025
1293cf4
[CI] Auto commit changes from spotless
Oct 23, 2025
553632c
Merge branch 'main' into dimensions/sparse-indexes
felixbarny Oct 23, 2025
40bfeb3
Same for IpFieldMapper
romseygeek Oct 23, 2025
0ca780c
Merge remote-tracking branch 'romseygeek/dimensions/sparse-indexes' i…
romseygeek Oct 23, 2025
54f19a0
[CI] Auto commit changes from spotless
Oct 23, 2025
d059b5f
Merge branch 'main' into dimensions/sparse-indexes
felixbarny Nov 4, 2025
ccc5f32
Merge remote-tracking branch 'origin/main' into dimensions/sparse-ind…
romseygeek Nov 7, 2025
eae14b0
Merge remote-tracking branch 'origin/main' into dimensions/sparse-ind…
romseygeek Nov 11, 2025
12cf479
wip
romseygeek Nov 11, 2025
eb86816
Use IndexType in TermBasedFieldType constructors
romseygeek Nov 11, 2025
e133d94
Merge branch 'kft/constructor-index-type' into dimensions/sparse-indexes
romseygeek Nov 11, 2025
86e5275
Use sparse indexes for dimension fields
romseygeek Nov 12, 2025
c75fd0a
Merge remote-tracking branch 'origin/main' into dimensions/sparse-ind…
romseygeek Nov 12, 2025
1a9b3a8
Merge remote-tracking branch 'origin/main' into dimensions/sparse-ind…
romseygeek Nov 12, 2025
ddd9647
iter
romseygeek Nov 12, 2025
b1c1ab7
Merge remote-tracking branch 'romseygeek/dimensions/sparse-indexes' i…
romseygeek Nov 12, 2025
ef2141a
Merge branch 'main' into dimensions/sparse-indexes
romseygeek Nov 12, 2025
57b0a61
precommit
romseygeek Nov 12, 2025
b8e2e24
Merge remote-tracking branch 'romseygeek/dimensions/sparse-indexes' i…
romseygeek Nov 12, 2025
667953e
iter
romseygeek Nov 12, 2025
38ee47a
iter
romseygeek Nov 12, 2025
59abb1d
Merge remote-tracking branch 'origin/main' into dimensions/sparse-ind…
romseygeek Nov 12, 2025
1780fc5
Merge branch 'main' into dimensions/sparse-indexes
romseygeek Nov 13, 2025
cefc10e
Merge branch 'main' into dimensions/sparse-indexes
romseygeek Nov 13, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,7 @@ private static KeywordFieldMapper toType(FieldMapper in) {

public static final class Builder extends FieldMapper.DimensionBuilder {

private final Parameter<Boolean> indexed = Parameter.indexParam(m -> toType(m).indexed, true);
private final Parameter<Boolean> indexed;
private final Parameter<Boolean> hasDocValues = Parameter.docValuesParam(m -> toType(m).hasDocValues, true);
private final Parameter<Boolean> stored = Parameter.storeParam(m -> toType(m).fieldType.stored(), false);

Expand Down Expand Up @@ -279,21 +279,20 @@ private Builder(
null
).acceptsNull();
this.script.precludesParameters(nullValue);
addScriptValidation(script, indexed, hasDocValues);

this.dimension = TimeSeriesParams.dimensionParam(m -> toType(m).fieldType().isDimension()).addValidator(v -> {
if (v && (indexed.getValue() == false || hasDocValues.getValue() == false)) {
if (v && (hasDocValues.getValue() == false)) {
Copy link
Member

@felixbarny felixbarny Oct 23, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this change will need to be applied to all field mappers that can be dimensions:

BooleanFieldMapper
FlattenedFieldMapper
GeoPointFieldMapper
IpFieldMapper
NumberFieldMapper
UnsignedLongFieldMapper

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, and it will need gating behind a FeatureFlag and IndexVersion too. This is just for experimenting, really.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we at least also add IpFieldMapper? I think that will be important for the experimentation.

throw new IllegalArgumentException(
"Field ["
+ TimeSeriesParams.TIME_SERIES_DIMENSION_PARAM
+ "] requires that ["
+ indexed.name
+ "] and ["
+ hasDocValues.name
+ "] are true"
+ "] is true"
);
}
}).precludesParameters(normalizer);
this.indexed = Parameter.indexParam(m -> toType(m).indexed, () -> this.dimension.get() == false);
addScriptValidation(script, indexed, hasDocValues);
this.ignoreAboveDefault = ignoreAboveDefault;
this.ignoreAbove = Parameter.ignoreAboveParam(m -> toType(m).fieldType().ignoreAbove().get(), ignoreAboveDefault);
this.indexSortConfig = indexSortConfig;
Expand Down Expand Up @@ -457,7 +456,7 @@ private KeywordFieldType buildFieldType(MapperBuilderContext context, FieldType
public KeywordFieldMapper build(MapperBuilderContext context) {
FieldType fieldtype = resolveFieldType(
enableDocValuesSkipper,
forceDocValuesSkipper,
forceDocValuesSkipper || (this.dimension.get() && this.indexed.get() == false),
hasDocValues,
indexCreatedVersion,
indexSortConfig,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -457,7 +457,7 @@ public void testDimensionIndexedAndDocvalues() {
})));
assertThat(
e.getCause().getMessage(),
containsString("Field [time_series_dimension] requires that [index] and [doc_values] are true")
containsString("Field [time_series_dimension] requires that [doc_values] is true")
);
}
{
Expand All @@ -467,17 +467,7 @@ public void testDimensionIndexedAndDocvalues() {
})));
assertThat(
e.getCause().getMessage(),
containsString("Field [time_series_dimension] requires that [index] and [doc_values] are true")
);
}
{
Exception e = expectThrows(MapperParsingException.class, () -> createDocumentMapper(fieldMapping(b -> {
minimalMapping(b);
b.field("time_series_dimension", true).field("index", false).field("doc_values", true);
})));
assertThat(
e.getCause().getMessage(),
containsString("Field [time_series_dimension] requires that [index] and [doc_values] are true")
containsString("Field [time_series_dimension] requires that [doc_values] is true")
);
}
}
Expand Down