mirror of
https://github.com/elastic/elasticsearch.git
synced 2025-06-28 09:28:55 -04:00
Refactor build params for FieldMapper, adding SourceKeepMode (#112455)
* Refactor build params for FieldMapper
* more mappers and tests
* more mappers
* more mappers
* spotless
* spotless
* stored by default
* Revert "stored by default"
This reverts commit bbd247d64b
.
* restore storeIgnored
* sync
* list valid values for SourceKeepMode
* small refactoring
* spotless
This commit is contained in:
parent
cd39fc8e55
commit
f3bc281978
54 changed files with 345 additions and 440 deletions
|
@ -352,7 +352,7 @@ public class LegacyGeoShapeFieldMapper extends AbstractShapeGeometryFieldMapper<
|
|||
public LegacyGeoShapeFieldMapper build(MapperBuilderContext context) {
|
||||
LegacyGeoShapeParser parser = new LegacyGeoShapeParser();
|
||||
GeoShapeFieldType ft = buildFieldType(parser, context);
|
||||
return new LegacyGeoShapeFieldMapper(leafName(), ft, multiFieldsBuilder.build(this, context), copyTo, parser, this);
|
||||
return new LegacyGeoShapeFieldMapper(leafName(), ft, builderParams(this, context), parser, this);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -537,20 +537,18 @@ public class LegacyGeoShapeFieldMapper extends AbstractShapeGeometryFieldMapper<
|
|||
public LegacyGeoShapeFieldMapper(
|
||||
String simpleName,
|
||||
MappedFieldType mappedFieldType,
|
||||
MultiFields multiFields,
|
||||
CopyTo copyTo,
|
||||
BuilderParams builderParams,
|
||||
LegacyGeoShapeParser parser,
|
||||
Builder builder
|
||||
) {
|
||||
super(
|
||||
simpleName,
|
||||
mappedFieldType,
|
||||
builderParams,
|
||||
builder.ignoreMalformed.get(),
|
||||
builder.coerce.get(),
|
||||
builder.ignoreZValue.get(),
|
||||
builder.orientation.get(),
|
||||
multiFields,
|
||||
copyTo,
|
||||
parser
|
||||
);
|
||||
this.indexCreatedVersion = builder.indexCreatedVersion;
|
||||
|
|
|
@ -139,13 +139,11 @@ public class MatchOnlyTextFieldMapper extends FieldMapper {
|
|||
@Override
|
||||
public MatchOnlyTextFieldMapper build(MapperBuilderContext context) {
|
||||
MatchOnlyTextFieldType tft = buildFieldType(context);
|
||||
MultiFields multiFields = multiFieldsBuilder.build(this, context);
|
||||
return new MatchOnlyTextFieldMapper(
|
||||
leafName(),
|
||||
Defaults.FIELD_TYPE,
|
||||
tft,
|
||||
multiFields,
|
||||
copyTo,
|
||||
builderParams(this, context),
|
||||
context.isSourceSynthetic(),
|
||||
this
|
||||
);
|
||||
|
@ -382,12 +380,11 @@ public class MatchOnlyTextFieldMapper extends FieldMapper {
|
|||
String simpleName,
|
||||
FieldType fieldType,
|
||||
MatchOnlyTextFieldType mappedFieldType,
|
||||
MultiFields multiFields,
|
||||
CopyTo copyTo,
|
||||
BuilderParams builderParams,
|
||||
boolean storeSource,
|
||||
Builder builder
|
||||
) {
|
||||
super(simpleName, mappedFieldType, multiFields, copyTo, false, null);
|
||||
super(simpleName, mappedFieldType, builderParams);
|
||||
assert mappedFieldType.getTextSearchInfo().isTokenized();
|
||||
assert mappedFieldType.hasDocValues() == false;
|
||||
this.fieldType = freezeAndDeduplicateFieldType(fieldType);
|
||||
|
@ -442,7 +439,7 @@ public class MatchOnlyTextFieldMapper extends FieldMapper {
|
|||
|
||||
@Override
|
||||
public SourceLoader.SyntheticFieldLoader syntheticFieldLoader() {
|
||||
if (copyTo.copyToFields().isEmpty() != true) {
|
||||
if (copyTo().copyToFields().isEmpty() != true) {
|
||||
throw new IllegalArgumentException(
|
||||
"field [" + fullPath() + "] of type [" + typeName() + "] doesn't support synthetic source because it declares copy_to"
|
||||
);
|
||||
|
|
|
@ -98,8 +98,7 @@ public class RankFeatureFieldMapper extends FieldMapper {
|
|||
positiveScoreImpact.getValue(),
|
||||
nullValue.getValue()
|
||||
),
|
||||
multiFieldsBuilder.build(this, context),
|
||||
copyTo,
|
||||
builderParams(this, context),
|
||||
positiveScoreImpact.getValue(),
|
||||
nullValue.getValue()
|
||||
);
|
||||
|
@ -172,12 +171,11 @@ public class RankFeatureFieldMapper extends FieldMapper {
|
|||
private RankFeatureFieldMapper(
|
||||
String simpleName,
|
||||
MappedFieldType mappedFieldType,
|
||||
MultiFields multiFields,
|
||||
CopyTo copyTo,
|
||||
BuilderParams builderParams,
|
||||
boolean positiveScoreImpact,
|
||||
Float nullValue
|
||||
) {
|
||||
super(simpleName, mappedFieldType, multiFields, copyTo, false, null);
|
||||
super(simpleName, mappedFieldType, builderParams);
|
||||
this.positiveScoreImpact = positiveScoreImpact;
|
||||
this.nullValue = nullValue;
|
||||
}
|
||||
|
|
|
@ -66,8 +66,7 @@ public class RankFeaturesFieldMapper extends FieldMapper {
|
|||
return new RankFeaturesFieldMapper(
|
||||
leafName(),
|
||||
new RankFeaturesFieldType(context.buildFullName(leafName()), meta.getValue(), positiveScoreImpact.getValue()),
|
||||
multiFieldsBuilder.build(this, context),
|
||||
copyTo,
|
||||
builderParams(this, context),
|
||||
positiveScoreImpact.getValue()
|
||||
);
|
||||
}
|
||||
|
@ -122,11 +121,10 @@ public class RankFeaturesFieldMapper extends FieldMapper {
|
|||
private RankFeaturesFieldMapper(
|
||||
String simpleName,
|
||||
MappedFieldType mappedFieldType,
|
||||
MultiFields multiFields,
|
||||
CopyTo copyTo,
|
||||
BuilderParams builderParams,
|
||||
boolean positiveScoreImpact
|
||||
) {
|
||||
super(simpleName, mappedFieldType, multiFields, copyTo, false, null);
|
||||
super(simpleName, mappedFieldType, builderParams);
|
||||
this.positiveScoreImpact = positiveScoreImpact;
|
||||
}
|
||||
|
||||
|
|
|
@ -197,14 +197,7 @@ public class ScaledFloatFieldMapper extends FieldMapper {
|
|||
metric.getValue(),
|
||||
indexMode
|
||||
);
|
||||
return new ScaledFloatFieldMapper(
|
||||
leafName(),
|
||||
type,
|
||||
multiFieldsBuilder.build(this, context),
|
||||
copyTo,
|
||||
context.isSourceSynthetic(),
|
||||
this
|
||||
);
|
||||
return new ScaledFloatFieldMapper(leafName(), type, builderParams(this, context), context.isSourceSynthetic(), this);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -470,12 +463,11 @@ public class ScaledFloatFieldMapper extends FieldMapper {
|
|||
private ScaledFloatFieldMapper(
|
||||
String simpleName,
|
||||
ScaledFloatFieldType mappedFieldType,
|
||||
MultiFields multiFields,
|
||||
CopyTo copyTo,
|
||||
BuilderParams builderParams,
|
||||
boolean isSourceSynthetic,
|
||||
Builder builder
|
||||
) {
|
||||
super(simpleName, mappedFieldType, multiFields, copyTo);
|
||||
super(simpleName, mappedFieldType, builderParams);
|
||||
this.isSourceSynthetic = isSourceSynthetic;
|
||||
this.indexed = builder.indexed.getValue();
|
||||
this.hasDocValues = builder.hasDocValues.getValue();
|
||||
|
@ -728,7 +720,7 @@ public class ScaledFloatFieldMapper extends FieldMapper {
|
|||
+ "] doesn't support synthetic source because it doesn't have doc values"
|
||||
);
|
||||
}
|
||||
if (copyTo.copyToFields().isEmpty() != true) {
|
||||
if (copyTo().copyToFields().isEmpty() != true) {
|
||||
throw new IllegalArgumentException(
|
||||
"field [" + fullPath() + "] of type [" + typeName() + "] doesn't support synthetic source because it declares copy_to"
|
||||
);
|
||||
|
|
|
@ -262,11 +262,10 @@ public class SearchAsYouTypeFieldMapper extends FieldMapper {
|
|||
return new SearchAsYouTypeFieldMapper(
|
||||
leafName(),
|
||||
ft,
|
||||
copyTo,
|
||||
builderParams(this, context),
|
||||
indexAnalyzers,
|
||||
prefixFieldMapper,
|
||||
shingleFieldMappers,
|
||||
multiFieldsBuilder.build(this, context),
|
||||
this
|
||||
);
|
||||
}
|
||||
|
@ -498,7 +497,7 @@ public class SearchAsYouTypeFieldMapper extends FieldMapper {
|
|||
final FieldType fieldType;
|
||||
|
||||
PrefixFieldMapper(FieldType fieldType, PrefixFieldType mappedFieldType) {
|
||||
super(mappedFieldType.name(), mappedFieldType, MultiFields.empty(), CopyTo.empty());
|
||||
super(mappedFieldType.name(), mappedFieldType, BuilderParams.empty());
|
||||
this.fieldType = Mapper.freezeAndDeduplicateFieldType(fieldType);
|
||||
}
|
||||
|
||||
|
@ -537,7 +536,7 @@ public class SearchAsYouTypeFieldMapper extends FieldMapper {
|
|||
private final FieldType fieldType;
|
||||
|
||||
ShingleFieldMapper(FieldType fieldType, ShingleFieldType mappedFieldtype) {
|
||||
super(mappedFieldtype.name(), mappedFieldtype, MultiFields.empty(), CopyTo.empty());
|
||||
super(mappedFieldtype.name(), mappedFieldtype, BuilderParams.empty());
|
||||
this.fieldType = freezeAndDeduplicateFieldType(fieldType);
|
||||
}
|
||||
|
||||
|
@ -672,14 +671,13 @@ public class SearchAsYouTypeFieldMapper extends FieldMapper {
|
|||
public SearchAsYouTypeFieldMapper(
|
||||
String simpleName,
|
||||
SearchAsYouTypeFieldType mappedFieldType,
|
||||
CopyTo copyTo,
|
||||
BuilderParams builderParams,
|
||||
Map<String, NamedAnalyzer> indexAnalyzers,
|
||||
PrefixFieldMapper prefixField,
|
||||
ShingleFieldMapper[] shingleFields,
|
||||
MultiFields multiFields,
|
||||
Builder builder
|
||||
) {
|
||||
super(simpleName, mappedFieldType, multiFields, copyTo, false, null);
|
||||
super(simpleName, mappedFieldType, builderParams);
|
||||
this.prefixField = prefixField;
|
||||
this.shingleFields = shingleFields;
|
||||
this.maxShingleSize = builder.maxShingleSize.getValue();
|
||||
|
|
|
@ -87,7 +87,7 @@ public class TokenCountFieldMapper extends FieldMapper {
|
|||
nullValue.getValue(),
|
||||
meta.getValue()
|
||||
);
|
||||
return new TokenCountFieldMapper(leafName(), ft, multiFieldsBuilder.build(this, context), copyTo, this);
|
||||
return new TokenCountFieldMapper(leafName(), ft, builderParams(this, context), this);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -135,14 +135,8 @@ public class TokenCountFieldMapper extends FieldMapper {
|
|||
private final boolean enablePositionIncrements;
|
||||
private final Integer nullValue;
|
||||
|
||||
protected TokenCountFieldMapper(
|
||||
String simpleName,
|
||||
MappedFieldType defaultFieldType,
|
||||
MultiFields multiFields,
|
||||
CopyTo copyTo,
|
||||
Builder builder
|
||||
) {
|
||||
super(simpleName, defaultFieldType, multiFields, copyTo);
|
||||
protected TokenCountFieldMapper(String simpleName, MappedFieldType defaultFieldType, BuilderParams builderParams, Builder builder) {
|
||||
super(simpleName, defaultFieldType, builderParams);
|
||||
this.analyzer = builder.analyzer.getValue();
|
||||
this.enablePositionIncrements = builder.enablePositionIncrements.getValue();
|
||||
this.nullValue = builder.nullValue.getValue();
|
||||
|
|
|
@ -88,7 +88,7 @@ public final class ParentIdFieldMapper extends FieldMapper {
|
|||
}
|
||||
|
||||
protected ParentIdFieldMapper(String name, boolean eagerGlobalOrdinals) {
|
||||
super(name, new ParentIdFieldType(name, eagerGlobalOrdinals), MultiFields.empty(), CopyTo.empty(), false, null);
|
||||
super(name, new ParentIdFieldType(name, eagerGlobalOrdinals), BuilderParams.empty());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -210,7 +210,7 @@ public final class ParentJoinFieldMapper extends FieldMapper {
|
|||
boolean eagerGlobalOrdinals,
|
||||
List<Relations> relations
|
||||
) {
|
||||
super(simpleName, mappedFieldType, MultiFields.empty(), CopyTo.empty(), false, null);
|
||||
super(simpleName, mappedFieldType, BuilderParams.empty());
|
||||
this.parentIdFields = parentIdFields;
|
||||
this.eagerGlobalOrdinals = eagerGlobalOrdinals;
|
||||
this.relations = relations;
|
||||
|
|
|
@ -137,8 +137,6 @@ public class PercolatorFieldMapper extends FieldMapper {
|
|||
@Override
|
||||
public PercolatorFieldMapper build(MapperBuilderContext context) {
|
||||
PercolatorFieldType fieldType = new PercolatorFieldType(context.buildFullName(leafName()), meta.getValue());
|
||||
// TODO should percolator even allow multifields?
|
||||
MultiFields multiFields = multiFieldsBuilder.build(this, context);
|
||||
context = context.createChildContext(leafName(), null);
|
||||
KeywordFieldMapper extractedTermsField = createExtractQueryFieldBuilder(
|
||||
EXTRACTED_TERMS_FIELD_NAME,
|
||||
|
@ -165,8 +163,7 @@ public class PercolatorFieldMapper extends FieldMapper {
|
|||
return new PercolatorFieldMapper(
|
||||
leafName(),
|
||||
fieldType,
|
||||
multiFields,
|
||||
copyTo,
|
||||
builderParams(this, context),
|
||||
searchExecutionContext,
|
||||
extractedTermsField,
|
||||
extractionResultField,
|
||||
|
@ -375,8 +372,7 @@ public class PercolatorFieldMapper extends FieldMapper {
|
|||
PercolatorFieldMapper(
|
||||
String simpleName,
|
||||
MappedFieldType mappedFieldType,
|
||||
MultiFields multiFields,
|
||||
CopyTo copyTo,
|
||||
BuilderParams builderParams,
|
||||
Supplier<SearchExecutionContext> searchExecutionContext,
|
||||
KeywordFieldMapper queryTermsField,
|
||||
KeywordFieldMapper extractionResultField,
|
||||
|
@ -387,7 +383,7 @@ public class PercolatorFieldMapper extends FieldMapper {
|
|||
IndexVersion indexCreatedVersion,
|
||||
Supplier<TransportVersion> clusterTransportVersion
|
||||
) {
|
||||
super(simpleName, mappedFieldType, multiFields, copyTo);
|
||||
super(simpleName, mappedFieldType, builderParams);
|
||||
this.searchExecutionContext = searchExecutionContext;
|
||||
this.queryTermsField = queryTermsField;
|
||||
this.extractionResultField = extractionResultField;
|
||||
|
|
|
@ -336,15 +336,7 @@ public class ICUCollationKeywordFieldMapper extends FieldMapper {
|
|||
ignoreAbove.getValue(),
|
||||
meta.getValue()
|
||||
);
|
||||
return new ICUCollationKeywordFieldMapper(
|
||||
leafName(),
|
||||
buildFieldType(),
|
||||
ft,
|
||||
multiFieldsBuilder.build(this, context),
|
||||
copyTo,
|
||||
collator,
|
||||
this
|
||||
);
|
||||
return new ICUCollationKeywordFieldMapper(leafName(), buildFieldType(), ft, builderParams(this, context), collator, this);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -474,12 +466,11 @@ public class ICUCollationKeywordFieldMapper extends FieldMapper {
|
|||
String simpleName,
|
||||
FieldType fieldType,
|
||||
MappedFieldType mappedFieldType,
|
||||
MultiFields multiFields,
|
||||
CopyTo copyTo,
|
||||
BuilderParams builderParams,
|
||||
Collator collator,
|
||||
Builder builder
|
||||
) {
|
||||
super(simpleName, mappedFieldType, multiFields, copyTo, false, null);
|
||||
super(simpleName, mappedFieldType, builderParams);
|
||||
assert collator.isFrozen();
|
||||
this.fieldType = freezeAndDeduplicateFieldType(fieldType);
|
||||
this.params = builder.collatorParams();
|
||||
|
|
|
@ -150,7 +150,6 @@ public class AnnotatedTextFieldMapper extends FieldMapper {
|
|||
|
||||
@Override
|
||||
public AnnotatedTextFieldMapper build(MapperBuilderContext context) {
|
||||
MultiFields multiFields = multiFieldsBuilder.build(this, context);
|
||||
FieldType fieldType = TextParams.buildFieldType(() -> true, store, indexOptions, norms, termVectors);
|
||||
if (fieldType.indexOptions() == IndexOptions.NONE) {
|
||||
throw new IllegalArgumentException("[" + CONTENT_TYPE + "] fields must be indexed");
|
||||
|
@ -162,12 +161,12 @@ public class AnnotatedTextFieldMapper extends FieldMapper {
|
|||
);
|
||||
}
|
||||
}
|
||||
BuilderParams builderParams = builderParams(this, context);
|
||||
return new AnnotatedTextFieldMapper(
|
||||
leafName(),
|
||||
fieldType,
|
||||
buildFieldType(fieldType, context, multiFields),
|
||||
multiFields,
|
||||
copyTo,
|
||||
buildFieldType(fieldType, context, builderParams.multiFields()),
|
||||
builderParams,
|
||||
this
|
||||
);
|
||||
}
|
||||
|
@ -523,11 +522,10 @@ public class AnnotatedTextFieldMapper extends FieldMapper {
|
|||
String simpleName,
|
||||
FieldType fieldType,
|
||||
AnnotatedTextFieldType mappedFieldType,
|
||||
MultiFields multiFields,
|
||||
CopyTo copyTo,
|
||||
BuilderParams builderParams,
|
||||
Builder builder
|
||||
) {
|
||||
super(simpleName, mappedFieldType, multiFields, copyTo);
|
||||
super(simpleName, mappedFieldType, builderParams);
|
||||
assert fieldType.tokenized();
|
||||
this.fieldType = freezeAndDeduplicateFieldType(fieldType);
|
||||
this.builder = builder;
|
||||
|
@ -578,7 +576,7 @@ public class AnnotatedTextFieldMapper extends FieldMapper {
|
|||
|
||||
@Override
|
||||
public SourceLoader.SyntheticFieldLoader syntheticFieldLoader() {
|
||||
if (copyTo.copyToFields().isEmpty() != true) {
|
||||
if (copyTo().copyToFields().isEmpty() != true) {
|
||||
throw new IllegalArgumentException(
|
||||
"field [" + fullPath() + "] of type [" + typeName() + "] doesn't support synthetic source because it declares copy_to"
|
||||
);
|
||||
|
|
|
@ -57,8 +57,7 @@ public class Murmur3FieldMapper extends FieldMapper {
|
|||
return new Murmur3FieldMapper(
|
||||
leafName(),
|
||||
new Murmur3FieldType(context.buildFullName(leafName()), stored.getValue(), meta.getValue()),
|
||||
multiFieldsBuilder.build(this, context),
|
||||
copyTo
|
||||
builderParams(this, context)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -94,8 +93,8 @@ public class Murmur3FieldMapper extends FieldMapper {
|
|||
}
|
||||
}
|
||||
|
||||
protected Murmur3FieldMapper(String simpleName, MappedFieldType mappedFieldType, MultiFields multiFields, CopyTo copyTo) {
|
||||
super(simpleName, mappedFieldType, multiFields, copyTo);
|
||||
protected Murmur3FieldMapper(String simpleName, MappedFieldType mappedFieldType, BuilderParams builderParams) {
|
||||
super(simpleName, mappedFieldType, builderParams);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -201,32 +201,17 @@ public abstract class AbstractGeometryFieldMapper<T> extends FieldMapper {
|
|||
protected AbstractGeometryFieldMapper(
|
||||
String simpleName,
|
||||
MappedFieldType mappedFieldType,
|
||||
BuilderParams builderParams,
|
||||
Explicit<Boolean> ignoreMalformed,
|
||||
Explicit<Boolean> ignoreZValue,
|
||||
MultiFields multiFields,
|
||||
CopyTo copyTo,
|
||||
Parser<T> parser
|
||||
) {
|
||||
super(simpleName, mappedFieldType, multiFields, copyTo, false, null);
|
||||
super(simpleName, mappedFieldType, builderParams);
|
||||
this.ignoreMalformed = ignoreMalformed;
|
||||
this.ignoreZValue = ignoreZValue;
|
||||
this.parser = parser;
|
||||
}
|
||||
|
||||
protected AbstractGeometryFieldMapper(
|
||||
String simpleName,
|
||||
MappedFieldType mappedFieldType,
|
||||
MultiFields multiFields,
|
||||
CopyTo copyTo,
|
||||
Parser<T> parser,
|
||||
OnScriptError onScriptError
|
||||
) {
|
||||
super(simpleName, mappedFieldType, multiFields, copyTo, true, onScriptError);
|
||||
this.ignoreMalformed = Explicit.EXPLICIT_FALSE;
|
||||
this.ignoreZValue = Explicit.EXPLICIT_FALSE;
|
||||
this.parser = parser;
|
||||
}
|
||||
|
||||
@Override
|
||||
@SuppressWarnings("unchecked")
|
||||
public AbstractGeometryFieldType<T> fieldType() {
|
||||
|
@ -252,7 +237,7 @@ public abstract class AbstractGeometryFieldMapper<T> extends FieldMapper {
|
|||
|
||||
@Override
|
||||
public final void parse(DocumentParserContext context) throws IOException {
|
||||
if (hasScript) {
|
||||
if (builderParams.hasScript()) {
|
||||
throw new DocumentParsingException(
|
||||
context.parser().getTokenLocation(),
|
||||
"failed to parse field [" + fieldType().name() + "] of type + " + contentType() + "]",
|
||||
|
|
|
@ -40,29 +40,16 @@ public abstract class AbstractPointGeometryFieldMapper<T> extends AbstractGeomet
|
|||
protected AbstractPointGeometryFieldMapper(
|
||||
String simpleName,
|
||||
MappedFieldType mappedFieldType,
|
||||
MultiFields multiFields,
|
||||
BuilderParams builderParams,
|
||||
Explicit<Boolean> ignoreMalformed,
|
||||
Explicit<Boolean> ignoreZValue,
|
||||
T nullValue,
|
||||
CopyTo copyTo,
|
||||
Parser<T> parser
|
||||
) {
|
||||
super(simpleName, mappedFieldType, ignoreMalformed, ignoreZValue, multiFields, copyTo, parser);
|
||||
super(simpleName, mappedFieldType, builderParams, ignoreMalformed, ignoreZValue, parser);
|
||||
this.nullValue = nullValue;
|
||||
}
|
||||
|
||||
protected AbstractPointGeometryFieldMapper(
|
||||
String simpleName,
|
||||
MappedFieldType mappedFieldType,
|
||||
MultiFields multiFields,
|
||||
CopyTo copyTo,
|
||||
Parser<T> parser,
|
||||
OnScriptError onScriptError
|
||||
) {
|
||||
super(simpleName, mappedFieldType, multiFields, copyTo, parser, onScriptError);
|
||||
this.nullValue = null;
|
||||
}
|
||||
|
||||
public T getNullValue() {
|
||||
return nullValue;
|
||||
}
|
||||
|
|
|
@ -244,7 +244,7 @@ public abstract class AbstractScriptFieldType<LeafFactory> extends MappedFieldTy
|
|||
).setSerializerCheck((id, ic, v) -> ic);
|
||||
|
||||
private final FieldMapper.Parameter<OnScriptError> onScriptError = FieldMapper.Parameter.onScriptErrorParam(
|
||||
m -> m.onScriptError,
|
||||
m -> m.builderParams.onScriptError(),
|
||||
script
|
||||
);
|
||||
|
||||
|
|
|
@ -76,30 +76,14 @@ public abstract class AbstractShapeGeometryFieldMapper<T> extends AbstractGeomet
|
|||
protected AbstractShapeGeometryFieldMapper(
|
||||
String simpleName,
|
||||
MappedFieldType mappedFieldType,
|
||||
BuilderParams builderParams,
|
||||
Explicit<Boolean> ignoreMalformed,
|
||||
Explicit<Boolean> coerce,
|
||||
Explicit<Boolean> ignoreZValue,
|
||||
Explicit<Orientation> orientation,
|
||||
MultiFields multiFields,
|
||||
CopyTo copyTo,
|
||||
Parser<T> parser
|
||||
) {
|
||||
super(simpleName, mappedFieldType, ignoreMalformed, ignoreZValue, multiFields, copyTo, parser);
|
||||
this.coerce = coerce;
|
||||
this.orientation = orientation;
|
||||
}
|
||||
|
||||
protected AbstractShapeGeometryFieldMapper(
|
||||
String simpleName,
|
||||
MappedFieldType mappedFieldType,
|
||||
MultiFields multiFields,
|
||||
Explicit<Boolean> coerce,
|
||||
Explicit<Orientation> orientation,
|
||||
CopyTo copyTo,
|
||||
Parser<T> parser,
|
||||
OnScriptError onScriptError
|
||||
) {
|
||||
super(simpleName, mappedFieldType, multiFields, copyTo, parser, onScriptError);
|
||||
super(simpleName, mappedFieldType, builderParams, ignoreMalformed, ignoreZValue, parser);
|
||||
this.coerce = coerce;
|
||||
this.orientation = orientation;
|
||||
}
|
||||
|
|
|
@ -72,8 +72,7 @@ public class BinaryFieldMapper extends FieldMapper {
|
|||
return new BinaryFieldMapper(
|
||||
leafName(),
|
||||
new BinaryFieldType(context.buildFullName(leafName()), stored.getValue(), hasDocValues.getValue(), meta.getValue()),
|
||||
multiFieldsBuilder.build(this, context),
|
||||
copyTo,
|
||||
builderParams(this, context),
|
||||
this
|
||||
);
|
||||
}
|
||||
|
@ -142,14 +141,8 @@ public class BinaryFieldMapper extends FieldMapper {
|
|||
private final boolean hasDocValues;
|
||||
private final boolean isSyntheticSourceEnabledViaIndexMode;
|
||||
|
||||
protected BinaryFieldMapper(
|
||||
String simpleName,
|
||||
MappedFieldType mappedFieldType,
|
||||
MultiFields multiFields,
|
||||
CopyTo copyTo,
|
||||
Builder builder
|
||||
) {
|
||||
super(simpleName, mappedFieldType, multiFields, copyTo);
|
||||
protected BinaryFieldMapper(String simpleName, MappedFieldType mappedFieldType, BuilderParams builderParams, Builder builder) {
|
||||
super(simpleName, mappedFieldType, builderParams);
|
||||
this.stored = builder.stored.getValue();
|
||||
this.hasDocValues = builder.hasDocValues.getValue();
|
||||
this.isSyntheticSourceEnabledViaIndexMode = builder.isSyntheticSourceEnabledViaIndexMode;
|
||||
|
@ -207,7 +200,7 @@ public class BinaryFieldMapper extends FieldMapper {
|
|||
|
||||
@Override
|
||||
public SourceLoader.SyntheticFieldLoader syntheticFieldLoader() {
|
||||
if (copyTo.copyToFields().isEmpty() != true) {
|
||||
if (copyTo().copyToFields().isEmpty() != true) {
|
||||
throw new IllegalArgumentException(
|
||||
"field [" + fullPath() + "] of type [" + typeName() + "] doesn't support synthetic source because it declares copy_to"
|
||||
);
|
||||
|
|
|
@ -89,7 +89,10 @@ public class BooleanFieldMapper extends FieldMapper {
|
|||
).acceptsNull();
|
||||
|
||||
private final Parameter<Script> script = Parameter.scriptParam(m -> toType(m).script);
|
||||
private final Parameter<OnScriptError> onScriptError = Parameter.onScriptErrorParam(m -> toType(m).onScriptError, script);
|
||||
private final Parameter<OnScriptError> onScriptErrorParam = Parameter.onScriptErrorParam(
|
||||
m -> toType(m).builderParams.onScriptError(),
|
||||
script
|
||||
);
|
||||
|
||||
private final Parameter<Map<String, String>> meta = Parameter.metaParam();
|
||||
|
||||
|
@ -133,7 +136,16 @@ public class BooleanFieldMapper extends FieldMapper {
|
|||
|
||||
@Override
|
||||
protected Parameter<?>[] getParameters() {
|
||||
return new Parameter<?>[] { meta, docValues, indexed, nullValue, stored, script, onScriptError, ignoreMalformed, dimension };
|
||||
return new Parameter<?>[] {
|
||||
meta,
|
||||
docValues,
|
||||
indexed,
|
||||
nullValue,
|
||||
stored,
|
||||
script,
|
||||
onScriptErrorParam,
|
||||
ignoreMalformed,
|
||||
dimension };
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -151,14 +163,9 @@ public class BooleanFieldMapper extends FieldMapper {
|
|||
meta.getValue(),
|
||||
dimension.getValue()
|
||||
);
|
||||
return new BooleanFieldMapper(
|
||||
leafName(),
|
||||
ft,
|
||||
multiFieldsBuilder.build(this, context),
|
||||
copyTo,
|
||||
context.isSourceSynthetic(),
|
||||
this
|
||||
);
|
||||
hasScript = script.get() != null;
|
||||
onScriptError = onScriptErrorParam.getValue();
|
||||
return new BooleanFieldMapper(leafName(), ft, builderParams(this, context), context.isSourceSynthetic(), this);
|
||||
}
|
||||
|
||||
private FieldValues<Boolean> scriptValues() {
|
||||
|
@ -427,12 +434,11 @@ public class BooleanFieldMapper extends FieldMapper {
|
|||
protected BooleanFieldMapper(
|
||||
String simpleName,
|
||||
MappedFieldType mappedFieldType,
|
||||
MultiFields multiFields,
|
||||
CopyTo copyTo,
|
||||
BuilderParams builderParams,
|
||||
boolean storeMalformedFields,
|
||||
Builder builder
|
||||
) {
|
||||
super(simpleName, mappedFieldType, multiFields, copyTo, builder.script.get() != null, builder.onScriptError.getValue());
|
||||
super(simpleName, mappedFieldType, builderParams);
|
||||
this.nullValue = builder.nullValue.getValue();
|
||||
this.stored = builder.stored.getValue();
|
||||
this.indexed = builder.indexed.getValue();
|
||||
|
@ -561,7 +567,7 @@ public class BooleanFieldMapper extends FieldMapper {
|
|||
+ "] doesn't support synthetic source because it doesn't have doc values"
|
||||
);
|
||||
}
|
||||
if (copyTo.copyToFields().isEmpty() != true) {
|
||||
if (copyTo().copyToFields().isEmpty() != true) {
|
||||
throw new IllegalArgumentException(
|
||||
"field [" + fullPath() + "] of type [" + typeName() + "] doesn't support synthetic source because it declares copy_to"
|
||||
);
|
||||
|
|
|
@ -207,7 +207,7 @@ public class CompletionFieldMapper extends FieldMapper {
|
|||
|
||||
CompletionFieldType ft = new CompletionFieldType(context.buildFullName(leafName()), completionAnalyzer, meta.getValue());
|
||||
ft.setContextMappings(contexts.getValue());
|
||||
return new CompletionFieldMapper(leafName(), ft, multiFieldsBuilder.build(this, context), copyTo, this);
|
||||
return new CompletionFieldMapper(leafName(), ft, builderParams(this, context), this);
|
||||
}
|
||||
|
||||
private void checkCompletionContextsLimit() {
|
||||
|
@ -346,14 +346,8 @@ public class CompletionFieldMapper extends FieldMapper {
|
|||
|
||||
private final NamedAnalyzer indexAnalyzer;
|
||||
|
||||
public CompletionFieldMapper(
|
||||
String simpleName,
|
||||
MappedFieldType mappedFieldType,
|
||||
MultiFields multiFields,
|
||||
CopyTo copyTo,
|
||||
Builder builder
|
||||
) {
|
||||
super(simpleName, mappedFieldType, multiFields, copyTo);
|
||||
public CompletionFieldMapper(String simpleName, MappedFieldType mappedFieldType, BuilderParams builderParams, Builder builder) {
|
||||
super(simpleName, mappedFieldType, builderParams);
|
||||
this.builder = builder;
|
||||
this.maxInputLength = builder.maxInputLength.getValue();
|
||||
this.indexAnalyzer = builder.buildAnalyzer();
|
||||
|
@ -443,7 +437,7 @@ public class CompletionFieldMapper extends FieldMapper {
|
|||
|
||||
context.addToFieldNames(fieldType().name());
|
||||
for (CompletionInputMetadata metadata : inputMap.values()) {
|
||||
multiFields.parse(
|
||||
multiFields().parse(
|
||||
this,
|
||||
context,
|
||||
() -> context.switchParser(new MultiFieldParser(metadata, fieldType().name(), context.parser().getTokenLocation()))
|
||||
|
|
|
@ -48,7 +48,7 @@ public class CompositeRuntimeField implements RuntimeField {
|
|||
});
|
||||
|
||||
private final FieldMapper.Parameter<OnScriptError> onScriptError = FieldMapper.Parameter.onScriptErrorParam(
|
||||
m -> m.onScriptError,
|
||||
m -> m.builderParams.onScriptError(),
|
||||
script
|
||||
);
|
||||
|
||||
|
|
|
@ -247,7 +247,10 @@ public final class DateFieldMapper extends FieldMapper {
|
|||
private final Parameter<Boolean> ignoreMalformed;
|
||||
|
||||
private final Parameter<Script> script = Parameter.scriptParam(m -> toType(m).script);
|
||||
private final Parameter<OnScriptError> onScriptError = Parameter.onScriptErrorParam(m -> toType(m).onScriptError, script);
|
||||
private final Parameter<OnScriptError> onScriptErrorParam = Parameter.onScriptErrorParam(
|
||||
m -> toType(m).builderParams.onScriptError(),
|
||||
script
|
||||
);
|
||||
|
||||
private final Resolution resolution;
|
||||
private final IndexVersion indexCreatedVersion;
|
||||
|
@ -316,7 +319,17 @@ public final class DateFieldMapper extends FieldMapper {
|
|||
|
||||
@Override
|
||||
protected Parameter<?>[] getParameters() {
|
||||
return new Parameter<?>[] { index, docValues, store, format, locale, nullValue, ignoreMalformed, script, onScriptError, meta };
|
||||
return new Parameter<?>[] {
|
||||
index,
|
||||
docValues,
|
||||
store,
|
||||
format,
|
||||
locale,
|
||||
nullValue,
|
||||
ignoreMalformed,
|
||||
script,
|
||||
onScriptErrorParam,
|
||||
meta };
|
||||
}
|
||||
|
||||
private Long parseNullValue(DateFieldType fieldType) {
|
||||
|
@ -364,12 +377,12 @@ public final class DateFieldMapper extends FieldMapper {
|
|||
&& ignoreMalformed.isConfigured() == false) {
|
||||
ignoreMalformed.setValue(false);
|
||||
}
|
||||
|
||||
hasScript = script.get() != null;
|
||||
onScriptError = onScriptErrorParam.get();
|
||||
return new DateFieldMapper(
|
||||
leafName(),
|
||||
ft,
|
||||
multiFieldsBuilder.build(this, context),
|
||||
copyTo,
|
||||
builderParams(this, context),
|
||||
nullTimestamp,
|
||||
resolution,
|
||||
context.isSourceSynthetic(),
|
||||
|
@ -874,14 +887,13 @@ public final class DateFieldMapper extends FieldMapper {
|
|||
private DateFieldMapper(
|
||||
String leafName,
|
||||
MappedFieldType mappedFieldType,
|
||||
MultiFields multiFields,
|
||||
CopyTo copyTo,
|
||||
BuilderParams builderParams,
|
||||
Long nullValue,
|
||||
Resolution resolution,
|
||||
boolean isSourceSynthetic,
|
||||
Builder builder
|
||||
) {
|
||||
super(leafName, mappedFieldType, multiFields, copyTo, builder.script.get() != null, builder.onScriptError.get());
|
||||
super(leafName, mappedFieldType, builderParams);
|
||||
this.store = builder.store.getValue();
|
||||
this.indexed = builder.index.getValue();
|
||||
this.hasDocValues = builder.docValues.getValue();
|
||||
|
@ -998,7 +1010,7 @@ public final class DateFieldMapper extends FieldMapper {
|
|||
|
||||
@Override
|
||||
public SourceLoader.SyntheticFieldLoader syntheticFieldLoader() {
|
||||
if (hasScript) {
|
||||
if (hasScript()) {
|
||||
return SourceLoader.SyntheticFieldLoader.NOTHING;
|
||||
}
|
||||
if (hasDocValues == false) {
|
||||
|
@ -1010,7 +1022,7 @@ public final class DateFieldMapper extends FieldMapper {
|
|||
+ "] doesn't support synthetic source because it doesn't have doc values"
|
||||
);
|
||||
}
|
||||
if (copyTo.copyToFields().isEmpty() != true) {
|
||||
if (copyTo().copyToFields().isEmpty() != true) {
|
||||
throw new IllegalArgumentException(
|
||||
"field [" + fullPath() + "] of type [" + typeName() + "] doesn't support synthetic source because it declares copy_to"
|
||||
);
|
||||
|
|
|
@ -925,8 +925,7 @@ public final class DocumentParser {
|
|||
throw new UnsupportedOperationException();
|
||||
}
|
||||
},
|
||||
FieldMapper.MultiFields.empty(),
|
||||
FieldMapper.CopyTo.empty()
|
||||
FieldMapper.BuilderParams.empty()
|
||||
) {
|
||||
|
||||
@Override
|
||||
|
|
|
@ -45,6 +45,7 @@ import java.util.List;
|
|||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import java.util.function.BiConsumer;
|
||||
import java.util.function.BiFunction;
|
||||
|
@ -75,46 +76,42 @@ public abstract class FieldMapper extends Mapper {
|
|||
@SuppressWarnings("rawtypes")
|
||||
static final Parameter<?>[] EMPTY_PARAMETERS = new Parameter[0];
|
||||
|
||||
protected final MappedFieldType mappedFieldType;
|
||||
protected final MultiFields multiFields;
|
||||
protected final CopyTo copyTo;
|
||||
protected final boolean hasScript;
|
||||
protected final OnScriptError onScriptError;
|
||||
|
||||
/**
|
||||
* @param simpleName the leaf name of the mapper
|
||||
* @param mappedFieldType the MappedFieldType associated with this mapper
|
||||
* @param multiFields sub fields of this mapper
|
||||
* @param copyTo copyTo fields of this mapper
|
||||
*/
|
||||
protected FieldMapper(String simpleName, MappedFieldType mappedFieldType, MultiFields multiFields, CopyTo copyTo) {
|
||||
this(simpleName, mappedFieldType, multiFields, copyTo, false, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param simpleName the leaf name of the mapper
|
||||
* @param mappedFieldType the MappedFieldType associated with this mapper
|
||||
* @param multiFields sub fields of this mapper
|
||||
* @param copyTo copyTo fields of this mapper
|
||||
* @param sourceKeepMode mode for storing the field source in synthetic source mode
|
||||
* @param hasScript whether a script is defined for the field
|
||||
* @param onScriptError the behaviour for when the defined script fails at runtime
|
||||
*/
|
||||
protected FieldMapper(
|
||||
String simpleName,
|
||||
MappedFieldType mappedFieldType,
|
||||
protected record BuilderParams(
|
||||
MultiFields multiFields,
|
||||
CopyTo copyTo,
|
||||
Optional<SourceKeepMode> sourceKeepMode,
|
||||
boolean hasScript,
|
||||
OnScriptError onScriptError
|
||||
) {
|
||||
public static BuilderParams empty() {
|
||||
return empty;
|
||||
}
|
||||
|
||||
private static final BuilderParams empty = new BuilderParams(MultiFields.empty(), CopyTo.empty(), Optional.empty(), false, null);
|
||||
}
|
||||
|
||||
protected final MappedFieldType mappedFieldType;
|
||||
protected final BuilderParams builderParams;
|
||||
|
||||
/**
|
||||
* @param simpleName the leaf name of the mapper
|
||||
* @param params initialization params for this field mapper
|
||||
*/
|
||||
protected FieldMapper(String simpleName, MappedFieldType mappedFieldType, BuilderParams params) {
|
||||
super(simpleName);
|
||||
this.mappedFieldType = mappedFieldType;
|
||||
this.builderParams = params;
|
||||
|
||||
// could be blank but not empty on indices created < 8.6.0
|
||||
assert mappedFieldType.name().isEmpty() == false;
|
||||
this.mappedFieldType = mappedFieldType;
|
||||
this.multiFields = multiFields;
|
||||
this.copyTo = Objects.requireNonNull(copyTo);
|
||||
this.hasScript = hasScript;
|
||||
this.onScriptError = onScriptError;
|
||||
assert params.copyTo != null;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -135,11 +132,15 @@ public abstract class FieldMapper extends Mapper {
|
|||
* List of fields where this field should be copied to
|
||||
*/
|
||||
public CopyTo copyTo() {
|
||||
return copyTo;
|
||||
return builderParams.copyTo;
|
||||
}
|
||||
|
||||
public MultiFields multiFields() {
|
||||
return multiFields;
|
||||
return builderParams.multiFields;
|
||||
}
|
||||
|
||||
public Optional<SourceKeepMode> sourceKeepMode() {
|
||||
return builderParams.sourceKeepMode;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -178,7 +179,7 @@ public abstract class FieldMapper extends Mapper {
|
|||
*/
|
||||
public void parse(DocumentParserContext context) throws IOException {
|
||||
try {
|
||||
if (hasScript) {
|
||||
if (builderParams.hasScript) {
|
||||
throwIndexingWithScriptParam();
|
||||
}
|
||||
|
||||
|
@ -188,14 +189,14 @@ public abstract class FieldMapper extends Mapper {
|
|||
}
|
||||
// TODO: multi fields are really just copy fields, we just need to expose "sub fields" or something that can be part
|
||||
// of the mappings
|
||||
if (multiFields.mappers.length != 0) {
|
||||
if (builderParams.multiFields.mappers.length != 0) {
|
||||
doParseMultiFields(context);
|
||||
}
|
||||
}
|
||||
|
||||
private void doParseMultiFields(DocumentParserContext context) throws IOException {
|
||||
context.path().add(leafName());
|
||||
for (FieldMapper mapper : multiFields.mappers) {
|
||||
for (FieldMapper mapper : builderParams.multiFields.mappers) {
|
||||
mapper.parse(context);
|
||||
}
|
||||
context.path().remove();
|
||||
|
@ -255,7 +256,7 @@ public abstract class FieldMapper extends Mapper {
|
|||
* @return whether this field mapper uses a script to generate its values
|
||||
*/
|
||||
public final boolean hasScript() {
|
||||
return hasScript;
|
||||
return builderParams.hasScript;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -276,7 +277,7 @@ public abstract class FieldMapper extends Mapper {
|
|||
try {
|
||||
indexScriptValues(searchLookup, readerContext, doc, documentParserContext);
|
||||
} catch (Exception e) {
|
||||
if (onScriptError == OnScriptError.CONTINUE) {
|
||||
if (builderParams.onScriptError == OnScriptError.CONTINUE) {
|
||||
documentParserContext.addIgnoredField(fullPath());
|
||||
} else {
|
||||
throw new DocumentParsingException(XContentLocation.UNKNOWN, "Error executing script on field [" + fullPath() + "]", e);
|
||||
|
@ -308,7 +309,7 @@ public abstract class FieldMapper extends Mapper {
|
|||
}
|
||||
|
||||
protected Iterator<Mapper> multiFieldsIterator() {
|
||||
return Iterators.forArray(multiFields.mappers);
|
||||
return Iterators.forArray(builderParams.multiFields.mappers);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -424,15 +425,18 @@ public abstract class FieldMapper extends Mapper {
|
|||
protected void doXContentBody(XContentBuilder builder, Params params) throws IOException {
|
||||
builder.field("type", contentType());
|
||||
getMergeBuilder().toXContent(builder, params);
|
||||
multiFields.toXContent(builder, params);
|
||||
copyTo.toXContent(builder);
|
||||
builderParams.multiFields.toXContent(builder, params);
|
||||
builderParams.copyTo.toXContent(builder);
|
||||
if (builderParams.sourceKeepMode.isPresent()) {
|
||||
builderParams.sourceKeepMode.get().toXContent(builder);
|
||||
}
|
||||
}
|
||||
|
||||
protected abstract String contentType();
|
||||
|
||||
@Override
|
||||
public int getTotalFieldsCount() {
|
||||
return 1 + Stream.of(multiFields.mappers).mapToInt(FieldMapper::getTotalFieldsCount).sum();
|
||||
return 1 + Stream.of(builderParams.multiFields.mappers).mapToInt(FieldMapper::getTotalFieldsCount).sum();
|
||||
}
|
||||
|
||||
public Map<String, NamedAnalyzer> indexAnalyzers() {
|
||||
|
@ -487,7 +491,7 @@ public abstract class FieldMapper extends Mapper {
|
|||
// If mapper supports synthetic source natively, it overrides this method,
|
||||
// so we won't see those here.
|
||||
if (syntheticSourceMode() == SyntheticSourceMode.FALLBACK) {
|
||||
if (copyTo.copyToFields().isEmpty() != true) {
|
||||
if (builderParams.copyTo.copyToFields().isEmpty() != true) {
|
||||
throw new IllegalArgumentException(
|
||||
"field [" + fullPath() + "] of type [" + typeName() + "] doesn't support synthetic source because it declares copy_to"
|
||||
);
|
||||
|
@ -1289,6 +1293,9 @@ public abstract class FieldMapper extends Mapper {
|
|||
|
||||
protected final MultiFields.Builder multiFieldsBuilder = new MultiFields.Builder();
|
||||
protected CopyTo copyTo = CopyTo.EMPTY;
|
||||
protected Optional<SourceKeepMode> sourceKeepMode = Optional.empty();
|
||||
protected boolean hasScript = false;
|
||||
protected OnScriptError onScriptError = null;
|
||||
|
||||
/**
|
||||
* Creates a new Builder with a field name
|
||||
|
@ -1304,21 +1311,26 @@ public abstract class FieldMapper extends Mapper {
|
|||
for (Parameter<?> param : getParameters()) {
|
||||
param.init(initializer);
|
||||
}
|
||||
for (FieldMapper subField : initializer.multiFields.mappers) {
|
||||
for (FieldMapper subField : initializer.builderParams.multiFields.mappers) {
|
||||
multiFieldsBuilder.add(subField);
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
protected BuilderParams builderParams(Mapper.Builder mainFieldBuilder, MapperBuilderContext context) {
|
||||
return new BuilderParams(multiFieldsBuilder.build(mainFieldBuilder, context), copyTo, sourceKeepMode, hasScript, onScriptError);
|
||||
}
|
||||
|
||||
protected void merge(FieldMapper in, Conflicts conflicts, MapperMergeContext mapperMergeContext) {
|
||||
for (Parameter<?> param : getParameters()) {
|
||||
param.merge(in, conflicts);
|
||||
}
|
||||
MapperMergeContext childContext = mapperMergeContext.createChildContext(in.leafName(), null);
|
||||
for (FieldMapper newSubField : in.multiFields.mappers) {
|
||||
for (FieldMapper newSubField : in.builderParams.multiFields.mappers) {
|
||||
multiFieldsBuilder.update(newSubField, childContext);
|
||||
}
|
||||
this.copyTo = in.copyTo;
|
||||
this.copyTo = in.builderParams.copyTo;
|
||||
this.sourceKeepMode = in.builderParams.sourceKeepMode;
|
||||
validate();
|
||||
}
|
||||
|
||||
|
@ -1413,6 +1425,11 @@ public abstract class FieldMapper extends Mapper {
|
|||
iterator.remove();
|
||||
continue;
|
||||
}
|
||||
case SYNTHETIC_SOURCE_KEEP_PARAM -> {
|
||||
sourceKeepMode = Optional.of(SourceKeepMode.from(XContentMapValues.nodeStringValue(propNode)));
|
||||
iterator.remove();
|
||||
continue;
|
||||
}
|
||||
}
|
||||
Parameter<?> parameter = deprecatedParamsMap.get(propName);
|
||||
if (parameter != null) {
|
||||
|
|
|
@ -87,7 +87,10 @@ public class GeoPointFieldMapper extends AbstractPointGeometryFieldMapper<GeoPoi
|
|||
final Parameter<Boolean> hasDocValues = Parameter.docValuesParam(m -> builder(m).hasDocValues.get(), true);
|
||||
final Parameter<Boolean> stored = Parameter.storeParam(m -> builder(m).stored.get(), false);
|
||||
private final Parameter<Script> script = Parameter.scriptParam(m -> builder(m).script.get());
|
||||
private final Parameter<OnScriptError> onScriptError = Parameter.onScriptErrorParam(m -> builder(m).onScriptError.get(), script);
|
||||
private final Parameter<OnScriptError> onScriptErrorParam = Parameter.onScriptErrorParam(
|
||||
m -> builder(m).onScriptErrorParam.get(),
|
||||
script
|
||||
);
|
||||
final Parameter<Map<String, String>> meta = Parameter.metaParam();
|
||||
|
||||
private final ScriptCompiler scriptCompiler;
|
||||
|
@ -152,7 +155,7 @@ public class GeoPointFieldMapper extends AbstractPointGeometryFieldMapper<GeoPoi
|
|||
ignoreZValue,
|
||||
nullValue,
|
||||
script,
|
||||
onScriptError,
|
||||
onScriptErrorParam,
|
||||
meta,
|
||||
dimension,
|
||||
metric };
|
||||
|
@ -217,10 +220,9 @@ public class GeoPointFieldMapper extends AbstractPointGeometryFieldMapper<GeoPoi
|
|||
metric.get(),
|
||||
indexMode
|
||||
);
|
||||
if (this.script.get() == null) {
|
||||
return new GeoPointFieldMapper(leafName(), ft, multiFieldsBuilder.build(this, context), copyTo, geoParser, this);
|
||||
}
|
||||
return new GeoPointFieldMapper(leafName(), ft, geoParser, this);
|
||||
hasScript = script.get() != null;
|
||||
onScriptError = onScriptErrorParam.get();
|
||||
return new GeoPointFieldMapper(leafName(), ft, builderParams(this, context), geoParser, this);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -248,32 +250,20 @@ public class GeoPointFieldMapper extends AbstractPointGeometryFieldMapper<GeoPoi
|
|||
public GeoPointFieldMapper(
|
||||
String simpleName,
|
||||
MappedFieldType mappedFieldType,
|
||||
MultiFields multiFields,
|
||||
CopyTo copyTo,
|
||||
BuilderParams builderParams,
|
||||
Parser<GeoPoint> parser,
|
||||
Builder builder
|
||||
) {
|
||||
super(
|
||||
simpleName,
|
||||
mappedFieldType,
|
||||
multiFields,
|
||||
builderParams,
|
||||
builder.ignoreMalformed.get(),
|
||||
builder.ignoreZValue.get(),
|
||||
builder.nullValue.get(),
|
||||
copyTo,
|
||||
parser
|
||||
);
|
||||
this.builder = builder;
|
||||
this.scriptValues = null;
|
||||
this.indexCreatedVersion = builder.indexCreatedVersion;
|
||||
this.metricType = builder.metric.get();
|
||||
this.indexMode = builder.indexMode;
|
||||
this.indexed = builder.indexed.get();
|
||||
}
|
||||
|
||||
public GeoPointFieldMapper(String simpleName, MappedFieldType mappedFieldType, Parser<GeoPoint> parser, Builder builder) {
|
||||
super(simpleName, mappedFieldType, MultiFields.empty(), CopyTo.empty(), parser, builder.onScriptError.get());
|
||||
this.builder = builder;
|
||||
this.scriptValues = builder.scriptValues();
|
||||
this.indexCreatedVersion = builder.indexCreatedVersion;
|
||||
this.metricType = builder.metric.get();
|
||||
|
@ -308,7 +298,7 @@ public class GeoPointFieldMapper extends AbstractPointGeometryFieldMapper<GeoPoi
|
|||
// TODO phase out geohash (which is currently used in the CompletionSuggester)
|
||||
// we only expose the geohash value and disallow advancing tokens, hence we can reuse the same parser throughout multiple sub-fields
|
||||
DocumentParserContext parserContext = context.switchParser(new GeoHashMultiFieldParser(context.parser(), geometry.geohash()));
|
||||
multiFields.parse(this, context, () -> parserContext);
|
||||
multiFields().parse(this, context, () -> parserContext);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -635,7 +625,7 @@ public class GeoPointFieldMapper extends AbstractPointGeometryFieldMapper<GeoPoi
|
|||
+ "] doesn't support synthetic source because it doesn't have doc values"
|
||||
);
|
||||
}
|
||||
if (copyTo.copyToFields().isEmpty() != true) {
|
||||
if (copyTo().copyToFields().isEmpty() != true) {
|
||||
throw new IllegalArgumentException(
|
||||
"field [" + fullPath() + "] of type [" + typeName() + "] doesn't support synthetic source because it declares copy_to"
|
||||
);
|
||||
|
|
|
@ -81,7 +81,10 @@ public class IpFieldMapper extends FieldMapper {
|
|||
.acceptsNull();
|
||||
|
||||
private final Parameter<Script> script = Parameter.scriptParam(m -> toType(m).script);
|
||||
private final Parameter<OnScriptError> onScriptError = Parameter.onScriptErrorParam(m -> toType(m).onScriptError, script);
|
||||
private final Parameter<OnScriptError> onScriptErrorParam = Parameter.onScriptErrorParam(
|
||||
m -> toType(m).builderParams.onScriptError(),
|
||||
script
|
||||
);
|
||||
|
||||
private final Parameter<Map<String, String>> meta = Parameter.metaParam();
|
||||
private final Parameter<Boolean> dimension;
|
||||
|
@ -162,7 +165,16 @@ public class IpFieldMapper extends FieldMapper {
|
|||
|
||||
@Override
|
||||
protected Parameter<?>[] getParameters() {
|
||||
return new Parameter<?>[] { indexed, hasDocValues, stored, ignoreMalformed, nullValue, script, onScriptError, meta, dimension };
|
||||
return new Parameter<?>[] {
|
||||
indexed,
|
||||
hasDocValues,
|
||||
stored,
|
||||
ignoreMalformed,
|
||||
nullValue,
|
||||
script,
|
||||
onScriptErrorParam,
|
||||
meta,
|
||||
dimension };
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -170,6 +182,8 @@ public class IpFieldMapper extends FieldMapper {
|
|||
if (inheritDimensionParameterFromParentObject(context)) {
|
||||
dimension.setValue(true);
|
||||
}
|
||||
hasScript = script.get() != null;
|
||||
onScriptError = onScriptErrorParam.getValue();
|
||||
return new IpFieldMapper(
|
||||
leafName(),
|
||||
new IpFieldType(
|
||||
|
@ -182,8 +196,7 @@ public class IpFieldMapper extends FieldMapper {
|
|||
meta.getValue(),
|
||||
dimension.getValue()
|
||||
),
|
||||
multiFieldsBuilder.build(this, context),
|
||||
copyTo,
|
||||
builderParams(this, context),
|
||||
context.isSourceSynthetic(),
|
||||
this
|
||||
);
|
||||
|
@ -494,12 +507,11 @@ public class IpFieldMapper extends FieldMapper {
|
|||
private IpFieldMapper(
|
||||
String simpleName,
|
||||
MappedFieldType mappedFieldType,
|
||||
MultiFields multiFields,
|
||||
CopyTo copyTo,
|
||||
BuilderParams builderParams,
|
||||
boolean storeIgnored,
|
||||
Builder builder
|
||||
) {
|
||||
super(simpleName, mappedFieldType, multiFields, copyTo, builder.script.get() != null, builder.onScriptError.get());
|
||||
super(simpleName, mappedFieldType, builderParams);
|
||||
this.ignoreMalformedByDefault = builder.ignoreMalformedByDefault;
|
||||
this.indexed = builder.indexed.getValue();
|
||||
this.hasDocValues = builder.hasDocValues.getValue();
|
||||
|
@ -621,7 +633,7 @@ public class IpFieldMapper extends FieldMapper {
|
|||
+ "] doesn't support synthetic source because it doesn't have doc values"
|
||||
);
|
||||
}
|
||||
if (copyTo.copyToFields().isEmpty() != true) {
|
||||
if (copyTo().copyToFields().isEmpty() != true) {
|
||||
throw new IllegalArgumentException(
|
||||
"field [" + fullPath() + "] of type [" + typeName() + "] doesn't support synthetic source because it declares copy_to"
|
||||
);
|
||||
|
|
|
@ -182,7 +182,10 @@ public final class KeywordFieldMapper extends FieldMapper {
|
|||
private final Parameter<Map<String, String>> meta = Parameter.metaParam();
|
||||
|
||||
private final Parameter<Script> script = Parameter.scriptParam(m -> toType(m).script);
|
||||
private final Parameter<OnScriptError> onScriptError = Parameter.onScriptErrorParam(m -> toType(m).onScriptError, script);
|
||||
private final Parameter<OnScriptError> onScriptError = Parameter.onScriptErrorParam(
|
||||
m -> toType(m).builderParams.onScriptError(),
|
||||
script
|
||||
);
|
||||
private final Parameter<Boolean> dimension;
|
||||
|
||||
private final IndexAnalyzers indexAnalyzers;
|
||||
|
@ -351,12 +354,13 @@ public final class KeywordFieldMapper extends FieldMapper {
|
|||
// deduplicate in the common default case to save some memory
|
||||
fieldtype = Defaults.FIELD_TYPE;
|
||||
}
|
||||
super.hasScript = script.get() != null;
|
||||
super.onScriptError = onScriptError.getValue();
|
||||
return new KeywordFieldMapper(
|
||||
leafName(),
|
||||
fieldtype,
|
||||
buildFieldType(context, fieldtype),
|
||||
multiFieldsBuilder.build(this, context),
|
||||
copyTo,
|
||||
builderParams(this, context),
|
||||
context.isSourceSynthetic(),
|
||||
this
|
||||
);
|
||||
|
@ -865,12 +869,11 @@ public final class KeywordFieldMapper extends FieldMapper {
|
|||
String simpleName,
|
||||
FieldType fieldType,
|
||||
KeywordFieldType mappedFieldType,
|
||||
MultiFields multiFields,
|
||||
CopyTo copyTo,
|
||||
BuilderParams builderParams,
|
||||
boolean isSyntheticSource,
|
||||
Builder builder
|
||||
) {
|
||||
super(simpleName, mappedFieldType, multiFields, copyTo, builder.script.get() != null, builder.onScriptError.getValue());
|
||||
super(simpleName, mappedFieldType, builderParams);
|
||||
assert fieldType.indexOptions().compareTo(IndexOptions.DOCS_AND_FREQS) <= 0;
|
||||
this.indexed = builder.indexed.getValue();
|
||||
this.hasDocValues = builder.hasDocValues.getValue();
|
||||
|
@ -1048,7 +1051,7 @@ public final class KeywordFieldMapper extends FieldMapper {
|
|||
if (hasScript()) {
|
||||
return SourceLoader.SyntheticFieldLoader.NOTHING;
|
||||
}
|
||||
if (copyTo.copyToFields().isEmpty() != true) {
|
||||
if (builderParams.copyTo().copyToFields().isEmpty() != true) {
|
||||
throw new IllegalArgumentException(
|
||||
"field [" + fullPath() + "] of type [" + typeName() + "] doesn't support synthetic source because it declares copy_to"
|
||||
);
|
||||
|
|
|
@ -16,7 +16,10 @@ import org.elasticsearch.features.NodeFeature;
|
|||
import org.elasticsearch.index.IndexVersion;
|
||||
import org.elasticsearch.index.IndexVersions;
|
||||
import org.elasticsearch.xcontent.ToXContentFragment;
|
||||
import org.elasticsearch.xcontent.XContentBuilder;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Arrays;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
@ -39,6 +42,9 @@ public abstract class Mapper implements ToXContentFragment, Iterable<Mapper> {
|
|||
}
|
||||
|
||||
static SourceKeepMode from(String input) {
|
||||
if (input == null) {
|
||||
input = "null";
|
||||
}
|
||||
if (input.equals(NONE.name)) {
|
||||
return NONE;
|
||||
}
|
||||
|
@ -48,7 +54,15 @@ public abstract class Mapper implements ToXContentFragment, Iterable<Mapper> {
|
|||
if (input.equals(ARRAYS.name)) {
|
||||
return ARRAYS;
|
||||
}
|
||||
throw new IllegalArgumentException("Unknown " + SYNTHETIC_SOURCE_KEEP_PARAM + " value [" + input + "]");
|
||||
throw new IllegalArgumentException(
|
||||
"Unknown "
|
||||
+ SYNTHETIC_SOURCE_KEEP_PARAM
|
||||
+ " value ["
|
||||
+ input
|
||||
+ "], accepted values are ["
|
||||
+ String.join(",", Arrays.stream(SourceKeepMode.values()).map(SourceKeepMode::toString).toList())
|
||||
+ "]"
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -56,6 +70,10 @@ public abstract class Mapper implements ToXContentFragment, Iterable<Mapper> {
|
|||
return name;
|
||||
}
|
||||
|
||||
public void toXContent(XContentBuilder builder) throws IOException {
|
||||
builder.field(SYNTHETIC_SOURCE_KEEP_PARAM, name);
|
||||
}
|
||||
|
||||
private final String name;
|
||||
}
|
||||
|
||||
|
|
|
@ -174,7 +174,7 @@ public abstract class MetadataFieldMapper extends FieldMapper {
|
|||
}
|
||||
|
||||
protected MetadataFieldMapper(MappedFieldType mappedFieldType) {
|
||||
super(mappedFieldType.name(), mappedFieldType, MultiFields.empty(), CopyTo.empty(), false, null);
|
||||
super(mappedFieldType.name(), mappedFieldType, BuilderParams.empty());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -100,7 +100,10 @@ public class NumberFieldMapper extends FieldMapper {
|
|||
private final Parameter<Number> nullValue;
|
||||
|
||||
private final Parameter<Script> script = Parameter.scriptParam(m -> toType(m).script);
|
||||
private final Parameter<OnScriptError> onScriptError = Parameter.onScriptErrorParam(m -> toType(m).onScriptError, script);
|
||||
private final Parameter<OnScriptError> onScriptErrorParam = Parameter.onScriptErrorParam(
|
||||
m -> toType(m).builderParams.onScriptError(),
|
||||
script
|
||||
);
|
||||
|
||||
/**
|
||||
* Parameter that marks this field as a time series dimension.
|
||||
|
@ -253,7 +256,7 @@ public class NumberFieldMapper extends FieldMapper {
|
|||
coerce,
|
||||
nullValue,
|
||||
script,
|
||||
onScriptError,
|
||||
onScriptErrorParam,
|
||||
meta,
|
||||
dimension,
|
||||
metric };
|
||||
|
@ -266,14 +269,9 @@ public class NumberFieldMapper extends FieldMapper {
|
|||
}
|
||||
|
||||
MappedFieldType ft = new NumberFieldType(context.buildFullName(leafName()), this);
|
||||
return new NumberFieldMapper(
|
||||
leafName(),
|
||||
ft,
|
||||
multiFieldsBuilder.build(this, context),
|
||||
copyTo,
|
||||
context.isSourceSynthetic(),
|
||||
this
|
||||
);
|
||||
hasScript = script.get() != null;
|
||||
onScriptError = onScriptErrorParam.getValue();
|
||||
return new NumberFieldMapper(leafName(), ft, builderParams(this, context), context.isSourceSynthetic(), this);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1841,12 +1839,11 @@ public class NumberFieldMapper extends FieldMapper {
|
|||
private NumberFieldMapper(
|
||||
String simpleName,
|
||||
MappedFieldType mappedFieldType,
|
||||
MultiFields multiFields,
|
||||
CopyTo copyTo,
|
||||
BuilderParams builderParams,
|
||||
boolean storeMalformedFields,
|
||||
Builder builder
|
||||
) {
|
||||
super(simpleName, mappedFieldType, multiFields, copyTo, builder.script.get() != null, builder.onScriptError.getValue());
|
||||
super(simpleName, mappedFieldType, builderParams);
|
||||
this.type = builder.type;
|
||||
this.indexed = builder.indexed.getValue();
|
||||
this.hasDocValues = builder.hasDocValues.getValue();
|
||||
|
@ -2000,7 +1997,7 @@ public class NumberFieldMapper extends FieldMapper {
|
|||
if (hasScript()) {
|
||||
return SourceLoader.SyntheticFieldLoader.NOTHING;
|
||||
}
|
||||
if (copyTo.copyToFields().isEmpty() != true) {
|
||||
if (builderParams.copyTo().copyToFields().isEmpty() != true) {
|
||||
throw new IllegalArgumentException(
|
||||
"field [" + fullPath() + "] of type [" + typeName() + "] doesn't support synthetic source because it declares copy_to"
|
||||
);
|
||||
|
|
|
@ -91,7 +91,7 @@ public class PlaceHolderFieldMapper extends FieldMapper {
|
|||
@Override
|
||||
public PlaceHolderFieldMapper build(MapperBuilderContext context) {
|
||||
PlaceHolderFieldType mappedFieldType = new PlaceHolderFieldType(context.buildFullName(leafName()), type, Map.of());
|
||||
return new PlaceHolderFieldMapper(leafName(), mappedFieldType, multiFieldsBuilder.build(this, context), copyTo, unknownParams);
|
||||
return new PlaceHolderFieldMapper(leafName(), mappedFieldType, builderParams(this, context), unknownParams);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -262,11 +262,10 @@ public class PlaceHolderFieldMapper extends FieldMapper {
|
|||
public PlaceHolderFieldMapper(
|
||||
String simpleName,
|
||||
PlaceHolderFieldType fieldType,
|
||||
MultiFields multiFields,
|
||||
CopyTo copyTo,
|
||||
BuilderParams builderParams,
|
||||
Map<String, Object> unknownParams
|
||||
) {
|
||||
super(simpleName, fieldType, multiFields, copyTo);
|
||||
super(simpleName, fieldType, builderParams);
|
||||
this.unknownParams.putAll(unknownParams);
|
||||
}
|
||||
|
||||
|
|
|
@ -167,7 +167,7 @@ public class RangeFieldMapper extends FieldMapper {
|
|||
@Override
|
||||
public RangeFieldMapper build(MapperBuilderContext context) {
|
||||
RangeFieldType ft = setupFieldType(context);
|
||||
return new RangeFieldMapper(leafName(), ft, multiFieldsBuilder.build(this, context), copyTo, type, this);
|
||||
return new RangeFieldMapper(leafName(), ft, builderParams(this, context), type, this);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -342,12 +342,11 @@ public class RangeFieldMapper extends FieldMapper {
|
|||
private RangeFieldMapper(
|
||||
String simpleName,
|
||||
MappedFieldType mappedFieldType,
|
||||
MultiFields multiFields,
|
||||
CopyTo copyTo,
|
||||
BuilderParams builderParams,
|
||||
RangeType type,
|
||||
Builder builder
|
||||
) {
|
||||
super(simpleName, mappedFieldType, multiFields, copyTo);
|
||||
super(simpleName, mappedFieldType, builderParams);
|
||||
this.type = type;
|
||||
this.index = builder.index.getValue();
|
||||
this.hasDocValues = builder.hasDocValues.getValue();
|
||||
|
@ -478,7 +477,7 @@ public class RangeFieldMapper extends FieldMapper {
|
|||
+ "] doesn't support synthetic source because it doesn't have doc values"
|
||||
);
|
||||
}
|
||||
if (copyTo.copyToFields().isEmpty() != true) {
|
||||
if (copyTo().copyToFields().isEmpty() != true) {
|
||||
throw new IllegalArgumentException(
|
||||
"field [" + fullPath() + "] of type [" + typeName() + "] doesn't support synthetic source because it declares copy_to"
|
||||
);
|
||||
|
|
|
@ -463,7 +463,6 @@ public final class TextFieldMapper extends FieldMapper {
|
|||
|
||||
@Override
|
||||
public TextFieldMapper build(MapperBuilderContext context) {
|
||||
MultiFields multiFields = multiFieldsBuilder.build(this, context);
|
||||
FieldType fieldType = TextParams.buildFieldType(
|
||||
index,
|
||||
store,
|
||||
|
@ -472,15 +471,16 @@ public final class TextFieldMapper extends FieldMapper {
|
|||
indexCreatedVersion.isLegacyIndexVersion() ? () -> false : norms,
|
||||
termVectors
|
||||
);
|
||||
TextFieldType tft = buildFieldType(fieldType, multiFields, context, indexCreatedVersion);
|
||||
BuilderParams builderParams = builderParams(this, context);
|
||||
TextFieldType tft = buildFieldType(fieldType, builderParams.multiFields(), context, indexCreatedVersion);
|
||||
SubFieldInfo phraseFieldInfo = buildPhraseInfo(fieldType, tft);
|
||||
SubFieldInfo prefixFieldInfo = buildPrefixInfo(context, fieldType, tft);
|
||||
for (Mapper mapper : multiFields) {
|
||||
for (Mapper mapper : builderParams.multiFields()) {
|
||||
if (mapper.fullPath().endsWith(FAST_PHRASE_SUFFIX) || mapper.fullPath().endsWith(FAST_PREFIX_SUFFIX)) {
|
||||
throw new MapperParsingException("Cannot use reserved field name [" + mapper.fullPath() + "]");
|
||||
}
|
||||
}
|
||||
return new TextFieldMapper(leafName(), fieldType, tft, prefixFieldInfo, phraseFieldInfo, multiFields, copyTo, this);
|
||||
return new TextFieldMapper(leafName(), fieldType, tft, prefixFieldInfo, phraseFieldInfo, builderParams, this);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1215,11 +1215,10 @@ public final class TextFieldMapper extends FieldMapper {
|
|||
TextFieldType mappedFieldType,
|
||||
SubFieldInfo prefixFieldInfo,
|
||||
SubFieldInfo phraseFieldInfo,
|
||||
MultiFields multiFields,
|
||||
CopyTo copyTo,
|
||||
BuilderParams builderParams,
|
||||
Builder builder
|
||||
) {
|
||||
super(simpleName, mappedFieldType, multiFields, copyTo, false, null);
|
||||
super(simpleName, mappedFieldType, builderParams);
|
||||
assert mappedFieldType.getTextSearchInfo().isTokenized();
|
||||
assert mappedFieldType.hasDocValues() == false;
|
||||
if (fieldType.indexOptions() == IndexOptions.NONE && fieldType().fielddata()) {
|
||||
|
@ -1428,8 +1427,11 @@ public final class TextFieldMapper extends FieldMapper {
|
|||
final Builder b = (Builder) getMergeBuilder();
|
||||
b.index.toXContent(builder, includeDefaults);
|
||||
b.store.toXContent(builder, includeDefaults);
|
||||
this.multiFields.toXContent(builder, params);
|
||||
this.copyTo.toXContent(builder);
|
||||
multiFields().toXContent(builder, params);
|
||||
copyTo().toXContent(builder);
|
||||
if (sourceKeepMode().isPresent()) {
|
||||
sourceKeepMode().get().toXContent(builder);
|
||||
}
|
||||
b.meta.toXContent(builder, includeDefaults);
|
||||
b.indexOptions.toXContent(builder, includeDefaults);
|
||||
b.termVectors.toXContent(builder, includeDefaults);
|
||||
|
@ -1453,7 +1455,7 @@ public final class TextFieldMapper extends FieldMapper {
|
|||
|
||||
@Override
|
||||
public SourceLoader.SyntheticFieldLoader syntheticFieldLoader() {
|
||||
if (copyTo.copyToFields().isEmpty() != true) {
|
||||
if (copyTo().copyToFields().isEmpty() != true) {
|
||||
throw new IllegalArgumentException(
|
||||
"field [" + fullPath() + "] of type [" + typeName() + "] doesn't support synthetic source because it declares copy_to"
|
||||
);
|
||||
|
|
|
@ -216,7 +216,7 @@ public final class FlattenedFieldMapper extends FieldMapper {
|
|||
eagerGlobalOrdinals.get(),
|
||||
dimensions.get()
|
||||
);
|
||||
return new FlattenedFieldMapper(leafName(), ft, this);
|
||||
return new FlattenedFieldMapper(leafName(), ft, builderParams(this, context), this);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -737,8 +737,8 @@ public final class FlattenedFieldMapper extends FieldMapper {
|
|||
private final FlattenedFieldParser fieldParser;
|
||||
private final Builder builder;
|
||||
|
||||
private FlattenedFieldMapper(String leafName, MappedFieldType mappedFieldType, Builder builder) {
|
||||
super(leafName, mappedFieldType, MultiFields.empty(), CopyTo.empty());
|
||||
private FlattenedFieldMapper(String leafName, MappedFieldType mappedFieldType, BuilderParams builderParams, Builder builder) {
|
||||
super(leafName, mappedFieldType, builderParams);
|
||||
this.builder = builder;
|
||||
this.fieldParser = new FlattenedFieldParser(
|
||||
mappedFieldType.name(),
|
||||
|
|
|
@ -297,10 +297,9 @@ public class DenseVectorFieldMapper extends FieldMapper {
|
|||
indexOptions.getValue(),
|
||||
meta.getValue()
|
||||
),
|
||||
builderParams(this, context),
|
||||
indexOptions.getValue(),
|
||||
indexVersionCreated,
|
||||
multiFieldsBuilder.build(this, context),
|
||||
copyTo
|
||||
indexVersionCreated
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -1963,12 +1962,11 @@ public class DenseVectorFieldMapper extends FieldMapper {
|
|||
private DenseVectorFieldMapper(
|
||||
String simpleName,
|
||||
MappedFieldType mappedFieldType,
|
||||
BuilderParams params,
|
||||
IndexOptions indexOptions,
|
||||
IndexVersion indexCreatedVersion,
|
||||
MultiFields multiFields,
|
||||
CopyTo copyTo
|
||||
IndexVersion indexCreatedVersion
|
||||
) {
|
||||
super(simpleName, mappedFieldType, multiFields, copyTo);
|
||||
super(simpleName, mappedFieldType, params);
|
||||
this.indexOptions = indexOptions;
|
||||
this.indexCreatedVersion = indexCreatedVersion;
|
||||
}
|
||||
|
@ -2015,10 +2013,9 @@ public class DenseVectorFieldMapper extends FieldMapper {
|
|||
Mapper update = new DenseVectorFieldMapper(
|
||||
leafName(),
|
||||
updatedDenseVectorFieldType,
|
||||
builderParams,
|
||||
indexOptions,
|
||||
indexCreatedVersion,
|
||||
multiFields(),
|
||||
copyTo
|
||||
indexCreatedVersion
|
||||
);
|
||||
context.addDynamicMapper(update);
|
||||
return;
|
||||
|
@ -2162,7 +2159,7 @@ public class DenseVectorFieldMapper extends FieldMapper {
|
|||
|
||||
@Override
|
||||
public SourceLoader.SyntheticFieldLoader syntheticFieldLoader() {
|
||||
if (copyTo.copyToFields().isEmpty() != true) {
|
||||
if (copyTo().copyToFields().isEmpty() != true) {
|
||||
throw new IllegalArgumentException(
|
||||
"field [" + fullPath() + "] of type [" + typeName() + "] doesn't support synthetic source because it declares copy_to"
|
||||
);
|
||||
|
|
|
@ -69,8 +69,7 @@ public class SparseVectorFieldMapper extends FieldMapper {
|
|||
return new SparseVectorFieldMapper(
|
||||
leafName(),
|
||||
new SparseVectorFieldType(context.buildFullName(leafName()), meta.getValue()),
|
||||
multiFieldsBuilder.build(this, context),
|
||||
copyTo
|
||||
builderParams(this, context)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -131,8 +130,8 @@ public class SparseVectorFieldMapper extends FieldMapper {
|
|||
}
|
||||
}
|
||||
|
||||
private SparseVectorFieldMapper(String simpleName, MappedFieldType mappedFieldType, MultiFields multiFields, CopyTo copyTo) {
|
||||
super(simpleName, mappedFieldType, multiFields, copyTo, false, null);
|
||||
private SparseVectorFieldMapper(String simpleName, MappedFieldType mappedFieldType, BuilderParams builderParams) {
|
||||
super(simpleName, mappedFieldType, builderParams);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -96,7 +96,7 @@ public class MappingLookupInferenceFieldMapperTests extends MapperServiceTestCas
|
|||
public static final String CONTENT_TYPE = "test_inference_field";
|
||||
|
||||
TestInferenceFieldMapper(String simpleName) {
|
||||
super(simpleName, new TestInferenceFieldMapperFieldType(simpleName), MultiFields.empty(), CopyTo.empty());
|
||||
super(simpleName, new TestInferenceFieldMapperFieldType(simpleName), BuilderParams.empty());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -257,7 +257,7 @@ public class MappingLookupTests extends ESTestCase {
|
|||
final String indexedValue;
|
||||
|
||||
FakeFieldMapper(FakeFieldType fieldType, String indexedValue) {
|
||||
super(fieldType.name(), fieldType, MultiFields.empty(), CopyTo.empty());
|
||||
super(fieldType.name(), fieldType, BuilderParams.empty());
|
||||
this.indexedValue = indexedValue;
|
||||
}
|
||||
|
||||
|
|
|
@ -69,7 +69,7 @@ public class NonDynamicFieldMapperTests extends NonDynamicFieldMapperTestCase {
|
|||
}
|
||||
|
||||
private NonDynamicFieldMapper(String simpleName, MappedFieldType mappedFieldType) {
|
||||
super(simpleName, mappedFieldType, MultiFields.empty(), CopyTo.empty());
|
||||
super(simpleName, mappedFieldType, BuilderParams.empty());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -187,7 +187,7 @@ public final class ObjectMapperMergeTests extends ESTestCase {
|
|||
final TextFieldMapper textFieldMapper = (TextFieldMapper) metrics.getMapper("host.name");
|
||||
assertEquals("foo.metrics.host.name", textFieldMapper.fullPath());
|
||||
assertEquals("host.name", textFieldMapper.leafName());
|
||||
FieldMapper fieldMapper = textFieldMapper.multiFields.iterator().next();
|
||||
FieldMapper fieldMapper = textFieldMapper.multiFields().iterator().next();
|
||||
assertEquals("foo.metrics.host.name.keyword", fieldMapper.fullPath());
|
||||
assertEquals("keyword", fieldMapper.leafName());
|
||||
}
|
||||
|
@ -361,7 +361,7 @@ public final class ObjectMapperMergeTests extends ESTestCase {
|
|||
);
|
||||
assertEquals("host.name", textKeywordMultiField.leafName());
|
||||
assertEquals("foo.metrics.host.name", textKeywordMultiField.fullPath());
|
||||
FieldMapper fieldMapper = textKeywordMultiField.multiFields.iterator().next();
|
||||
FieldMapper fieldMapper = textKeywordMultiField.multiFields().iterator().next();
|
||||
assertEquals("keyword", fieldMapper.leafName());
|
||||
assertEquals("foo.metrics.host.name.keyword", fieldMapper.fullPath());
|
||||
return new ObjectMapper.Builder("foo", ObjectMapper.Defaults.SUBOBJECTS).add(
|
||||
|
|
|
@ -176,7 +176,7 @@ public class ParametrizedMapperTests extends MapperServiceTestCase {
|
|||
|
||||
@Override
|
||||
public FieldMapper build(MapperBuilderContext context) {
|
||||
return new TestMapper(leafName(), context.buildFullName(leafName()), multiFieldsBuilder.build(this, context), copyTo, this);
|
||||
return new TestMapper(leafName(), context.buildFullName(leafName()), builderParams(this, context), this);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -205,14 +205,8 @@ public class ParametrizedMapperTests extends MapperServiceTestCase {
|
|||
private final DummyEnumType enumField;
|
||||
private final DummyEnumType restrictedEnumField;
|
||||
|
||||
protected TestMapper(
|
||||
String simpleName,
|
||||
String fullName,
|
||||
MultiFields multiFields,
|
||||
CopyTo copyTo,
|
||||
ParametrizedMapperTests.Builder builder
|
||||
) {
|
||||
super(simpleName, new KeywordFieldMapper.KeywordFieldType(fullName), multiFields, copyTo);
|
||||
protected TestMapper(String simpleName, String fullName, BuilderParams builderParams, ParametrizedMapperTests.Builder builder) {
|
||||
super(simpleName, new KeywordFieldMapper.KeywordFieldType(fullName), builderParams);
|
||||
this.fixed = builder.fixed.getValue();
|
||||
this.fixed2 = builder.fixed2.getValue();
|
||||
this.variable = builder.variable.getValue();
|
||||
|
@ -433,6 +427,28 @@ public class ParametrizedMapperTests extends MapperServiceTestCase {
|
|||
{"field":{"type":"test_mapper","variable":"updated","required":"value"}}""", Strings.toString(noCopyTo));
|
||||
}
|
||||
|
||||
public void testStoredSource() {
|
||||
String mapping = """
|
||||
{"type":"test_mapper","variable":"foo","required":"value","synthetic_source_keep":"none"}""";
|
||||
TestMapper mapper = fromMapping(mapping);
|
||||
assertEquals("{\"field\":" + mapping + "}", Strings.toString(mapper));
|
||||
|
||||
mapping = """
|
||||
{"type":"test_mapper","variable":"foo","required":"value","synthetic_source_keep":"arrays"}""";
|
||||
mapper = fromMapping(mapping);
|
||||
assertEquals("{\"field\":" + mapping + "}", Strings.toString(mapper));
|
||||
|
||||
mapping = """
|
||||
{"type":"test_mapper","variable":"foo","required":"value","synthetic_source_keep":"all"}""";
|
||||
mapper = fromMapping(mapping);
|
||||
assertEquals("{\"field\":" + mapping + "}", Strings.toString(mapper));
|
||||
|
||||
String mappingThrows = """
|
||||
{"type":"test_mapper","variable":"foo","required":"value","synthetic_source_keep":"no-such-value"}""";
|
||||
IllegalArgumentException e = expectThrows(IllegalArgumentException.class, () -> fromMapping(mappingThrows));
|
||||
assertEquals("Unknown synthetic_source_keep value [no-such-value], accepted values are [none,arrays,all]", e.getMessage());
|
||||
}
|
||||
|
||||
public void testNullables() {
|
||||
String mapping = """
|
||||
{"type":"test_mapper","fixed":null,"required":"value"}""";
|
||||
|
|
|
@ -21,15 +21,15 @@ public class MockFieldMapper extends FieldMapper {
|
|||
}
|
||||
|
||||
public MockFieldMapper(MappedFieldType fieldType) {
|
||||
this(findSimpleName(fieldType.name()), fieldType, MultiFields.empty(), CopyTo.empty());
|
||||
this(findSimpleName(fieldType.name()), fieldType, BuilderParams.empty());
|
||||
}
|
||||
|
||||
public MockFieldMapper(MappedFieldType fieldType, String simpleName) {
|
||||
super(simpleName, fieldType, MultiFields.empty(), CopyTo.empty(), false, null);
|
||||
super(simpleName, fieldType, BuilderParams.empty());
|
||||
}
|
||||
|
||||
public MockFieldMapper(String fullName, MappedFieldType fieldType, MultiFields multifields, CopyTo copyTo) {
|
||||
super(findSimpleName(fullName), fieldType, multifields, copyTo, false, null);
|
||||
public MockFieldMapper(String fullName, MappedFieldType fieldType, BuilderParams params) {
|
||||
super(findSimpleName(fullName), fieldType, params);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -91,8 +91,7 @@ public class MockFieldMapper extends FieldMapper {
|
|||
|
||||
@Override
|
||||
public MockFieldMapper build(MapperBuilderContext context) {
|
||||
MultiFields multiFields = multiFieldsBuilder.build(this, context);
|
||||
return new MockFieldMapper(leafName(), fieldType, multiFields, copyTo);
|
||||
return new MockFieldMapper(leafName(), fieldType, builderParams(this, context));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -75,7 +75,7 @@ public abstract class NumberFieldMapperTests extends MapperTestCase {
|
|||
minimalMapping(b);
|
||||
b.field("script", "test");
|
||||
b.field("on_script_error", "continue");
|
||||
}, m -> assertThat((m).onScriptError, is(OnScriptError.CONTINUE)));
|
||||
}, m -> assertThat((m).builderParams.onScriptError(), is(OnScriptError.CONTINUE)));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -98,8 +98,7 @@ public class HistogramFieldMapper extends FieldMapper {
|
|||
return new HistogramFieldMapper(
|
||||
leafName(),
|
||||
new HistogramFieldType(context.buildFullName(leafName()), meta.getValue()),
|
||||
multiFieldsBuilder.build(this, context),
|
||||
copyTo,
|
||||
builderParams(this, context),
|
||||
this
|
||||
);
|
||||
}
|
||||
|
@ -113,14 +112,8 @@ public class HistogramFieldMapper extends FieldMapper {
|
|||
private final Explicit<Boolean> ignoreMalformed;
|
||||
private final boolean ignoreMalformedByDefault;
|
||||
|
||||
public HistogramFieldMapper(
|
||||
String simpleName,
|
||||
MappedFieldType mappedFieldType,
|
||||
MultiFields multiFields,
|
||||
CopyTo copyTo,
|
||||
Builder builder
|
||||
) {
|
||||
super(simpleName, mappedFieldType, multiFields, copyTo);
|
||||
public HistogramFieldMapper(String simpleName, MappedFieldType mappedFieldType, BuilderParams builderParams, Builder builder) {
|
||||
super(simpleName, mappedFieldType, builderParams);
|
||||
this.ignoreMalformed = builder.ignoreMalformed.getValue();
|
||||
this.ignoreMalformedByDefault = builder.ignoreMalformed.getDefaultValue().value();
|
||||
}
|
||||
|
@ -513,7 +506,7 @@ public class HistogramFieldMapper extends FieldMapper {
|
|||
|
||||
@Override
|
||||
public SourceLoader.SyntheticFieldLoader syntheticFieldLoader() {
|
||||
if (copyTo.copyToFields().isEmpty() != true) {
|
||||
if (copyTo().copyToFields().isEmpty() != true) {
|
||||
throw new IllegalArgumentException(
|
||||
"field [" + fullPath() + "] of type [histogram] doesn't support synthetic source because it declares copy_to"
|
||||
);
|
||||
|
|
|
@ -170,13 +170,13 @@ public class SemanticTextFieldMapper extends FieldMapper implements InferenceFie
|
|||
indexVersionCreated,
|
||||
meta.getValue()
|
||||
),
|
||||
copyTo
|
||||
builderParams(this, context)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
private SemanticTextFieldMapper(String simpleName, MappedFieldType mappedFieldType, CopyTo copyTo) {
|
||||
super(simpleName, mappedFieldType, MultiFields.empty(), copyTo);
|
||||
private SemanticTextFieldMapper(String simpleName, MappedFieldType mappedFieldType, BuilderParams builderParams) {
|
||||
super(simpleName, mappedFieldType, builderParams);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -267,7 +267,7 @@ public class AggregateDoubleMetricFieldMapper extends FieldMapper {
|
|||
metricFieldType.setMetricFields(metricFields);
|
||||
metricFieldType.setDefaultMetric(defaultMetric.getValue());
|
||||
|
||||
return new AggregateDoubleMetricFieldMapper(leafName(), metricFieldType, metricMappers, this);
|
||||
return new AggregateDoubleMetricFieldMapper(leafName(), metricFieldType, metricMappers, builderParams(this, context), this);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -543,9 +543,10 @@ public class AggregateDoubleMetricFieldMapper extends FieldMapper {
|
|||
String simpleName,
|
||||
MappedFieldType mappedFieldType,
|
||||
EnumMap<Metric, NumberFieldMapper> metricFieldMappers,
|
||||
BuilderParams builderParams,
|
||||
Builder builder
|
||||
) {
|
||||
super(simpleName, mappedFieldType, MultiFields.empty(), CopyTo.empty());
|
||||
super(simpleName, mappedFieldType, builderParams);
|
||||
this.ignoreMalformed = builder.ignoreMalformed.getValue();
|
||||
this.ignoreMalformedByDefault = builder.ignoreMalformed.getDefaultValue();
|
||||
this.metrics = builder.metrics.getValue();
|
||||
|
|
|
@ -111,7 +111,8 @@ public class ConstantKeywordFieldMapper extends FieldMapper {
|
|||
}
|
||||
return new ConstantKeywordFieldMapper(
|
||||
leafName(),
|
||||
new ConstantKeywordFieldType(context.buildFullName(leafName()), value.getValue(), meta.getValue())
|
||||
new ConstantKeywordFieldType(context.buildFullName(leafName()), value.getValue(), meta.getValue()),
|
||||
builderParams(this, context)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -301,8 +302,8 @@ public class ConstantKeywordFieldMapper extends FieldMapper {
|
|||
|
||||
}
|
||||
|
||||
ConstantKeywordFieldMapper(String simpleName, MappedFieldType mappedFieldType) {
|
||||
super(simpleName, mappedFieldType, MultiFields.empty(), CopyTo.empty());
|
||||
ConstantKeywordFieldMapper(String simpleName, MappedFieldType mappedFieldType, BuilderParams builderParams) {
|
||||
super(simpleName, mappedFieldType, builderParams);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -321,7 +322,7 @@ public class ConstantKeywordFieldMapper extends FieldMapper {
|
|||
|
||||
if (fieldType().value == null) {
|
||||
ConstantKeywordFieldType newFieldType = new ConstantKeywordFieldType(fieldType().name(), value, fieldType().meta());
|
||||
Mapper update = new ConstantKeywordFieldMapper(leafName(), newFieldType);
|
||||
Mapper update = new ConstantKeywordFieldMapper(leafName(), newFieldType, builderParams);
|
||||
boolean dynamicMapperAdded = context.addDynamicMapper(update);
|
||||
// the mapper is already part of the mapping, we're just updating it with the new value
|
||||
assert dynamicMapperAdded;
|
||||
|
|
|
@ -307,8 +307,7 @@ public class CountedKeywordFieldMapper extends FieldMapper {
|
|||
meta.getValue(),
|
||||
countFieldMapper.fieldType()
|
||||
),
|
||||
multiFieldsBuilder.build(this, context),
|
||||
copyTo,
|
||||
builderParams(this, context),
|
||||
countFieldMapper
|
||||
);
|
||||
}
|
||||
|
@ -323,11 +322,10 @@ public class CountedKeywordFieldMapper extends FieldMapper {
|
|||
String simpleName,
|
||||
FieldType fieldType,
|
||||
MappedFieldType mappedFieldType,
|
||||
MultiFields multiFields,
|
||||
CopyTo copyTo,
|
||||
BuilderParams builderParams,
|
||||
BinaryFieldMapper countFieldMapper
|
||||
) {
|
||||
super(simpleName, mappedFieldType, multiFields, copyTo);
|
||||
super(simpleName, mappedFieldType, builderParams);
|
||||
this.fieldType = fieldType;
|
||||
this.countFieldMapper = countFieldMapper;
|
||||
}
|
||||
|
|
|
@ -210,14 +210,7 @@ public class UnsignedLongFieldMapper extends FieldMapper {
|
|||
metric.getValue(),
|
||||
indexMode
|
||||
);
|
||||
return new UnsignedLongFieldMapper(
|
||||
leafName(),
|
||||
fieldType,
|
||||
multiFieldsBuilder.build(this, context),
|
||||
copyTo,
|
||||
context.isSourceSynthetic(),
|
||||
this
|
||||
);
|
||||
return new UnsignedLongFieldMapper(leafName(), fieldType, builderParams(this, context), context.isSourceSynthetic(), this);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -577,12 +570,11 @@ public class UnsignedLongFieldMapper extends FieldMapper {
|
|||
private UnsignedLongFieldMapper(
|
||||
String simpleName,
|
||||
MappedFieldType mappedFieldType,
|
||||
MultiFields multiFields,
|
||||
CopyTo copyTo,
|
||||
BuilderParams builderParams,
|
||||
boolean isSourceSynthetic,
|
||||
Builder builder
|
||||
) {
|
||||
super(simpleName, mappedFieldType, multiFields, copyTo);
|
||||
super(simpleName, mappedFieldType, builderParams);
|
||||
this.isSourceSynthetic = isSourceSynthetic;
|
||||
this.indexed = builder.indexed.getValue();
|
||||
this.hasDocValues = builder.hasDocValues.getValue();
|
||||
|
@ -776,7 +768,7 @@ public class UnsignedLongFieldMapper extends FieldMapper {
|
|||
+ "] doesn't support synthetic source because it doesn't have doc values"
|
||||
);
|
||||
}
|
||||
if (copyTo.copyToFields().isEmpty() != true) {
|
||||
if (copyTo().copyToFields().isEmpty() != true) {
|
||||
throw new IllegalArgumentException(
|
||||
"field [" + fullPath() + "] of type [" + typeName() + "] doesn't support synthetic source because it declares copy_to"
|
||||
);
|
||||
|
|
|
@ -119,13 +119,7 @@ public class VersionStringFieldMapper extends FieldMapper {
|
|||
@Override
|
||||
public VersionStringFieldMapper build(MapperBuilderContext context) {
|
||||
FieldType fieldtype = new FieldType(Defaults.FIELD_TYPE);
|
||||
return new VersionStringFieldMapper(
|
||||
leafName(),
|
||||
fieldtype,
|
||||
buildFieldType(context, fieldtype),
|
||||
multiFieldsBuilder.build(this, context),
|
||||
copyTo
|
||||
);
|
||||
return new VersionStringFieldMapper(leafName(), fieldtype, buildFieldType(context, fieldtype), builderParams(this, context));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -361,14 +355,8 @@ public class VersionStringFieldMapper extends FieldMapper {
|
|||
|
||||
private final FieldType fieldType;
|
||||
|
||||
private VersionStringFieldMapper(
|
||||
String simpleName,
|
||||
FieldType fieldType,
|
||||
MappedFieldType mappedFieldType,
|
||||
MultiFields multiFields,
|
||||
CopyTo copyTo
|
||||
) {
|
||||
super(simpleName, mappedFieldType, multiFields, copyTo);
|
||||
private VersionStringFieldMapper(String simpleName, FieldType fieldType, MappedFieldType mappedFieldType, BuilderParams buildParams) {
|
||||
super(simpleName, mappedFieldType, buildParams);
|
||||
this.fieldType = freezeAndDeduplicateFieldType(fieldType);
|
||||
}
|
||||
|
||||
|
@ -453,7 +441,7 @@ public class VersionStringFieldMapper extends FieldMapper {
|
|||
|
||||
@Override
|
||||
public SourceLoader.SyntheticFieldLoader syntheticFieldLoader() {
|
||||
if (copyTo.copyToFields().isEmpty() != true) {
|
||||
if (copyTo().copyToFields().isEmpty() != true) {
|
||||
throw new IllegalArgumentException(
|
||||
"field [" + fullPath() + "] of type [" + typeName() + "] doesn't support synthetic source because it declares copy_to"
|
||||
);
|
||||
|
|
|
@ -111,7 +111,7 @@ public class GeoShapeWithDocValuesFieldMapper extends AbstractShapeGeometryField
|
|||
final Parameter<Explicit<Boolean>> coerce;
|
||||
final Parameter<Explicit<Orientation>> orientation = orientationParam(m -> builder(m).orientation.get());
|
||||
private final Parameter<Script> script = Parameter.scriptParam(m -> builder(m).script.get());
|
||||
private final Parameter<OnScriptError> onScriptError = Parameter.onScriptErrorParam(m -> builder(m).onScriptError.get(), script);
|
||||
private final Parameter<OnScriptError> onScriptErrorParam = Parameter.onScriptErrorParam(m -> builder(m).onScriptError, script);
|
||||
final Parameter<Map<String, String>> meta = Parameter.metaParam();
|
||||
private final ScriptCompiler scriptCompiler;
|
||||
private final IndexVersion version;
|
||||
|
@ -152,7 +152,7 @@ public class GeoShapeWithDocValuesFieldMapper extends AbstractShapeGeometryField
|
|||
coerce,
|
||||
orientation,
|
||||
script,
|
||||
onScriptError,
|
||||
onScriptErrorParam,
|
||||
meta };
|
||||
}
|
||||
|
||||
|
@ -194,29 +194,17 @@ public class GeoShapeWithDocValuesFieldMapper extends AbstractShapeGeometryField
|
|||
geoFormatterFactory,
|
||||
meta.get()
|
||||
);
|
||||
if (script.get() == null) {
|
||||
hasScript = script.get() != null;
|
||||
onScriptError = onScriptErrorParam.get();
|
||||
return new GeoShapeWithDocValuesFieldMapper(
|
||||
leafName(),
|
||||
ft,
|
||||
multiFieldsBuilder.build(this, context),
|
||||
copyTo,
|
||||
builderParams(this, context),
|
||||
new GeoShapeIndexer(orientation.get().value(), ft.name()),
|
||||
parser,
|
||||
this
|
||||
);
|
||||
}
|
||||
return new GeoShapeWithDocValuesFieldMapper(
|
||||
leafName(),
|
||||
ft,
|
||||
multiFieldsBuilder.build(this, context),
|
||||
copyTo,
|
||||
new GeoShapeIndexer(orientation.get().value(), ft.name()),
|
||||
parser,
|
||||
onScriptError.get(),
|
||||
this
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static final class GeoShapeWithDocValuesFieldType extends AbstractShapeGeometryFieldType<Geometry> implements GeoShapeQueryable {
|
||||
|
@ -365,8 +353,7 @@ public class GeoShapeWithDocValuesFieldMapper extends AbstractShapeGeometryField
|
|||
public GeoShapeWithDocValuesFieldMapper(
|
||||
String simpleName,
|
||||
MappedFieldType mappedFieldType,
|
||||
MultiFields multiFields,
|
||||
CopyTo copyTo,
|
||||
BuilderParams builderParams,
|
||||
GeoShapeIndexer indexer,
|
||||
GeoShapeParser parser,
|
||||
Builder builder
|
||||
|
@ -374,33 +361,17 @@ public class GeoShapeWithDocValuesFieldMapper extends AbstractShapeGeometryField
|
|||
super(
|
||||
simpleName,
|
||||
mappedFieldType,
|
||||
builderParams,
|
||||
builder.ignoreMalformed.get(),
|
||||
builder.coerce.get(),
|
||||
builder.ignoreZValue.get(),
|
||||
builder.orientation.get(),
|
||||
multiFields,
|
||||
copyTo,
|
||||
parser
|
||||
);
|
||||
this.builder = builder;
|
||||
this.indexer = indexer;
|
||||
}
|
||||
|
||||
protected GeoShapeWithDocValuesFieldMapper(
|
||||
String simpleName,
|
||||
MappedFieldType mappedFieldType,
|
||||
MultiFields multiFields,
|
||||
CopyTo copyTo,
|
||||
GeoShapeIndexer indexer,
|
||||
Parser<Geometry> parser,
|
||||
OnScriptError onScriptError,
|
||||
Builder builder
|
||||
) {
|
||||
super(simpleName, mappedFieldType, multiFields, builder.coerce.get(), builder.orientation.get(), copyTo, parser, onScriptError);
|
||||
this.builder = builder;
|
||||
this.indexer = indexer;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void index(DocumentParserContext context, Geometry geometry) {
|
||||
// TODO: Make common with the index method ShapeFieldMapper
|
||||
|
|
|
@ -116,7 +116,7 @@ public class PointFieldMapper extends AbstractPointGeometryFieldMapper<Cartesian
|
|||
nullValue.get(),
|
||||
meta.get()
|
||||
);
|
||||
return new PointFieldMapper(leafName(), ft, multiFieldsBuilder.build(this, context), copyTo, parser, this);
|
||||
return new PointFieldMapper(leafName(), ft, builderParams(this, context), parser, this);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -128,19 +128,17 @@ public class PointFieldMapper extends AbstractPointGeometryFieldMapper<Cartesian
|
|||
public PointFieldMapper(
|
||||
String simpleName,
|
||||
MappedFieldType mappedFieldType,
|
||||
MultiFields multiFields,
|
||||
CopyTo copyTo,
|
||||
BuilderParams builderParams,
|
||||
CartesianPointParser parser,
|
||||
Builder builder
|
||||
) {
|
||||
super(
|
||||
simpleName,
|
||||
mappedFieldType,
|
||||
multiFields,
|
||||
builderParams,
|
||||
builder.ignoreMalformed.get(),
|
||||
builder.ignoreZValue.get(),
|
||||
builder.nullValue.get(),
|
||||
copyTo,
|
||||
parser
|
||||
);
|
||||
this.builder = builder;
|
||||
|
|
|
@ -122,7 +122,7 @@ public class ShapeFieldMapper extends AbstractShapeGeometryFieldMapper<Geometry>
|
|||
parser,
|
||||
meta.get()
|
||||
);
|
||||
return new ShapeFieldMapper(leafName(), ft, multiFieldsBuilder.build(this, context), copyTo, parser, this);
|
||||
return new ShapeFieldMapper(leafName(), ft, builderParams(this, context), parser, this);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -192,20 +192,18 @@ public class ShapeFieldMapper extends AbstractShapeGeometryFieldMapper<Geometry>
|
|||
public ShapeFieldMapper(
|
||||
String simpleName,
|
||||
MappedFieldType mappedFieldType,
|
||||
MultiFields multiFields,
|
||||
CopyTo copyTo,
|
||||
BuilderParams builderParams,
|
||||
Parser<Geometry> parser,
|
||||
Builder builder
|
||||
) {
|
||||
super(
|
||||
simpleName,
|
||||
mappedFieldType,
|
||||
builderParams,
|
||||
builder.ignoreMalformed.get(),
|
||||
builder.coerce.get(),
|
||||
builder.ignoreZValue.get(),
|
||||
builder.orientation.get(),
|
||||
multiFields,
|
||||
copyTo,
|
||||
parser
|
||||
);
|
||||
this.builder = builder;
|
||||
|
|
|
@ -246,8 +246,7 @@ public class WildcardFieldMapper extends FieldMapper {
|
|||
),
|
||||
ignoreAbove.get(),
|
||||
context.isSourceSynthetic(),
|
||||
multiFieldsBuilder.build(this, context),
|
||||
copyTo,
|
||||
builderParams(this, context),
|
||||
nullValue.get(),
|
||||
indexVersionCreated
|
||||
);
|
||||
|
@ -902,12 +901,11 @@ public class WildcardFieldMapper extends FieldMapper {
|
|||
WildcardFieldType mappedFieldType,
|
||||
int ignoreAbove,
|
||||
boolean storeIgnored,
|
||||
MultiFields multiFields,
|
||||
CopyTo copyTo,
|
||||
BuilderParams builderParams,
|
||||
String nullValue,
|
||||
IndexVersion indexVersionCreated
|
||||
) {
|
||||
super(simpleName, mappedFieldType, multiFields, copyTo);
|
||||
super(simpleName, mappedFieldType, builderParams);
|
||||
this.nullValue = nullValue;
|
||||
this.ignoreAbove = ignoreAbove;
|
||||
this.storeIgnored = storeIgnored;
|
||||
|
@ -996,7 +994,7 @@ public class WildcardFieldMapper extends FieldMapper {
|
|||
|
||||
@Override
|
||||
public SourceLoader.SyntheticFieldLoader syntheticFieldLoader() {
|
||||
if (copyTo.copyToFields().isEmpty() != true) {
|
||||
if (copyTo().copyToFields().isEmpty() != true) {
|
||||
throw new IllegalArgumentException(
|
||||
"field [" + fullPath() + "] of type [" + typeName() + "] doesn't support synthetic source because it declares copy_to"
|
||||
);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue