From 5909f9f42f814e8b915a9f91b40861cf00b9373b Mon Sep 17 00:00:00 2001 From: Christos Soulios Date: Tue, 22 Jun 2021 18:34:18 +0300 Subject: [PATCH 01/17] Added dimension mapping parameter (WIP) Added parameter to field types: - Keyword - IP - Number --- .../index/mapper/IpFieldMapper.java | 18 +++++++-- .../index/mapper/KeywordFieldMapper.java | 40 +++++++++++++------ .../index/mapper/NumberFieldMapper.java | 29 +++++++++++--- .../index/mapper/TimeseriesParams.java | 22 ++++++++++ .../fielddata/IndexFieldDataServiceTests.java | 4 +- .../index/mapper/IpFieldMapperTests.java | 35 ++++++++++++++++ .../index/mapper/IpFieldTypeTests.java | 6 ++- .../index/mapper/KeywordFieldMapperTests.java | 39 +++++++++++++++++- .../index/mapper/NumberFieldMapperTests.java | 15 +++++++ .../index/mapper/NumberFieldTypeTests.java | 2 +- .../mapper/WholeNumberFieldMapperTests.java | 14 +++++++ .../aggregations/AggregatorBaseTests.java | 3 +- .../bucket/filter/FiltersAggregatorTests.java | 6 ++- .../bucket/range/RangeAggregatorTests.java | 9 +++-- .../bucket/terms/TermsAggregatorTests.java | 2 +- .../search/collapse/CollapseBuilderTests.java | 4 +- 16 files changed, 211 insertions(+), 37 deletions(-) create mode 100644 server/src/main/java/org/elasticsearch/index/mapper/TimeseriesParams.java diff --git a/server/src/main/java/org/elasticsearch/index/mapper/IpFieldMapper.java b/server/src/main/java/org/elasticsearch/index/mapper/IpFieldMapper.java index 677a0f9f7fb74..9230efa123c8a 100644 --- a/server/src/main/java/org/elasticsearch/index/mapper/IpFieldMapper.java +++ b/server/src/main/java/org/elasticsearch/index/mapper/IpFieldMapper.java @@ -72,6 +72,7 @@ public static class Builder extends FieldMapper.Builder { private final Parameter onScriptError = Parameter.onScriptErrorParam(m -> toType(m).onScriptError, script); private final Parameter> meta = Parameter.metaParam(); + private final Parameter dimension = TimeseriesParams.dimension(false, m -> toType(m).fieldType().isDimension()); private final boolean ignoreMalformedByDefault; private final Version indexCreatedVersion; @@ -124,14 +125,14 @@ private FieldValues scriptValues() { @Override protected List> getParameters() { - return List.of(indexed, hasDocValues, stored, ignoreMalformed, nullValue, script, onScriptError, meta); + return List.of(indexed, hasDocValues, stored, ignoreMalformed, nullValue, script, onScriptError, meta, dimension); } @Override public IpFieldMapper build(ContentPath contentPath) { return new IpFieldMapper(name, new IpFieldType(buildFullName(contentPath), indexed.getValue(), stored.getValue(), - hasDocValues.getValue(), parseNullValue(), scriptValues(), meta.getValue()), + hasDocValues.getValue(), parseNullValue(), scriptValues(), meta.getValue(), dimension.getValue()), multiFieldsBuilder.build(this, contentPath), copyTo.build(), this); } @@ -146,16 +147,18 @@ public static final class IpFieldType extends SimpleMappedFieldType { private final InetAddress nullValue; private final FieldValues scriptValues; + private final boolean isDimension; public IpFieldType(String name, boolean indexed, boolean stored, boolean hasDocValues, - InetAddress nullValue, FieldValues scriptValues, Map meta) { + InetAddress nullValue, FieldValues scriptValues, Map meta, boolean isDimension) { super(name, indexed, stored, hasDocValues, TextSearchInfo.SIMPLE_MATCH_WITHOUT_TERMS, meta); this.nullValue = nullValue; this.scriptValues = scriptValues; + this.isDimension = isDimension; } public IpFieldType(String name) { - this(name, true, false, true, null, null, Collections.emptyMap()); + this(name, true, false, true, null, null, Collections.emptyMap(), false); } @Override @@ -364,6 +367,13 @@ public DocValueFormat docValueFormat(@Nullable String format, ZoneId timeZone) { } return DocValueFormat.IP; } + + /** + * @return true if field has been marked as a dimension field + */ + public boolean isDimension() { + return isDimension; + } } private final boolean indexed; diff --git a/server/src/main/java/org/elasticsearch/index/mapper/KeywordFieldMapper.java b/server/src/main/java/org/elasticsearch/index/mapper/KeywordFieldMapper.java index 16a7d19f49174..75a19cde59b94 100644 --- a/server/src/main/java/org/elasticsearch/index/mapper/KeywordFieldMapper.java +++ b/server/src/main/java/org/elasticsearch/index/mapper/KeywordFieldMapper.java @@ -112,6 +112,7 @@ public static class Builder extends FieldMapper.Builder { private final Parameter