Skip to content

Commit 4f03296

Browse files
committed
Abstracted how Text fields use Keyword fields inside of Text fields
1 parent 7d2de6b commit 4f03296

File tree

12 files changed

+344
-229
lines changed

12 files changed

+344
-229
lines changed

modules/mapper-extras/src/main/java/org/elasticsearch/index/mapper/extras/MatchOnlyTextFieldMapper.java

Lines changed: 135 additions & 101 deletions
Large diffs are not rendered by default.

modules/percolator/src/main/java/org/elasticsearch/percolator/PercolatorFieldMapper.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@ static KeywordFieldMapper createExtractQueryFieldBuilder(
182182
MapperBuilderContext context,
183183
IndexVersion indexCreatedVersion
184184
) {
185-
KeywordFieldMapper.Builder queryMetadataFieldBuilder = new KeywordFieldMapper.Builder(name, indexCreatedVersion);
185+
KeywordFieldMapper.Builder queryMetadataFieldBuilder = new KeywordFieldMapper.Builder(name, indexCreatedVersion, false);
186186
queryMetadataFieldBuilder.docValues(false);
187187
return queryMetadataFieldBuilder.build(context);
188188
}

server/src/main/java/org/elasticsearch/index/mapper/CompositeSyntheticFieldLoader.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,15 @@ public String fieldName() {
132132
return this.fullFieldName;
133133
}
134134

135+
/**
136+
* Merge the other {@link CompositeSyntheticFieldLoader} into this one.
137+
*/
138+
public void merge(final CompositeSyntheticFieldLoader other) {
139+
if (other != null) {
140+
this.parts.addAll(other.parts);
141+
}
142+
}
143+
135144
/**
136145
* Represents one layer of loading synthetic source values for a field
137146
* as a part of {@link CompositeSyntheticFieldLoader}.

server/src/main/java/org/elasticsearch/index/mapper/DynamicFieldsBuilder.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -329,15 +329,19 @@ public boolean newDynamicStringField(DocumentParserContext context, String name)
329329
MapperBuilderContext mapperBuilderContext = context.createDynamicMapperBuilderContext();
330330
if (mapperBuilderContext.parentObjectContainsDimensions()) {
331331
return createDynamicField(
332-
new KeywordFieldMapper.Builder(name, context.indexSettings().getIndexVersionCreated()),
332+
new KeywordFieldMapper.Builder(name, context.indexSettings().getIndexVersionCreated(), false),
333333
context,
334334
mapperBuilderContext
335335
);
336336
} else {
337337
return createDynamicField(
338-
new TextFieldMapper.Builder(name, context.indexAnalyzers(), SourceFieldMapper.isSynthetic(context.indexSettings()))
338+
new TextFieldMapper.Builder(name, context.indexAnalyzers())
339339
.addMultiField(
340-
new KeywordFieldMapper.Builder("keyword", context.indexSettings().getIndexVersionCreated()).ignoreAbove(256)
340+
new KeywordFieldMapper.Builder(
341+
"keyword",
342+
context.indexSettings().getIndexVersionCreated(),
343+
true)
344+
.ignoreAbove(256)
341345
),
342346
context
343347
);

server/src/main/java/org/elasticsearch/index/mapper/FieldMapper.java

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -610,28 +610,13 @@ public static class Builder {
610610

611611
private final Map<String, Function<MapperBuilderContext, FieldMapper>> mapperBuilders = new HashMap<>();
612612

613-
private boolean hasSyntheticSourceCompatibleKeywordField;
614-
615613
public Builder add(FieldMapper.Builder builder) {
616614
mapperBuilders.put(builder.leafName(), builder::build);
617-
618-
if (builder instanceof KeywordFieldMapper.Builder kwd) {
619-
if (kwd.hasNormalizer() == false && (kwd.hasDocValues() || kwd.isStored())) {
620-
hasSyntheticSourceCompatibleKeywordField = true;
621-
}
622-
}
623-
624615
return this;
625616
}
626617

627618
private void add(FieldMapper mapper) {
628619
mapperBuilders.put(mapper.leafName(), context -> mapper);
629-
630-
if (mapper instanceof KeywordFieldMapper kwd) {
631-
if (kwd.hasNormalizer() == false && (kwd.fieldType().hasDocValues() || kwd.fieldType().isStored())) {
632-
hasSyntheticSourceCompatibleKeywordField = true;
633-
}
634-
}
635620
}
636621

637622
private void update(FieldMapper toMerge, MapperMergeContext context) {
@@ -649,10 +634,6 @@ public boolean hasMultiFields() {
649634
return mapperBuilders.isEmpty() == false;
650635
}
651636

652-
public boolean hasSyntheticSourceCompatibleKeywordField() {
653-
return hasSyntheticSourceCompatibleKeywordField;
654-
}
655-
656637
public MultiFields build(Mapper.Builder mainFieldBuilder, MapperBuilderContext context) {
657638
if (mapperBuilders.isEmpty()) {
658639
return empty();

0 commit comments

Comments
 (0)