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