|
@@ -33,6 +33,7 @@ import org.elasticsearch.common.CheckedIntFunction;
|
|
import org.elasticsearch.common.lucene.Lucene;
|
|
import org.elasticsearch.common.lucene.Lucene;
|
|
import org.elasticsearch.common.unit.Fuzziness;
|
|
import org.elasticsearch.common.unit.Fuzziness;
|
|
import org.elasticsearch.index.IndexVersion;
|
|
import org.elasticsearch.index.IndexVersion;
|
|
|
|
+import org.elasticsearch.index.IndexVersions;
|
|
import org.elasticsearch.index.analysis.IndexAnalyzers;
|
|
import org.elasticsearch.index.analysis.IndexAnalyzers;
|
|
import org.elasticsearch.index.analysis.NamedAnalyzer;
|
|
import org.elasticsearch.index.analysis.NamedAnalyzer;
|
|
import org.elasticsearch.index.fielddata.FieldDataContext;
|
|
import org.elasticsearch.index.fielddata.FieldDataContext;
|
|
@@ -101,12 +102,9 @@ public class MatchOnlyTextFieldMapper extends FieldMapper {
|
|
private final Parameter<Map<String, String>> meta = Parameter.metaParam();
|
|
private final Parameter<Map<String, String>> meta = Parameter.metaParam();
|
|
|
|
|
|
private final TextParams.Analyzers analyzers;
|
|
private final TextParams.Analyzers analyzers;
|
|
|
|
+ private final boolean withinMultiField;
|
|
|
|
|
|
- public Builder(String name, IndexAnalyzers indexAnalyzers) {
|
|
|
|
- this(name, IndexVersion.current(), indexAnalyzers);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public Builder(String name, IndexVersion indexCreatedVersion, IndexAnalyzers indexAnalyzers) {
|
|
|
|
|
|
+ public Builder(String name, IndexVersion indexCreatedVersion, IndexAnalyzers indexAnalyzers, boolean withinMultiField) {
|
|
super(name);
|
|
super(name);
|
|
this.indexCreatedVersion = indexCreatedVersion;
|
|
this.indexCreatedVersion = indexCreatedVersion;
|
|
this.analyzers = new TextParams.Analyzers(
|
|
this.analyzers = new TextParams.Analyzers(
|
|
@@ -115,6 +113,7 @@ public class MatchOnlyTextFieldMapper extends FieldMapper {
|
|
m -> ((MatchOnlyTextFieldMapper) m).positionIncrementGap,
|
|
m -> ((MatchOnlyTextFieldMapper) m).positionIncrementGap,
|
|
indexCreatedVersion
|
|
indexCreatedVersion
|
|
);
|
|
);
|
|
|
|
+ this.withinMultiField = withinMultiField;
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
@@ -140,18 +139,21 @@ public class MatchOnlyTextFieldMapper extends FieldMapper {
|
|
@Override
|
|
@Override
|
|
public MatchOnlyTextFieldMapper build(MapperBuilderContext context) {
|
|
public MatchOnlyTextFieldMapper build(MapperBuilderContext context) {
|
|
MatchOnlyTextFieldType tft = buildFieldType(context);
|
|
MatchOnlyTextFieldType tft = buildFieldType(context);
|
|
- return new MatchOnlyTextFieldMapper(
|
|
|
|
- leafName(),
|
|
|
|
- Defaults.FIELD_TYPE,
|
|
|
|
- tft,
|
|
|
|
- builderParams(this, context),
|
|
|
|
- context.isSourceSynthetic(),
|
|
|
|
- this
|
|
|
|
- );
|
|
|
|
|
|
+ final boolean storeSource;
|
|
|
|
+ if (indexCreatedVersion.onOrAfter(IndexVersions.MAPPER_TEXT_MATCH_ONLY_MULTI_FIELDS_DEFAULT_NOT_STORED_8_19)) {
|
|
|
|
+ storeSource = context.isSourceSynthetic()
|
|
|
|
+ && withinMultiField == false
|
|
|
|
+ && multiFieldsBuilder.hasSyntheticSourceCompatibleKeywordField() == false;
|
|
|
|
+ } else {
|
|
|
|
+ storeSource = context.isSourceSynthetic();
|
|
|
|
+ }
|
|
|
|
+ return new MatchOnlyTextFieldMapper(leafName(), Defaults.FIELD_TYPE, tft, builderParams(this, context), storeSource, this);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- public static final TypeParser PARSER = new TypeParser((n, c) -> new Builder(n, c.indexVersionCreated(), c.getIndexAnalyzers()));
|
|
|
|
|
|
+ public static final TypeParser PARSER = new TypeParser(
|
|
|
|
+ (n, c) -> new Builder(n, c.indexVersionCreated(), c.getIndexAnalyzers(), c.isWithinMultiField())
|
|
|
|
+ );
|
|
|
|
|
|
public static class MatchOnlyTextFieldType extends StringFieldType {
|
|
public static class MatchOnlyTextFieldType extends StringFieldType {
|
|
|
|
|
|
@@ -406,6 +408,7 @@ public class MatchOnlyTextFieldMapper extends FieldMapper {
|
|
private final int positionIncrementGap;
|
|
private final int positionIncrementGap;
|
|
private final boolean storeSource;
|
|
private final boolean storeSource;
|
|
private final FieldType fieldType;
|
|
private final FieldType fieldType;
|
|
|
|
+ private final boolean withinMultiField;
|
|
|
|
|
|
private MatchOnlyTextFieldMapper(
|
|
private MatchOnlyTextFieldMapper(
|
|
String simpleName,
|
|
String simpleName,
|
|
@@ -424,6 +427,7 @@ public class MatchOnlyTextFieldMapper extends FieldMapper {
|
|
this.indexAnalyzer = builder.analyzers.getIndexAnalyzer();
|
|
this.indexAnalyzer = builder.analyzers.getIndexAnalyzer();
|
|
this.positionIncrementGap = builder.analyzers.positionIncrementGap.getValue();
|
|
this.positionIncrementGap = builder.analyzers.positionIncrementGap.getValue();
|
|
this.storeSource = storeSource;
|
|
this.storeSource = storeSource;
|
|
|
|
+ this.withinMultiField = builder.withinMultiField;
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
@@ -433,7 +437,7 @@ public class MatchOnlyTextFieldMapper extends FieldMapper {
|
|
|
|
|
|
@Override
|
|
@Override
|
|
public FieldMapper.Builder getMergeBuilder() {
|
|
public FieldMapper.Builder getMergeBuilder() {
|
|
- return new Builder(leafName(), indexCreatedVersion, indexAnalyzers).init(this);
|
|
|
|
|
|
+ return new Builder(leafName(), indexCreatedVersion, indexAnalyzers, withinMultiField).init(this);
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|