Skip to content

Commit 40b4c1a

Browse files
committed
flattened field type
1 parent b1e4a24 commit 40b4c1a

File tree

2 files changed

+40
-19
lines changed

2 files changed

+40
-19
lines changed

server/src/main/java/org/elasticsearch/index/mapper/flattened/FlattenedFieldMapper.java

Lines changed: 26 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ public static class Builder extends FieldMapper.Builder {
140140
}
141141
});
142142

143-
private final Parameter<Boolean> indexed = Parameter.indexParam(m -> builder(m).indexed.get(), true);
143+
private final Parameter<Boolean> indexed;
144144
private final Parameter<Boolean> hasDocValues = Parameter.docValuesParam(m -> builder(m).hasDocValues.get(), true);
145145

146146
private final Parameter<String> nullValue = Parameter.stringParam("null_value", false, m -> builder(m).nullValue.get(), null)
@@ -154,6 +154,7 @@ public static class Builder extends FieldMapper.Builder {
154154
);
155155
private final int ignoreAboveDefault;
156156
private final Parameter<Integer> ignoreAbove;
157+
private final boolean indexDisabledByDefault;
157158

158159
private final Parameter<String> indexOptions = TextParams.keywordIndexOptions(m -> builder(m).indexOptions.get());
159160
private final Parameter<SimilarityProvider> similarity = TextParams.similarity(m -> builder(m).similarity.get());
@@ -164,32 +165,33 @@ public static class Builder extends FieldMapper.Builder {
164165
m -> builder(m).splitQueriesOnWhitespace.get(),
165166
false
166167
);
167-
private final Parameter<List<String>> dimensions = dimensionsParam(m -> builder(m).dimensions.get()).addValidator(v -> {
168-
if (v.isEmpty() == false && (indexed.getValue() == false || hasDocValues.getValue() == false)) {
169-
throw new IllegalArgumentException(
170-
"Field ["
171-
+ TIME_SERIES_DIMENSIONS_ARRAY_PARAM
172-
+ "] requires that ["
173-
+ indexed.name
174-
+ "] and ["
175-
+ hasDocValues.name
176-
+ "] are true"
177-
);
178-
}
179-
});
180-
168+
private final Parameter<List<String>> dimensions;
181169
private final Parameter<Map<String, String>> meta = Parameter.metaParam();
182170

183171
public static FieldMapper.Parameter<List<String>> dimensionsParam(Function<FieldMapper, List<String>> initializer) {
184172
return FieldMapper.Parameter.stringArrayParam(TIME_SERIES_DIMENSIONS_ARRAY_PARAM, false, initializer);
185173
}
186174

187175
public Builder(final String name) {
188-
this(name, Integer.MAX_VALUE);
176+
this(name, Integer.MAX_VALUE, false);
189177
}
190178

191-
private Builder(String name, int ignoreAboveDefault) {
179+
private Builder(String name, int ignoreAboveDefault, boolean indexDisabledByDefault) {
192180
super(name);
181+
this.indexed = Parameter.indexParam(m -> builder(m).indexed.get(), indexDisabledByDefault == false);
182+
this.dimensions = dimensionsParam(m -> builder(m).dimensions.get()).addValidator(v -> {
183+
if (v.isEmpty() == false && (indexed.getValue() == false || hasDocValues.getValue() == false)) {
184+
throw new IllegalArgumentException(
185+
"Field ["
186+
+ TIME_SERIES_DIMENSIONS_ARRAY_PARAM
187+
+ "] requires that ["
188+
+ indexed.name
189+
+ "] and ["
190+
+ hasDocValues.name
191+
+ "] are true"
192+
);
193+
}
194+
});
193195
this.ignoreAboveDefault = ignoreAboveDefault;
194196
this.ignoreAbove = Parameter.intParam("ignore_above", true, m -> builder(m).ignoreAbove.get(), ignoreAboveDefault)
195197
.addValidator(v -> {
@@ -198,6 +200,7 @@ private Builder(String name, int ignoreAboveDefault) {
198200
}
199201
});
200202
this.dimensions.precludesParameters(ignoreAbove);
203+
this.indexDisabledByDefault = indexDisabledByDefault;
201204
}
202205

203206
@Override
@@ -239,7 +242,9 @@ public FlattenedFieldMapper build(MapperBuilderContext context) {
239242
}
240243
}
241244

242-
public static final TypeParser PARSER = new TypeParser((n, c) -> new Builder(n, IGNORE_ABOVE_SETTING.get(c.getSettings())));
245+
public static final TypeParser PARSER = new TypeParser(
246+
(n, c) -> new Builder(n, IGNORE_ABOVE_SETTING.get(c.getSettings()), c.getIndexSettings().isIndexDisabledByDefault())
247+
);
243248

244249
/**
245250
* A field type that represents the values under a particular JSON key, used
@@ -827,6 +832,7 @@ public void validateMatchedRoutingPath(final String routingPath) {
827832

828833
private final FlattenedFieldParser fieldParser;
829834
private final Builder builder;
835+
private final boolean indexDisabledByDefault;
830836

831837
private FlattenedFieldMapper(
832838
String leafName,
@@ -848,6 +854,7 @@ private FlattenedFieldMapper(
848854
builder.ignoreAbove.get(),
849855
builder.nullValue.get()
850856
);
857+
this.indexDisabledByDefault = builder.indexDisabledByDefault;
851858
}
852859

853860
@Override
@@ -905,7 +912,7 @@ protected void parseCreateField(DocumentParserContext context) throws IOExceptio
905912

906913
@Override
907914
public FieldMapper.Builder getMergeBuilder() {
908-
return new Builder(leafName(), ignoreAboveDefault).init(this);
915+
return new Builder(leafName(), ignoreAboveDefault, indexDisabledByDefault).init(this);
909916
}
910917

911918
@Override

server/src/test/java/org/elasticsearch/index/mapper/flattened/FlattenedFieldMapperTests.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,20 @@ public void testDisableIndex() throws Exception {
244244
assertEquals(DocValuesType.SORTED_SET, keyedFields.get(0).fieldType().docValuesType());
245245
}
246246

247+
public void testDisableDefaultIndex() throws IOException {
248+
var settings = Settings.builder().put(IndexSettings.INDEX_DISABLED_BY_DEFAULT.getKey(), true).build();
249+
var mapperService = createMapperService(settings, fieldMapping(b -> b.field("type", "flattened")));
250+
var documentMapper = mapperService.documentMapper();
251+
ParsedDocument doc = documentMapper.parse(source(b -> b.startObject("field").field("key", "value").endObject()));
252+
List<IndexableField> fields = doc.rootDoc().getFields("field");
253+
assertEquals(1, fields.size());
254+
assertEquals(DocValuesType.SORTED_SET, fields.get(0).fieldType().docValuesType());
255+
256+
List<IndexableField> keyedFields = doc.rootDoc().getFields("field._keyed");
257+
assertEquals(1, keyedFields.size());
258+
assertEquals(DocValuesType.SORTED_SET, keyedFields.get(0).fieldType().docValuesType());
259+
}
260+
247261
public void testDisableDocValues() throws Exception {
248262

249263
DocumentMapper mapper = createDocumentMapper(fieldMapping(b -> {

0 commit comments

Comments
 (0)