From e83ae64ea9163831c530573fbd35166ee328c503 Mon Sep 17 00:00:00 2001 From: Ryan Ernst Date: Thu, 2 Jul 2015 18:30:09 -0700 Subject: [PATCH] Mappings: Completely move doc values and fielddata settings to field types While MappedFieldType contains settings for doc values and fielddata, AbstractFieldMapper had special logic in its constructor that required setting these on the field type from there. This change removes those settings from the AbstractFieldMapper constructor. As a result, defaultDocValues(), defaultFieldType() and defaultFieldDataType() are no longer needed. --- .../common/settings/Settings.java | 2 +- .../index/mapper/MappedFieldType.java | 2 + .../index/mapper/MetadataFieldMapper.java | 4 +- .../mapper/core/AbstractFieldMapper.java | 99 +++++++------------ .../index/mapper/core/BinaryFieldMapper.java | 20 +--- .../index/mapper/core/BooleanFieldMapper.java | 21 +--- .../index/mapper/core/ByteFieldMapper.java | 20 +--- .../mapper/core/CompletionFieldMapper.java | 16 +-- .../index/mapper/core/DateFieldMapper.java | 22 ++--- .../index/mapper/core/DoubleFieldMapper.java | 20 +--- .../index/mapper/core/FloatFieldMapper.java | 20 +--- .../index/mapper/core/IntegerFieldMapper.java | 22 ++--- .../index/mapper/core/LongFieldMapper.java | 19 +--- .../index/mapper/core/Murmur3FieldMapper.java | 10 +- .../index/mapper/core/NumberFieldMapper.java | 7 +- .../index/mapper/core/ShortFieldMapper.java | 20 +--- .../index/mapper/core/StringFieldMapper.java | 24 +---- .../mapper/core/TokenCountFieldMapper.java | 11 +-- .../index/mapper/geo/GeoPointFieldMapper.java | 25 +---- .../index/mapper/geo/GeoShapeFieldMapper.java | 12 +-- .../index/mapper/internal/AllFieldMapper.java | 32 ++---- .../internal/FieldNamesFieldMapper.java | 27 ++--- .../index/mapper/internal/IdFieldMapper.java | 31 ++---- .../mapper/internal/IndexFieldMapper.java | 33 ++----- .../mapper/internal/ParentFieldMapper.java | 43 +++----- .../mapper/internal/RoutingFieldMapper.java | 16 +-- .../mapper/internal/SizeFieldMapper.java | 13 +-- .../mapper/internal/SourceFieldMapper.java | 12 +-- .../index/mapper/internal/TTLFieldMapper.java | 13 +-- .../mapper/internal/TimestampFieldMapper.java | 39 +++----- .../mapper/internal/TypeFieldMapper.java | 17 +--- .../index/mapper/internal/UidFieldMapper.java | 38 ++----- .../mapper/internal/VersionFieldMapper.java | 18 ++-- .../index/mapper/ip/IpFieldMapper.java | 25 ++--- .../index/mapper/FieldTypeLookupTests.java | 6 +- .../mapper/all/SimpleAllMapperTests.java | 8 -- .../mapper/externalvalues/ExternalMapper.java | 13 +-- .../ExternalMetadataMapper.java | 12 +-- 38 files changed, 210 insertions(+), 582 deletions(-) diff --git a/core/src/main/java/org/elasticsearch/common/settings/Settings.java b/core/src/main/java/org/elasticsearch/common/settings/Settings.java index 24743afe980..d0145c6dfbe 100644 --- a/core/src/main/java/org/elasticsearch/common/settings/Settings.java +++ b/core/src/main/java/org/elasticsearch/common/settings/Settings.java @@ -81,7 +81,7 @@ public final class Settings implements ToXContent { private transient ClassLoader classLoader; Settings(Map settings, ClassLoader classLoader) { - this.settings = ImmutableMap.copyOf(settings); + this.settings = ImmutableMap.copyOf(new TreeMap<>(settings)); Map forcedUnderscoreSettings = null; for (Map.Entry entry : settings.entrySet()) { String toUnderscoreCase = Strings.toUnderscoreCase(entry.getKey()); diff --git a/core/src/main/java/org/elasticsearch/index/mapper/MappedFieldType.java b/core/src/main/java/org/elasticsearch/index/mapper/MappedFieldType.java index f0d0483de16..02366a3f79e 100644 --- a/core/src/main/java/org/elasticsearch/index/mapper/MappedFieldType.java +++ b/core/src/main/java/org/elasticsearch/index/mapper/MappedFieldType.java @@ -37,6 +37,7 @@ import org.apache.lucene.util.BytesRef; import org.elasticsearch.action.fieldstats.FieldStats; import org.elasticsearch.common.Nullable; import org.elasticsearch.common.lucene.BytesRefs; +import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.unit.Fuzziness; import org.elasticsearch.index.analysis.NamedAnalyzer; import org.elasticsearch.index.fielddata.FieldDataType; @@ -189,6 +190,7 @@ public abstract class MappedFieldType extends FieldType { setOmitNorms(false); setIndexOptions(IndexOptions.DOCS_AND_FREQS_AND_POSITIONS); setBoost(1.0f); + fieldDataType = new FieldDataType(typeName()); } public abstract MappedFieldType clone(); diff --git a/core/src/main/java/org/elasticsearch/index/mapper/MetadataFieldMapper.java b/core/src/main/java/org/elasticsearch/index/mapper/MetadataFieldMapper.java index 541b4fdf645..d376cef074b 100644 --- a/core/src/main/java/org/elasticsearch/index/mapper/MetadataFieldMapper.java +++ b/core/src/main/java/org/elasticsearch/index/mapper/MetadataFieldMapper.java @@ -38,8 +38,8 @@ public abstract class MetadataFieldMapper extends AbstractFieldMapper { } } - protected MetadataFieldMapper(String simpleName, MappedFieldType fieldType, Boolean docValues, @Nullable Settings fieldDataSettings, Settings indexSettings) { - super(simpleName, fieldType, docValues, fieldDataSettings, indexSettings, MultiFields.empty(), null); + protected MetadataFieldMapper(String simpleName, MappedFieldType fieldType, MappedFieldType defaultFieldType, Settings indexSettings) { + super(simpleName, fieldType, defaultFieldType, indexSettings, MultiFields.empty(), null); } /** diff --git a/core/src/main/java/org/elasticsearch/index/mapper/core/AbstractFieldMapper.java b/core/src/main/java/org/elasticsearch/index/mapper/core/AbstractFieldMapper.java index cc62dc412cb..9393a4944e0 100644 --- a/core/src/main/java/org/elasticsearch/index/mapper/core/AbstractFieldMapper.java +++ b/core/src/main/java/org/elasticsearch/index/mapper/core/AbstractFieldMapper.java @@ -70,12 +70,13 @@ public abstract class AbstractFieldMapper extends FieldMapper { public abstract static class Builder extends Mapper.Builder { protected final MappedFieldType fieldType; + protected final MappedFieldType defaultFieldType; private final IndexOptions defaultOptions; - protected Boolean docValues; protected boolean omitNormsSet = false; protected String indexName; protected Boolean includeInAll; protected boolean indexOptionsSet = false; + protected boolean docValuesSet = false; @Nullable protected Settings fieldDataSettings; protected final MultiFields.Builder multiFieldsBuilder; @@ -84,6 +85,7 @@ public abstract class AbstractFieldMapper extends FieldMapper { protected Builder(String name, MappedFieldType fieldType) { super(name); this.fieldType = fieldType.clone(); + this.defaultFieldType = fieldType.clone(); this.defaultOptions = fieldType.indexOptions(); // we have to store it the fieldType is mutable multiFieldsBuilder = new MultiFields.Builder(); } @@ -116,7 +118,8 @@ public abstract class AbstractFieldMapper extends FieldMapper { } public T docValues(boolean docValues) { - this.docValues = docValues; + this.fieldType.setHasDocValues(docValues); + this.docValuesSet = true; return builder; } @@ -253,76 +256,53 @@ public abstract class AbstractFieldMapper extends FieldMapper { protected void setupFieldType(BuilderContext context) { fieldType.setNames(buildNames(context)); + if (fieldType.indexAnalyzer() == null && fieldType.tokenized() == false && fieldType.indexOptions() != IndexOptions.NONE) { + fieldType.setIndexAnalyzer(Lucene.KEYWORD_ANALYZER); + fieldType.setSearchAnalyzer(Lucene.KEYWORD_ANALYZER); + } + if (fieldDataSettings != null) { + Settings settings = Settings.builder().put(fieldType.fieldDataType().getSettings()).put(fieldDataSettings).build(); + fieldType.setFieldDataType(new FieldDataType(fieldType.fieldDataType().getType(), settings)); + } + boolean defaultDocValues = false; // pre 2.0 + if (context.indexCreatedVersion().onOrAfter(Version.V_2_0_0)) { + defaultDocValues = fieldType.tokenized() == false && fieldType.indexOptions() != IndexOptions.NONE; + } + // backcompat for "fielddata: format: docvalues" for now... + boolean fieldDataDocValues = fieldType.fieldDataType() != null + && FieldDataType.DOC_VALUES_FORMAT_VALUE.equals(fieldType.fieldDataType().getFormat(context.indexSettings())); + if (fieldDataDocValues && docValuesSet && fieldType.hasDocValues() == false) { + // this forces the doc_values setting to be written, so fielddata does not mask the original setting + defaultDocValues = true; + } + defaultFieldType.setHasDocValues(defaultDocValues); + if (docValuesSet == false) { + fieldType.setHasDocValues(defaultDocValues || fieldDataDocValues); + } } } protected MappedFieldTypeReference fieldTypeRef; - protected final boolean hasDefaultDocValues; - protected Settings customFieldDataSettings; + protected final MappedFieldType defaultFieldType; protected final MultiFields multiFields; protected CopyTo copyTo; protected final boolean indexCreatedBefore2x; - protected AbstractFieldMapper(String simpleName, MappedFieldType fieldType, Boolean docValues, @Nullable Settings fieldDataSettings, Settings indexSettings) { - this(simpleName, fieldType, docValues, fieldDataSettings, indexSettings, MultiFields.empty(), null); - } - - protected AbstractFieldMapper(String simpleName, MappedFieldType fieldType, Boolean docValues, @Nullable Settings fieldDataSettings, Settings indexSettings, MultiFields multiFields, CopyTo copyTo) { + protected AbstractFieldMapper(String simpleName, MappedFieldType fieldType, MappedFieldType defaultFieldType, Settings indexSettings, MultiFields multiFields, CopyTo copyTo) { super(simpleName); assert indexSettings != null; this.indexCreatedBefore2x = Version.indexCreated(indexSettings).before(Version.V_2_0_0); - this.customFieldDataSettings = fieldDataSettings; - FieldDataType fieldDataType; - if (fieldDataSettings == null) { - fieldDataType = defaultFieldDataType(); - } else { - // create a new field data type, with the default settings as well as the "new ones" - fieldDataType = new FieldDataType(defaultFieldDataType().getType(), - Settings.builder().put(defaultFieldDataType().getSettings()).put(fieldDataSettings) - ); - } - - // TODO: hasDocValues should just be set directly on the field type by callers of this ctor, but - // then we need to eliminate defaultDocValues() (only needed by geo, which needs to be fixed with passing - // doc values setting down to lat/lon) and get rid of specifying doc values in fielddata (which - // complicates whether we can just compare to the default value to know whether to write the setting) - if (docValues == null && fieldDataType != null && FieldDataType.DOC_VALUES_FORMAT_VALUE.equals(fieldDataType.getFormat(indexSettings))) { - docValues = true; - } - hasDefaultDocValues = docValues == null; - - this.fieldTypeRef = new MappedFieldTypeReference(fieldType); // must init first so defaultDocValues() can be called - fieldType = fieldType.clone(); - if (fieldType.indexAnalyzer() == null && fieldType.tokenized() == false && fieldType.indexOptions() != IndexOptions.NONE) { - fieldType.setIndexAnalyzer(Lucene.KEYWORD_ANALYZER); - fieldType.setSearchAnalyzer(Lucene.KEYWORD_ANALYZER); - } - fieldType.setHasDocValues(docValues == null ? defaultDocValues() : docValues); - fieldType.setFieldDataType(fieldDataType); - fieldType.freeze(); - this.fieldTypeRef.set(fieldType); // now reset ref once extra settings have been initialized - + this.fieldTypeRef = new MappedFieldTypeReference(fieldType); + this.defaultFieldType = defaultFieldType; this.multiFields = multiFields; this.copyTo = copyTo; } - - protected boolean defaultDocValues() { - if (indexCreatedBefore2x) { - return false; - } else { - return fieldType().tokenized() == false && fieldType().indexOptions() != IndexOptions.NONE; - } - } @Override public String name() { return fieldType().names().fullName(); } - public abstract MappedFieldType defaultFieldType(); - - public abstract FieldDataType defaultFieldDataType(); - @Override public MappedFieldType fieldType() { return fieldTypeRef.get(); @@ -417,7 +397,6 @@ public abstract class AbstractFieldMapper extends FieldMapper { MappedFieldType fieldType = fieldMergeWith.fieldType().clone(); fieldType.freeze(); fieldTypeRef.set(fieldType); - this.customFieldDataSettings = fieldMergeWith.customFieldDataSettings; this.copyTo = fieldMergeWith.copyTo; } } @@ -441,7 +420,6 @@ public abstract class AbstractFieldMapper extends FieldMapper { builder.field("boost", fieldType().boost()); } - FieldType defaultFieldType = defaultFieldType(); boolean indexed = fieldType().indexOptions() != IndexOptions.NONE; boolean defaultIndexed = defaultFieldType.indexOptions() != IndexOptions.NONE; if (includeDefaults || indexed != defaultIndexed || @@ -477,13 +455,8 @@ public abstract class AbstractFieldMapper extends FieldMapper { builder.field("similarity", SimilarityLookupService.DEFAULT_SIMILARITY); } - TreeMap orderedFielddataSettings = new TreeMap<>(); - if (hasCustomFieldDataSettings()) { - orderedFielddataSettings.putAll(customFieldDataSettings.getAsMap()); - builder.field("fielddata", orderedFielddataSettings); - } else if (includeDefaults) { - orderedFielddataSettings.putAll(fieldType().fieldDataType().getSettings().getAsMap()); - builder.field("fielddata", orderedFielddataSettings); + if (includeDefaults || hasCustomFieldDataSettings()) { + builder.field("fielddata", fieldType().fieldDataType().getSettings().getAsMap()); } multiFields.toXContent(builder, params); @@ -506,7 +479,7 @@ public abstract class AbstractFieldMapper extends FieldMapper { } protected void doXContentDocValues(XContentBuilder builder, boolean includeDefaults) throws IOException { - if (includeDefaults || hasDefaultDocValues == false) { + if (includeDefaults || defaultFieldType.hasDocValues() != fieldType().hasDocValues()) { builder.field(DOC_VALUES, fieldType().hasDocValues()); } } @@ -559,7 +532,7 @@ public abstract class AbstractFieldMapper extends FieldMapper { } protected boolean hasCustomFieldDataSettings() { - return customFieldDataSettings != null && customFieldDataSettings.equals(Settings.EMPTY) == false; + return fieldType().fieldDataType() != null && fieldType().fieldDataType().equals(defaultFieldType.fieldDataType()) == false; } protected abstract String contentType(); diff --git a/core/src/main/java/org/elasticsearch/index/mapper/core/BinaryFieldMapper.java b/core/src/main/java/org/elasticsearch/index/mapper/core/BinaryFieldMapper.java index 13c1c8b37d9..a3423ee7fc6 100644 --- a/core/src/main/java/org/elasticsearch/index/mapper/core/BinaryFieldMapper.java +++ b/core/src/main/java/org/elasticsearch/index/mapper/core/BinaryFieldMapper.java @@ -81,8 +81,8 @@ public class BinaryFieldMapper extends AbstractFieldMapper { public BinaryFieldMapper build(BuilderContext context) { setupFieldType(context); ((BinaryFieldType)fieldType).setTryUncompressing(context.indexCreatedVersion().before(Version.V_2_0_0)); - return new BinaryFieldMapper(name, fieldType, docValues, - fieldDataSettings, context.indexSettings(), multiFieldsBuilder.build(this, context), copyTo); + return new BinaryFieldMapper(name, fieldType, defaultFieldType, + context.indexSettings(), multiFieldsBuilder.build(this, context), copyTo); } } @@ -181,19 +181,9 @@ public class BinaryFieldMapper extends AbstractFieldMapper { } } - protected BinaryFieldMapper(String simpleName, MappedFieldType fieldType, Boolean docValues, - @Nullable Settings fieldDataSettings, Settings indexSettings, MultiFields multiFields, CopyTo copyTo) { - super(simpleName, fieldType, docValues, fieldDataSettings, indexSettings, multiFields, copyTo); - } - - @Override - public MappedFieldType defaultFieldType() { - return Defaults.FIELD_TYPE; - } - - @Override - public FieldDataType defaultFieldDataType() { - return new FieldDataType("binary"); + protected BinaryFieldMapper(String simpleName, MappedFieldType fieldType, MappedFieldType defaultFieldType, + Settings indexSettings, MultiFields multiFields, CopyTo copyTo) { + super(simpleName, fieldType, defaultFieldType, indexSettings, multiFields, copyTo); } @Override diff --git a/core/src/main/java/org/elasticsearch/index/mapper/core/BooleanFieldMapper.java b/core/src/main/java/org/elasticsearch/index/mapper/core/BooleanFieldMapper.java index 7bae3be7e56..70c2640a038 100644 --- a/core/src/main/java/org/elasticsearch/index/mapper/core/BooleanFieldMapper.java +++ b/core/src/main/java/org/elasticsearch/index/mapper/core/BooleanFieldMapper.java @@ -90,8 +90,8 @@ public class BooleanFieldMapper extends AbstractFieldMapper { @Override public BooleanFieldMapper build(BuilderContext context) { setupFieldType(context); - return new BooleanFieldMapper(name, fieldType, docValues, - fieldDataSettings, context.indexSettings(), multiFieldsBuilder.build(this, context), copyTo); + return new BooleanFieldMapper(name, fieldType, defaultFieldType, + context.indexSettings(), multiFieldsBuilder.build(this, context), copyTo); } } @@ -194,9 +194,9 @@ public class BooleanFieldMapper extends AbstractFieldMapper { } } - protected BooleanFieldMapper(String simpleName, MappedFieldType fieldType, Boolean docValues, - @Nullable Settings fieldDataSettings, Settings indexSettings, MultiFields multiFields, CopyTo copyTo) { - super(simpleName, fieldType, docValues, fieldDataSettings, indexSettings, multiFields, copyTo); + protected BooleanFieldMapper(String simpleName, MappedFieldType fieldType, MappedFieldType defaultFieldType, + Settings indexSettings, MultiFields multiFields, CopyTo copyTo) { + super(simpleName, fieldType, defaultFieldType, indexSettings, multiFields, copyTo); } @Override @@ -204,17 +204,6 @@ public class BooleanFieldMapper extends AbstractFieldMapper { return (BooleanFieldType) super.fieldType(); } - @Override - public MappedFieldType defaultFieldType() { - return Defaults.FIELD_TYPE; - } - - @Override - public FieldDataType defaultFieldDataType() { - // TODO have a special boolean type? - return new FieldDataType(CONTENT_TYPE); - } - @Override protected void parseCreateField(ParseContext context, List fields) throws IOException { if (fieldType().indexOptions() == IndexOptions.NONE && !fieldType().stored() && !fieldType().hasDocValues()) { diff --git a/core/src/main/java/org/elasticsearch/index/mapper/core/ByteFieldMapper.java b/core/src/main/java/org/elasticsearch/index/mapper/core/ByteFieldMapper.java index b3192a31d82..060191e4fdd 100644 --- a/core/src/main/java/org/elasticsearch/index/mapper/core/ByteFieldMapper.java +++ b/core/src/main/java/org/elasticsearch/index/mapper/core/ByteFieldMapper.java @@ -81,8 +81,8 @@ public class ByteFieldMapper extends NumberFieldMapper { @Override public ByteFieldMapper build(BuilderContext context) { setupFieldType(context); - ByteFieldMapper fieldMapper = new ByteFieldMapper(name, fieldType, docValues, ignoreMalformed(context), - coerce(context), fieldDataSettings, context.indexSettings(), multiFieldsBuilder.build(this, context), copyTo); + ByteFieldMapper fieldMapper = new ByteFieldMapper(name, fieldType, defaultFieldType, ignoreMalformed(context), + coerce(context), context.indexSettings(), multiFieldsBuilder.build(this, context), copyTo); fieldMapper.includeInAll(includeInAll); return fieldMapper; } @@ -193,10 +193,10 @@ public class ByteFieldMapper extends NumberFieldMapper { } } - protected ByteFieldMapper(String simpleName, MappedFieldType fieldType, Boolean docValues, + protected ByteFieldMapper(String simpleName, MappedFieldType fieldType, MappedFieldType defaultFieldType, Explicit ignoreMalformed, Explicit coerce, - @Nullable Settings fieldDataSettings, Settings indexSettings, MultiFields multiFields, CopyTo copyTo) { - super(simpleName, fieldType, docValues, ignoreMalformed, coerce, fieldDataSettings, indexSettings, multiFields, copyTo); + Settings indexSettings, MultiFields multiFields, CopyTo copyTo) { + super(simpleName, fieldType, defaultFieldType, ignoreMalformed, coerce, indexSettings, multiFields, copyTo); } @Override @@ -204,16 +204,6 @@ public class ByteFieldMapper extends NumberFieldMapper { return (ByteFieldType) super.fieldType(); } - @Override - public MappedFieldType defaultFieldType() { - return Defaults.FIELD_TYPE; - } - - @Override - public FieldDataType defaultFieldDataType() { - return new FieldDataType("byte"); - } - private static byte parseValue(Object value) { if (value instanceof Number) { return ((Number) value).byteValue(); diff --git a/core/src/main/java/org/elasticsearch/index/mapper/core/CompletionFieldMapper.java b/core/src/main/java/org/elasticsearch/index/mapper/core/CompletionFieldMapper.java index 37e60c4bae0..0aa5df7a98b 100644 --- a/core/src/main/java/org/elasticsearch/index/mapper/core/CompletionFieldMapper.java +++ b/core/src/main/java/org/elasticsearch/index/mapper/core/CompletionFieldMapper.java @@ -226,7 +226,9 @@ public class CompletionFieldMapper extends AbstractFieldMapper { private AnalyzingCompletionLookupProvider analyzingSuggestLookupProvider; private SortedMap contextMapping = ContextMapping.EMPTY_MAPPING; - public CompletionFieldType() {} + public CompletionFieldType() { + setFieldDataType(null); + } protected CompletionFieldType(CompletionFieldType ref) { super(ref); @@ -312,7 +314,7 @@ public class CompletionFieldMapper extends AbstractFieldMapper { private int maxInputLength; public CompletionFieldMapper(String simpleName, MappedFieldType fieldType, int maxInputLength, Settings indexSettings, MultiFields multiFields, CopyTo copyTo) { - super(simpleName, fieldType, false, null, indexSettings, multiFields, copyTo); + super(simpleName, fieldType, Defaults.FIELD_TYPE, indexSettings, multiFields, copyTo); this.maxInputLength = maxInputLength; } @@ -538,16 +540,6 @@ public class CompletionFieldMapper extends AbstractFieldMapper { return CONTENT_TYPE; } - @Override - public MappedFieldType defaultFieldType() { - return Defaults.FIELD_TYPE; - } - - @Override - public FieldDataType defaultFieldDataType() { - return null; - } - public boolean isStoringPayloads() { return fieldType().analyzingSuggestLookupProvider.hasPayloads(); } diff --git a/core/src/main/java/org/elasticsearch/index/mapper/core/DateFieldMapper.java b/core/src/main/java/org/elasticsearch/index/mapper/core/DateFieldMapper.java index 3a6850e8d50..e1f152ade32 100644 --- a/core/src/main/java/org/elasticsearch/index/mapper/core/DateFieldMapper.java +++ b/core/src/main/java/org/elasticsearch/index/mapper/core/DateFieldMapper.java @@ -116,9 +116,8 @@ public class DateFieldMapper extends NumberFieldMapper { public DateFieldMapper build(BuilderContext context) { setupFieldType(context); fieldType.setNullValue(nullValue); - DateFieldMapper fieldMapper = new DateFieldMapper(name, fieldType, - docValues, ignoreMalformed(context), coerce(context), - fieldDataSettings, context.indexSettings(), multiFieldsBuilder.build(this, context), copyTo); + DateFieldMapper fieldMapper = new DateFieldMapper(name, fieldType, defaultFieldType, ignoreMalformed(context), + coerce(context), context.indexSettings(), multiFieldsBuilder.build(this, context), copyTo); fieldMapper.includeInAll(includeInAll); return fieldMapper; } @@ -259,6 +258,7 @@ public class DateFieldMapper extends NumberFieldMapper { public DateFieldType() { super(NumericType.LONG); + setFieldDataType(new FieldDataType("long")); } protected DateFieldType(DateFieldType ref) { @@ -436,9 +436,9 @@ public class DateFieldMapper extends NumberFieldMapper { } } - protected DateFieldMapper(String simpleName, MappedFieldType fieldType, Boolean docValues, Explicit ignoreMalformed,Explicit coerce, - @Nullable Settings fieldDataSettings, Settings indexSettings, MultiFields multiFields, CopyTo copyTo) { - super(simpleName, fieldType, docValues, ignoreMalformed, coerce, fieldDataSettings, indexSettings, multiFields, copyTo); + protected DateFieldMapper(String simpleName, MappedFieldType fieldType, MappedFieldType defaultFieldType, Explicit ignoreMalformed,Explicit coerce, + Settings indexSettings, MultiFields multiFields, CopyTo copyTo) { + super(simpleName, fieldType, defaultFieldType, ignoreMalformed, coerce, indexSettings, multiFields, copyTo); } @Override @@ -446,16 +446,6 @@ public class DateFieldMapper extends NumberFieldMapper { return (DateFieldType) super.fieldType(); } - @Override - public MappedFieldType defaultFieldType() { - return Defaults.FIELD_TYPE; - } - - @Override - public FieldDataType defaultFieldDataType() { - return new FieldDataType("long"); - } - private static Callable now() { return new Callable() { @Override diff --git a/core/src/main/java/org/elasticsearch/index/mapper/core/DoubleFieldMapper.java b/core/src/main/java/org/elasticsearch/index/mapper/core/DoubleFieldMapper.java index a25c1e096c0..6c5afb2e793 100644 --- a/core/src/main/java/org/elasticsearch/index/mapper/core/DoubleFieldMapper.java +++ b/core/src/main/java/org/elasticsearch/index/mapper/core/DoubleFieldMapper.java @@ -88,8 +88,8 @@ public class DoubleFieldMapper extends NumberFieldMapper { @Override public DoubleFieldMapper build(BuilderContext context) { setupFieldType(context); - DoubleFieldMapper fieldMapper = new DoubleFieldMapper(name, fieldType, docValues, ignoreMalformed(context), coerce(context), - fieldDataSettings, context.indexSettings(), multiFieldsBuilder.build(this, context), copyTo); + DoubleFieldMapper fieldMapper = new DoubleFieldMapper(name, fieldType, defaultFieldType, ignoreMalformed(context), coerce(context), + context.indexSettings(), multiFieldsBuilder.build(this, context), copyTo); fieldMapper.includeInAll(includeInAll); return fieldMapper; } @@ -201,9 +201,9 @@ public class DoubleFieldMapper extends NumberFieldMapper { } } - protected DoubleFieldMapper(String simpleName, MappedFieldType fieldType, Boolean docValues, Explicit ignoreMalformed, Explicit coerce, - @Nullable Settings fieldDataSettings, Settings indexSettings, MultiFields multiFields, CopyTo copyTo) { - super(simpleName, fieldType, docValues, ignoreMalformed, coerce, fieldDataSettings, indexSettings, multiFields, copyTo); + protected DoubleFieldMapper(String simpleName, MappedFieldType fieldType, MappedFieldType defaultFieldType, Explicit ignoreMalformed, + Explicit coerce, Settings indexSettings, MultiFields multiFields, CopyTo copyTo) { + super(simpleName, fieldType, defaultFieldType, ignoreMalformed, coerce, indexSettings, multiFields, copyTo); } @Override @@ -211,16 +211,6 @@ public class DoubleFieldMapper extends NumberFieldMapper { return (DoubleFieldType) super.fieldType(); } - @Override - public MappedFieldType defaultFieldType() { - return Defaults.FIELD_TYPE; - } - - @Override - public FieldDataType defaultFieldDataType() { - return new FieldDataType("double"); - } - @Override protected boolean customBoost() { return true; diff --git a/core/src/main/java/org/elasticsearch/index/mapper/core/FloatFieldMapper.java b/core/src/main/java/org/elasticsearch/index/mapper/core/FloatFieldMapper.java index 0870a7329aa..25f4053b7af 100644 --- a/core/src/main/java/org/elasticsearch/index/mapper/core/FloatFieldMapper.java +++ b/core/src/main/java/org/elasticsearch/index/mapper/core/FloatFieldMapper.java @@ -89,8 +89,8 @@ public class FloatFieldMapper extends NumberFieldMapper { @Override public FloatFieldMapper build(BuilderContext context) { setupFieldType(context); - FloatFieldMapper fieldMapper = new FloatFieldMapper(name, fieldType, docValues, ignoreMalformed(context), coerce(context), - fieldDataSettings, context.indexSettings(), multiFieldsBuilder.build(this, context), copyTo); + FloatFieldMapper fieldMapper = new FloatFieldMapper(name, fieldType, defaultFieldType, ignoreMalformed(context), coerce(context), + context.indexSettings(), multiFieldsBuilder.build(this, context), copyTo); fieldMapper.includeInAll(includeInAll); return fieldMapper; } @@ -202,10 +202,10 @@ public class FloatFieldMapper extends NumberFieldMapper { } } - protected FloatFieldMapper(String simpleName, MappedFieldType fieldType, Boolean docValues, + protected FloatFieldMapper(String simpleName, MappedFieldType fieldType, MappedFieldType defaultFieldType, Explicit ignoreMalformed, Explicit coerce, - @Nullable Settings fieldDataSettings, Settings indexSettings, MultiFields multiFields, CopyTo copyTo) { - super(simpleName, fieldType, docValues, ignoreMalformed, coerce, fieldDataSettings, indexSettings, multiFields, copyTo); + Settings indexSettings, MultiFields multiFields, CopyTo copyTo) { + super(simpleName, fieldType, defaultFieldType, ignoreMalformed, coerce, indexSettings, multiFields, copyTo); } @Override @@ -213,16 +213,6 @@ public class FloatFieldMapper extends NumberFieldMapper { return (FloatFieldType) super.fieldType(); } - @Override - public MappedFieldType defaultFieldType() { - return Defaults.FIELD_TYPE; - } - - @Override - public FieldDataType defaultFieldDataType() { - return new FieldDataType("float"); - } - private static float parseValue(Object value) { if (value instanceof Number) { return ((Number) value).floatValue(); diff --git a/core/src/main/java/org/elasticsearch/index/mapper/core/IntegerFieldMapper.java b/core/src/main/java/org/elasticsearch/index/mapper/core/IntegerFieldMapper.java index f934acc10e1..a3e0718f5ba 100644 --- a/core/src/main/java/org/elasticsearch/index/mapper/core/IntegerFieldMapper.java +++ b/core/src/main/java/org/elasticsearch/index/mapper/core/IntegerFieldMapper.java @@ -89,8 +89,8 @@ public class IntegerFieldMapper extends NumberFieldMapper { @Override public IntegerFieldMapper build(BuilderContext context) { setupFieldType(context); - IntegerFieldMapper fieldMapper = new IntegerFieldMapper(name, fieldType, docValues, - ignoreMalformed(context), coerce(context), fieldDataSettings, + IntegerFieldMapper fieldMapper = new IntegerFieldMapper(name, fieldType, defaultFieldType, + ignoreMalformed(context), coerce(context), context.indexSettings(), multiFieldsBuilder.build(this, context), copyTo); fieldMapper.includeInAll(includeInAll); return fieldMapper; @@ -145,7 +145,8 @@ public class IntegerFieldMapper extends NumberFieldMapper { @Override public String typeName() { - return CONTENT_TYPE; + // TODO: this should be the same as the mapper type name, except fielddata expects int... + return "int"; } @Override @@ -202,11 +203,10 @@ public class IntegerFieldMapper extends NumberFieldMapper { } } - protected IntegerFieldMapper(String simpleName, MappedFieldType fieldType, Boolean docValues, + protected IntegerFieldMapper(String simpleName, MappedFieldType fieldType, MappedFieldType defaultFieldType, Explicit ignoreMalformed, Explicit coerce, - @Nullable Settings fieldDataSettings, Settings indexSettings, MultiFields multiFields, CopyTo copyTo) { - super(simpleName, fieldType, docValues, ignoreMalformed, coerce, fieldDataSettings, indexSettings, multiFields, copyTo); + super(simpleName, fieldType, defaultFieldType, ignoreMalformed, coerce, indexSettings, multiFields, copyTo); } @Override @@ -214,16 +214,6 @@ public class IntegerFieldMapper extends NumberFieldMapper { return (IntegerFieldType) super.fieldType(); } - @Override - public MappedFieldType defaultFieldType() { - return Defaults.FIELD_TYPE; - } - - @Override - public FieldDataType defaultFieldDataType() { - return new FieldDataType("int"); - } - private static int parseValue(Object value) { if (value instanceof Number) { return ((Number) value).intValue(); diff --git a/core/src/main/java/org/elasticsearch/index/mapper/core/LongFieldMapper.java b/core/src/main/java/org/elasticsearch/index/mapper/core/LongFieldMapper.java index fecab71269e..26deaa8f79f 100644 --- a/core/src/main/java/org/elasticsearch/index/mapper/core/LongFieldMapper.java +++ b/core/src/main/java/org/elasticsearch/index/mapper/core/LongFieldMapper.java @@ -89,8 +89,8 @@ public class LongFieldMapper extends NumberFieldMapper { @Override public LongFieldMapper build(BuilderContext context) { setupFieldType(context); - LongFieldMapper fieldMapper = new LongFieldMapper(name, fieldType, docValues, - ignoreMalformed(context), coerce(context), fieldDataSettings, context.indexSettings(), multiFieldsBuilder.build(this, context), copyTo); + LongFieldMapper fieldMapper = new LongFieldMapper(name, fieldType, defaultFieldType, + ignoreMalformed(context), coerce(context), context.indexSettings(), multiFieldsBuilder.build(this, context), copyTo); fieldMapper.includeInAll(includeInAll); return fieldMapper; } @@ -201,11 +201,10 @@ public class LongFieldMapper extends NumberFieldMapper { } } - protected LongFieldMapper(String simpleName, MappedFieldType fieldType, Boolean docValues, + protected LongFieldMapper(String simpleName, MappedFieldType fieldType, MappedFieldType defaultFieldType, Explicit ignoreMalformed, Explicit coerce, - @Nullable Settings fieldDataSettings, Settings indexSettings, MultiFields multiFields, CopyTo copyTo) { - super(simpleName, fieldType, docValues, ignoreMalformed, coerce, fieldDataSettings, indexSettings, multiFields, copyTo); + super(simpleName, fieldType, defaultFieldType, ignoreMalformed, coerce, indexSettings, multiFields, copyTo); } @Override @@ -213,16 +212,6 @@ public class LongFieldMapper extends NumberFieldMapper { return (LongFieldType) super.fieldType(); } - @Override - public MappedFieldType defaultFieldType() { - return Defaults.FIELD_TYPE; - } - - @Override - public FieldDataType defaultFieldDataType() { - return new FieldDataType("long"); - } - @Override protected boolean customBoost() { return true; diff --git a/core/src/main/java/org/elasticsearch/index/mapper/core/Murmur3FieldMapper.java b/core/src/main/java/org/elasticsearch/index/mapper/core/Murmur3FieldMapper.java index 6f91db01854..30bed42cb4b 100644 --- a/core/src/main/java/org/elasticsearch/index/mapper/core/Murmur3FieldMapper.java +++ b/core/src/main/java/org/elasticsearch/index/mapper/core/Murmur3FieldMapper.java @@ -61,9 +61,9 @@ public class Murmur3FieldMapper extends LongFieldMapper { @Override public Murmur3FieldMapper build(BuilderContext context) { setupFieldType(context); - Murmur3FieldMapper fieldMapper = new Murmur3FieldMapper(name, fieldType, docValues, + Murmur3FieldMapper fieldMapper = new Murmur3FieldMapper(name, fieldType, defaultFieldType, ignoreMalformed(context), coerce(context), - fieldDataSettings, context.indexSettings(), multiFieldsBuilder.build(this, context), copyTo); + context.indexSettings(), multiFieldsBuilder.build(this, context), copyTo); fieldMapper.includeInAll(includeInAll); return fieldMapper; } @@ -119,12 +119,10 @@ public class Murmur3FieldMapper extends LongFieldMapper { } } - protected Murmur3FieldMapper(String simpleName, MappedFieldType fieldType, Boolean docValues, + protected Murmur3FieldMapper(String simpleName, MappedFieldType fieldType, MappedFieldType defaultFieldType, Explicit ignoreMalformed, Explicit coerce, - @Nullable Settings fieldDataSettings, Settings indexSettings, MultiFields multiFields, CopyTo copyTo) { - super(simpleName, fieldType, docValues, ignoreMalformed, coerce, - fieldDataSettings, indexSettings, multiFields, copyTo); + super(simpleName, fieldType, defaultFieldType, ignoreMalformed, coerce, indexSettings, multiFields, copyTo); } @Override diff --git a/core/src/main/java/org/elasticsearch/index/mapper/core/NumberFieldMapper.java b/core/src/main/java/org/elasticsearch/index/mapper/core/NumberFieldMapper.java index 94f2296a65b..7540cf2300b 100644 --- a/core/src/main/java/org/elasticsearch/index/mapper/core/NumberFieldMapper.java +++ b/core/src/main/java/org/elasticsearch/index/mapper/core/NumberFieldMapper.java @@ -185,11 +185,10 @@ public abstract class NumberFieldMapper extends AbstractFieldMapper implements A */ protected final boolean useSortedNumericDocValues; - protected NumberFieldMapper(String simpleName, MappedFieldType fieldType, Boolean docValues, - Explicit ignoreMalformed, Explicit coerce, @Nullable Settings fieldDataSettings, Settings indexSettings, + protected NumberFieldMapper(String simpleName, MappedFieldType fieldType, MappedFieldType defaultFieldType, + Explicit ignoreMalformed, Explicit coerce, Settings indexSettings, MultiFields multiFields, CopyTo copyTo) { - // LUCENE 4 UPGRADE: Since we can't do anything before the super call, we have to push the boost check down to subclasses - super(simpleName, fieldType, docValues, fieldDataSettings, indexSettings, multiFields, copyTo); + super(simpleName, fieldType, defaultFieldType, indexSettings, multiFields, copyTo); this.ignoreMalformed = ignoreMalformed; this.coerce = coerce; this.useSortedNumericDocValues = Version.indexCreated(indexSettings).onOrAfter(Version.V_1_4_0_Beta1); diff --git a/core/src/main/java/org/elasticsearch/index/mapper/core/ShortFieldMapper.java b/core/src/main/java/org/elasticsearch/index/mapper/core/ShortFieldMapper.java index ee53f98e296..083100ccd6c 100644 --- a/core/src/main/java/org/elasticsearch/index/mapper/core/ShortFieldMapper.java +++ b/core/src/main/java/org/elasticsearch/index/mapper/core/ShortFieldMapper.java @@ -85,8 +85,8 @@ public class ShortFieldMapper extends NumberFieldMapper { @Override public ShortFieldMapper build(BuilderContext context) { setupFieldType(context); - ShortFieldMapper fieldMapper = new ShortFieldMapper(name, fieldType, docValues, - ignoreMalformed(context), coerce(context), fieldDataSettings, + ShortFieldMapper fieldMapper = new ShortFieldMapper(name, fieldType, defaultFieldType, + ignoreMalformed(context), coerce(context), context.indexSettings(), multiFieldsBuilder.build(this, context), copyTo); fieldMapper.includeInAll(includeInAll); return fieldMapper; @@ -199,12 +199,10 @@ public class ShortFieldMapper extends NumberFieldMapper { } } - protected ShortFieldMapper(String simpleName, MappedFieldType fieldType, Boolean docValues, + protected ShortFieldMapper(String simpleName, MappedFieldType fieldType, MappedFieldType defaultFieldType, Explicit ignoreMalformed, Explicit coerce, - @Nullable Settings fieldDataSettings, Settings indexSettings, MultiFields multiFields, CopyTo copyTo) { - super(simpleName, fieldType, docValues, ignoreMalformed, coerce, - fieldDataSettings, indexSettings, multiFields, copyTo); + super(simpleName, fieldType, defaultFieldType, ignoreMalformed, coerce, indexSettings, multiFields, copyTo); } @Override @@ -212,16 +210,6 @@ public class ShortFieldMapper extends NumberFieldMapper { return (ShortFieldType) super.fieldType(); } - @Override - public MappedFieldType defaultFieldType() { - return Defaults.FIELD_TYPE; - } - - @Override - public FieldDataType defaultFieldDataType() { - return new FieldDataType("short"); - } - private static short parseValue(Object value) { if (value instanceof Number) { return ((Number) value).shortValue(); diff --git a/core/src/main/java/org/elasticsearch/index/mapper/core/StringFieldMapper.java b/core/src/main/java/org/elasticsearch/index/mapper/core/StringFieldMapper.java index 1650256725b..c1d0147eac8 100644 --- a/core/src/main/java/org/elasticsearch/index/mapper/core/StringFieldMapper.java +++ b/core/src/main/java/org/elasticsearch/index/mapper/core/StringFieldMapper.java @@ -116,7 +116,6 @@ public class StringFieldMapper extends AbstractFieldMapper implements AllFieldMa // if they are set explicitly, we will use those values // we also change the values on the default field type so that toXContent emits what // differs from the defaults - MappedFieldType defaultFieldType = Defaults.FIELD_TYPE.clone(); if (fieldType.indexOptions() != IndexOptions.NONE && !fieldType.tokenized()) { defaultFieldType.setOmitNorms(true); defaultFieldType.setIndexOptions(IndexOptions.DOCS); @@ -127,11 +126,10 @@ public class StringFieldMapper extends AbstractFieldMapper implements AllFieldMa fieldType.setIndexOptions(IndexOptions.DOCS); } } - defaultFieldType.freeze(); setupFieldType(context); StringFieldMapper fieldMapper = new StringFieldMapper( - name, fieldType, defaultFieldType, docValues, positionOffsetGap, ignoreAbove, - fieldDataSettings, context.indexSettings(), multiFieldsBuilder.build(this, context), copyTo); + name, fieldType, defaultFieldType, positionOffsetGap, ignoreAbove, + context.indexSettings(), multiFieldsBuilder.build(this, context), copyTo); fieldMapper.includeInAll(includeInAll); return fieldMapper; } @@ -221,30 +219,18 @@ public class StringFieldMapper extends AbstractFieldMapper implements AllFieldMa private Boolean includeInAll; private int positionOffsetGap; private int ignoreAbove; - private final MappedFieldType defaultFieldType; - protected StringFieldMapper(String simpleName, MappedFieldType fieldType, MappedFieldType defaultFieldType, Boolean docValues, - int positionOffsetGap, int ignoreAbove, @Nullable Settings fieldDataSettings, + protected StringFieldMapper(String simpleName, MappedFieldType fieldType, MappedFieldType defaultFieldType, + int positionOffsetGap, int ignoreAbove, Settings indexSettings, MultiFields multiFields, CopyTo copyTo) { - super(simpleName, fieldType, docValues, fieldDataSettings, indexSettings, multiFields, copyTo); + super(simpleName, fieldType, defaultFieldType, indexSettings, multiFields, copyTo); if (fieldType.tokenized() && fieldType.indexOptions() != NONE && fieldType().hasDocValues()) { throw new MapperParsingException("Field [" + fieldType.names().fullName() + "] cannot be analyzed and have doc values"); } - this.defaultFieldType = defaultFieldType; this.positionOffsetGap = positionOffsetGap; this.ignoreAbove = ignoreAbove; } - @Override - public MappedFieldType defaultFieldType() { - return defaultFieldType; - } - - @Override - public FieldDataType defaultFieldDataType() { - return new FieldDataType("string"); - } - @Override public void includeInAll(Boolean includeInAll) { if (includeInAll != null) { diff --git a/core/src/main/java/org/elasticsearch/index/mapper/core/TokenCountFieldMapper.java b/core/src/main/java/org/elasticsearch/index/mapper/core/TokenCountFieldMapper.java index 371b69bf114..a148d940bbe 100644 --- a/core/src/main/java/org/elasticsearch/index/mapper/core/TokenCountFieldMapper.java +++ b/core/src/main/java/org/elasticsearch/index/mapper/core/TokenCountFieldMapper.java @@ -78,8 +78,8 @@ public class TokenCountFieldMapper extends IntegerFieldMapper { @Override public TokenCountFieldMapper build(BuilderContext context) { setupFieldType(context); - TokenCountFieldMapper fieldMapper = new TokenCountFieldMapper(name, fieldType, docValues, - ignoreMalformed(context), coerce(context), fieldDataSettings, context.indexSettings(), + TokenCountFieldMapper fieldMapper = new TokenCountFieldMapper(name, fieldType, defaultFieldType, + ignoreMalformed(context), coerce(context), context.indexSettings(), analyzer, multiFieldsBuilder.build(this, context), copyTo); fieldMapper.includeInAll(includeInAll); return fieldMapper; @@ -127,10 +127,9 @@ public class TokenCountFieldMapper extends IntegerFieldMapper { private NamedAnalyzer analyzer; - protected TokenCountFieldMapper(String simpleName, MappedFieldType fieldType, Boolean docValues, Explicit ignoreMalformed, - Explicit coerce, Settings fieldDataSettings, Settings indexSettings, - NamedAnalyzer analyzer, MultiFields multiFields, CopyTo copyTo) { - super(simpleName, fieldType, docValues, ignoreMalformed, coerce, fieldDataSettings, indexSettings, multiFields, copyTo); + protected TokenCountFieldMapper(String simpleName, MappedFieldType fieldType, MappedFieldType defaultFieldType, Explicit ignoreMalformed, + Explicit coerce, Settings indexSettings, NamedAnalyzer analyzer, MultiFields multiFields, CopyTo copyTo) { + super(simpleName, fieldType, defaultFieldType, ignoreMalformed, coerce, indexSettings, multiFields, copyTo); this.analyzer = analyzer; } diff --git a/core/src/main/java/org/elasticsearch/index/mapper/geo/GeoPointFieldMapper.java b/core/src/main/java/org/elasticsearch/index/mapper/geo/GeoPointFieldMapper.java index e178e0d5249..e37e2c9dde8 100644 --- a/core/src/main/java/org/elasticsearch/index/mapper/geo/GeoPointFieldMapper.java +++ b/core/src/main/java/org/elasticsearch/index/mapper/geo/GeoPointFieldMapper.java @@ -204,10 +204,10 @@ public class GeoPointFieldMapper extends AbstractFieldMapper implements ArrayVal // this is important: even if geo points feel like they need to be tokenized to distinguish lat from lon, we actually want to // store them as a single token. fieldType.setTokenized(false); - fieldType.setHasDocValues(false); setupFieldType(context); - - return new GeoPointFieldMapper(name, fieldType, docValues, fieldDataSettings, context.indexSettings(), origPathType, + fieldType.setHasDocValues(false); + defaultFieldType.setHasDocValues(false); + return new GeoPointFieldMapper(name, fieldType, defaultFieldType, context.indexSettings(), origPathType, latMapper, lonMapper, geohashMapper, multiFieldsBuilder.build(this, context)); } } @@ -586,9 +586,9 @@ public class GeoPointFieldMapper extends AbstractFieldMapper implements ArrayVal private final StringFieldMapper geohashMapper; - public GeoPointFieldMapper(String simpleName, MappedFieldType fieldType, Boolean docValues, @Nullable Settings fieldDataSettings, Settings indexSettings, + public GeoPointFieldMapper(String simpleName, MappedFieldType fieldType, MappedFieldType defaultFieldType, Settings indexSettings, ContentPath.Type pathType, DoubleFieldMapper latMapper, DoubleFieldMapper lonMapper, StringFieldMapper geohashMapper,MultiFields multiFields) { - super(simpleName, fieldType, docValues, fieldDataSettings, indexSettings, multiFields, null); + super(simpleName, fieldType, defaultFieldType, indexSettings, multiFields, null); this.pathType = pathType; this.latMapper = latMapper; this.lonMapper = lonMapper; @@ -605,21 +605,6 @@ public class GeoPointFieldMapper extends AbstractFieldMapper implements ArrayVal return (GeoPointFieldType) super.fieldType(); } - @Override - public MappedFieldType defaultFieldType() { - return Defaults.FIELD_TYPE; - } - - @Override - public FieldDataType defaultFieldDataType() { - return new FieldDataType("geo_point"); - } - - @Override - protected boolean defaultDocValues() { - return false; - } - @Override protected void parseCreateField(ParseContext context, List fields) throws IOException { throw new UnsupportedOperationException("Parsing is implemented in parse(), this method should NEVER be called"); diff --git a/core/src/main/java/org/elasticsearch/index/mapper/geo/GeoShapeFieldMapper.java b/core/src/main/java/org/elasticsearch/index/mapper/geo/GeoShapeFieldMapper.java index 9e113374ac8..d5fa96de7d6 100644 --- a/core/src/main/java/org/elasticsearch/index/mapper/geo/GeoShapeFieldMapper.java +++ b/core/src/main/java/org/elasticsearch/index/mapper/geo/GeoShapeFieldMapper.java @@ -359,7 +359,7 @@ public class GeoShapeFieldMapper extends AbstractFieldMapper { } public GeoShapeFieldMapper(String simpleName, MappedFieldType fieldType, Settings indexSettings, MultiFields multiFields, CopyTo copyTo) { - super(simpleName, fieldType, false, null, indexSettings, multiFields, copyTo); + super(simpleName, fieldType, Defaults.FIELD_TYPE, indexSettings, multiFields, copyTo); } @Override @@ -367,16 +367,6 @@ public class GeoShapeFieldMapper extends AbstractFieldMapper { return (GeoShapeFieldType) super.fieldType(); } - @Override - public MappedFieldType defaultFieldType() { - return Defaults.FIELD_TYPE; - } - - @Override - public FieldDataType defaultFieldDataType() { - return null; - } - @Override public Mapper parse(ParseContext context) throws IOException { try { diff --git a/core/src/main/java/org/elasticsearch/index/mapper/internal/AllFieldMapper.java b/core/src/main/java/org/elasticsearch/index/mapper/internal/AllFieldMapper.java index a53b556f66b..20fe1113351 100644 --- a/core/src/main/java/org/elasticsearch/index/mapper/internal/AllFieldMapper.java +++ b/core/src/main/java/org/elasticsearch/index/mapper/internal/AllFieldMapper.java @@ -111,7 +111,7 @@ public class AllFieldMapper extends MetadataFieldMapper { } fieldType.setTokenized(true); - return new AllFieldMapper(fieldType, enabled, fieldDataSettings, context.indexSettings()); + return new AllFieldMapper(fieldType, enabled, context.indexSettings()); } } @@ -156,7 +156,9 @@ public class AllFieldMapper extends MetadataFieldMapper { static final class AllFieldType extends MappedFieldType { - public AllFieldType() {} + public AllFieldType() { + setFieldDataType(new FieldDataType("string")); + } protected AllFieldType(AllFieldType ref) { super(ref); @@ -194,15 +196,11 @@ public class AllFieldMapper extends MetadataFieldMapper { private EnabledAttributeMapper enabledState; public AllFieldMapper(Settings indexSettings, MappedFieldType existing) { - this(existing == null ? Defaults.FIELD_TYPE.clone() : existing.clone(), - Defaults.ENABLED, - existing == null ? null : (existing.fieldDataType() == null ? null : existing.fieldDataType().getSettings()), - indexSettings); + this(existing == null ? Defaults.FIELD_TYPE.clone() : existing.clone(), Defaults.ENABLED, indexSettings); } - protected AllFieldMapper(MappedFieldType fieldType, EnabledAttributeMapper enabled, - @Nullable Settings fieldDataSettings, Settings indexSettings) { - super(NAME, fieldType, false, fieldDataSettings, indexSettings); + protected AllFieldMapper(MappedFieldType fieldType, EnabledAttributeMapper enabled, Settings indexSettings) { + super(NAME, fieldType, Defaults.FIELD_TYPE, indexSettings); this.enabledState = enabled; } @@ -211,16 +209,6 @@ public class AllFieldMapper extends MetadataFieldMapper { return this.enabledState.enabled; } - @Override - public MappedFieldType defaultFieldType() { - return Defaults.FIELD_TYPE; - } - - @Override - public FieldDataType defaultFieldDataType() { - return new FieldDataType("string"); - } - @Override public void preParse(ParseContext context) throws IOException { } @@ -316,12 +304,6 @@ public class AllFieldMapper extends MetadataFieldMapper { } else if (includeDefaults) { builder.field("similarity", SimilarityLookupService.DEFAULT_SIMILARITY); } - - if (hasCustomFieldDataSettings()) { - builder.field("fielddata", (Map) customFieldDataSettings.getAsMap()); - } else if (includeDefaults) { - builder.field("fielddata", (Map) fieldType().fieldDataType().getSettings().getAsMap()); - } } @Override diff --git a/core/src/main/java/org/elasticsearch/index/mapper/internal/FieldNamesFieldMapper.java b/core/src/main/java/org/elasticsearch/index/mapper/internal/FieldNamesFieldMapper.java index e03a5a96de8..d34fa8bb98d 100644 --- a/core/src/main/java/org/elasticsearch/index/mapper/internal/FieldNamesFieldMapper.java +++ b/core/src/main/java/org/elasticsearch/index/mapper/internal/FieldNamesFieldMapper.java @@ -100,9 +100,10 @@ public class FieldNamesFieldMapper extends MetadataFieldMapper { @Override public FieldNamesFieldMapper build(BuilderContext context) { setupFieldType(context); + fieldType.setHasDocValues(false); FieldNamesFieldType fieldNamesFieldType = (FieldNamesFieldType)fieldType; fieldNamesFieldType.setEnabled(enabled); - return new FieldNamesFieldMapper(fieldType, fieldDataSettings, context.indexSettings()); + return new FieldNamesFieldMapper(fieldType, context.indexSettings()); } } @@ -135,7 +136,9 @@ public class FieldNamesFieldMapper extends MetadataFieldMapper { private boolean enabled = Defaults.ENABLED; - public FieldNamesFieldType() {} + public FieldNamesFieldType() { + setFieldDataType(new FieldDataType("string")); + } protected FieldNamesFieldType(FieldNamesFieldType ref) { super(ref); @@ -197,18 +200,14 @@ public class FieldNamesFieldMapper extends MetadataFieldMapper { } } - private final MappedFieldType defaultFieldType; private final boolean pre13Index; // if the index was created before 1.3, _field_names is always disabled public FieldNamesFieldMapper(Settings indexSettings, MappedFieldType existing) { - this(existing == null ? Defaults.FIELD_TYPE.clone() : existing.clone(), - existing == null ? null : (existing.fieldDataType() == null ? null : existing.fieldDataType().getSettings()), - indexSettings); + this(existing == null ? Defaults.FIELD_TYPE.clone() : existing.clone(), indexSettings); } - public FieldNamesFieldMapper(MappedFieldType fieldType, @Nullable Settings fieldDataSettings, Settings indexSettings) { - super(NAME, fieldType, false, fieldDataSettings, indexSettings); - this.defaultFieldType = Defaults.FIELD_TYPE; + public FieldNamesFieldMapper(MappedFieldType fieldType, Settings indexSettings) { + super(NAME, fieldType, Defaults.FIELD_TYPE, indexSettings); this.pre13Index = Version.indexCreated(indexSettings).before(Version.V_1_3_0); if (this.pre13Index) { FieldNamesFieldType newFieldType = fieldType().clone(); @@ -223,16 +222,6 @@ public class FieldNamesFieldMapper extends MetadataFieldMapper { return (FieldNamesFieldType) super.fieldType(); } - @Override - public MappedFieldType defaultFieldType() { - return defaultFieldType; - } - - @Override - public FieldDataType defaultFieldDataType() { - return new FieldDataType("string"); - } - @Override public void preParse(ParseContext context) throws IOException { } diff --git a/core/src/main/java/org/elasticsearch/index/mapper/internal/IdFieldMapper.java b/core/src/main/java/org/elasticsearch/index/mapper/internal/IdFieldMapper.java index 63426b5f258..8a02627f336 100644 --- a/core/src/main/java/org/elasticsearch/index/mapper/internal/IdFieldMapper.java +++ b/core/src/main/java/org/elasticsearch/index/mapper/internal/IdFieldMapper.java @@ -108,8 +108,8 @@ public class IdFieldMapper extends MetadataFieldMapper { @Override public IdFieldMapper build(BuilderContext context) { - fieldType.setNames(new MappedFieldType.Names(indexName, indexName, name)); - return new IdFieldMapper(fieldType, docValues, path, fieldDataSettings, context.indexSettings()); + setupFieldType(context); + return new IdFieldMapper(fieldType, path, context.indexSettings()); } } @@ -136,7 +136,9 @@ public class IdFieldMapper extends MetadataFieldMapper { static final class IdFieldType extends MappedFieldType { - public IdFieldType() {} + public IdFieldType() { + setFieldDataType(new FieldDataType("string")); + } protected IdFieldType(IdFieldType ref) { super(ref); @@ -228,14 +230,11 @@ public class IdFieldMapper extends MetadataFieldMapper { private final String path; public IdFieldMapper(Settings indexSettings, MappedFieldType existing) { - this(idFieldType(indexSettings, existing), null, Defaults.PATH, - existing == null ? null : (existing.fieldDataType() == null ? null : existing.fieldDataType().getSettings()), - indexSettings); + this(idFieldType(indexSettings, existing), Defaults.PATH, indexSettings); } - protected IdFieldMapper(MappedFieldType fieldType, Boolean docValues, String path, - @Nullable Settings fieldDataSettings, Settings indexSettings) { - super(NAME, fieldType, docValues, fieldDataSettings, indexSettings); + protected IdFieldMapper(MappedFieldType fieldType, String path, Settings indexSettings) { + super(NAME, fieldType, Defaults.FIELD_TYPE, indexSettings); this.path = path; } @@ -255,16 +254,6 @@ public class IdFieldMapper extends MetadataFieldMapper { return this.path; } - @Override - public MappedFieldType defaultFieldType() { - return Defaults.FIELD_TYPE; - } - - @Override - public FieldDataType defaultFieldDataType() { - return new FieldDataType("string"); - } - @Override public void preParse(ParseContext context) throws IOException { if (context.sourceToParse().id() != null) { @@ -331,9 +320,7 @@ public class IdFieldMapper extends MetadataFieldMapper { builder.field("path", path); } - if (hasCustomFieldDataSettings()) { - builder.field("fielddata", (Map) customFieldDataSettings.getAsMap()); - } else if (includeDefaults) { + if (includeDefaults || hasCustomFieldDataSettings()) { builder.field("fielddata", (Map) fieldType().fieldDataType().getSettings().getAsMap()); } builder.endObject(); diff --git a/core/src/main/java/org/elasticsearch/index/mapper/internal/IndexFieldMapper.java b/core/src/main/java/org/elasticsearch/index/mapper/internal/IndexFieldMapper.java index 513dd1a8841..d61dd5da798 100644 --- a/core/src/main/java/org/elasticsearch/index/mapper/internal/IndexFieldMapper.java +++ b/core/src/main/java/org/elasticsearch/index/mapper/internal/IndexFieldMapper.java @@ -90,8 +90,9 @@ public class IndexFieldMapper extends MetadataFieldMapper { @Override public IndexFieldMapper build(BuilderContext context) { - fieldType.setNames(new MappedFieldType.Names(indexName, indexName, name)); - return new IndexFieldMapper(fieldType, enabledState, fieldDataSettings, context.indexSettings()); + setupFieldType(context); + fieldType.setHasDocValues(false); + return new IndexFieldMapper(fieldType, enabledState, context.indexSettings()); } } @@ -147,14 +148,11 @@ public class IndexFieldMapper extends MetadataFieldMapper { private EnabledAttributeMapper enabledState; public IndexFieldMapper(Settings indexSettings, MappedFieldType existing) { - this(existing == null ? Defaults.FIELD_TYPE.clone() : existing, - Defaults.ENABLED_STATE, - existing == null ? null : (existing.fieldDataType() == null ? null : existing.fieldDataType().getSettings()), indexSettings); + this(existing == null ? Defaults.FIELD_TYPE.clone() : existing, Defaults.ENABLED_STATE, indexSettings); } - public IndexFieldMapper(MappedFieldType fieldType, EnabledAttributeMapper enabledState, - @Nullable Settings fieldDataSettings, Settings indexSettings) { - super(NAME, fieldType, false, fieldDataSettings, indexSettings); + public IndexFieldMapper(MappedFieldType fieldType, EnabledAttributeMapper enabledState, Settings indexSettings) { + super(NAME, fieldType, Defaults.FIELD_TYPE, indexSettings); this.enabledState = enabledState; } @@ -162,16 +160,6 @@ public class IndexFieldMapper extends MetadataFieldMapper { return this.enabledState.enabled; } - @Override - public MappedFieldType defaultFieldType() { - return Defaults.FIELD_TYPE; - } - - @Override - public FieldDataType defaultFieldDataType() { - return new FieldDataType(IndexFieldMapper.NAME); - } - public String value(Document document) { Field field = (Field) document.getField(fieldType().names().indexName()); return field == null ? null : (String)fieldType().value(field); @@ -220,13 +208,8 @@ public class IndexFieldMapper extends MetadataFieldMapper { if (includeDefaults || enabledState != Defaults.ENABLED_STATE) { builder.field("enabled", enabledState.enabled); } - - if (indexCreatedBefore2x) { - if (hasCustomFieldDataSettings()) { - builder.field("fielddata", (Map) customFieldDataSettings.getAsMap()); - } else if (includeDefaults) { - builder.field("fielddata", (Map) fieldType().fieldDataType().getSettings().getAsMap()); - } + if (indexCreatedBefore2x && (includeDefaults || hasCustomFieldDataSettings())) { + builder.field("fielddata", (Map) fieldType().fieldDataType().getSettings().getAsMap()); } builder.endObject(); return builder; diff --git a/core/src/main/java/org/elasticsearch/index/mapper/internal/ParentFieldMapper.java b/core/src/main/java/org/elasticsearch/index/mapper/internal/ParentFieldMapper.java index e9407ab56cd..32541099b2c 100644 --- a/core/src/main/java/org/elasticsearch/index/mapper/internal/ParentFieldMapper.java +++ b/core/src/main/java/org/elasticsearch/index/mapper/internal/ParentFieldMapper.java @@ -77,7 +77,6 @@ public class ParentFieldMapper extends MetadataFieldMapper { FIELD_TYPE.setIndexAnalyzer(Lucene.KEYWORD_ANALYZER); FIELD_TYPE.setSearchAnalyzer(Lucene.KEYWORD_ANALYZER); FIELD_TYPE.setNames(new MappedFieldType.Names(NAME)); - FIELD_TYPE.setFieldDataType(new FieldDataType("_parent", settingsBuilder().put(MappedFieldType.Loading.KEY, MappedFieldType.Loading.LAZY_VALUE))); FIELD_TYPE.freeze(); } } @@ -87,7 +86,6 @@ public class ParentFieldMapper extends MetadataFieldMapper { protected String indexName; private String type; - protected Settings fieldDataSettings; public Builder() { super(Defaults.NAME, Defaults.FIELD_TYPE); @@ -100,18 +98,14 @@ public class ParentFieldMapper extends MetadataFieldMapper { return builder; } - public Builder fieldDataSettings(Settings settings) { - this.fieldDataSettings = settings; - return builder; - } - @Override public ParentFieldMapper build(BuilderContext context) { if (type == null) { throw new MapperParsingException("[_parent] field mapping must contain the [type] option"); } setupFieldType(context); - return new ParentFieldMapper(fieldType, type, fieldDataSettings, context.indexSettings()); + fieldType.setHasDocValues(context.indexCreatedVersion().onOrAfter(Version.V_2_0_0)); + return new ParentFieldMapper(fieldType, type, context.indexSettings()); } } @@ -145,7 +139,9 @@ public class ParentFieldMapper extends MetadataFieldMapper { static final class ParentFieldType extends MappedFieldType { - public ParentFieldType() {} + public ParentFieldType() { + setFieldDataType(new FieldDataType("_parent", settingsBuilder().put(MappedFieldType.Loading.KEY, Loading.EAGER_VALUE))); + } protected ParentFieldType(ParentFieldType ref) { super(ref); @@ -229,32 +225,25 @@ public class ParentFieldMapper extends MetadataFieldMapper { private final String type; - protected ParentFieldMapper(MappedFieldType fieldType, String type, @Nullable Settings fieldDataSettings, Settings indexSettings) { - super(NAME, fieldType, Version.indexCreated(indexSettings).onOrAfter(Version.V_2_0_0), fieldDataSettings, indexSettings); + protected ParentFieldMapper(MappedFieldType fieldType, String type, Settings indexSettings) { + super(NAME, setupDocValues(indexSettings, fieldType), setupDocValues(indexSettings, Defaults.FIELD_TYPE), indexSettings); this.type = type; } public ParentFieldMapper(Settings indexSettings, MappedFieldType existing) { - this(existing == null ? Defaults.FIELD_TYPE.clone() : existing.clone(), - null, - existing == null ? null : (existing.fieldDataType() == null ? null : existing.fieldDataType().getSettings()), - indexSettings); + this(existing == null ? Defaults.FIELD_TYPE.clone() : existing.clone(), null, indexSettings); + } + + static MappedFieldType setupDocValues(Settings indexSettings, MappedFieldType fieldType) { + fieldType = fieldType.clone(); + fieldType.setHasDocValues(Version.indexCreated(indexSettings).onOrAfter(Version.V_2_0_0)); + return fieldType; } public String type() { return type; } - @Override - public MappedFieldType defaultFieldType() { - return Defaults.FIELD_TYPE; - } - - @Override - public FieldDataType defaultFieldDataType() { - return new FieldDataType("_parent", settingsBuilder().put(MappedFieldType.Loading.KEY, MappedFieldType.Loading.EAGER_VALUE)); - } - @Override public void preParse(ParseContext context) throws IOException { } @@ -328,9 +317,7 @@ public class ParentFieldMapper extends MetadataFieldMapper { builder.startObject(CONTENT_TYPE); builder.field("type", type); - if (hasCustomFieldDataSettings()) { - builder.field("fielddata", (Map) customFieldDataSettings.getAsMap()); - } else if (includeDefaults) { + if (includeDefaults || hasCustomFieldDataSettings()) { builder.field("fielddata", (Map) fieldType().fieldDataType().getSettings().getAsMap()); } builder.endObject(); diff --git a/core/src/main/java/org/elasticsearch/index/mapper/internal/RoutingFieldMapper.java b/core/src/main/java/org/elasticsearch/index/mapper/internal/RoutingFieldMapper.java index 492f50a9404..747b8fd128a 100644 --- a/core/src/main/java/org/elasticsearch/index/mapper/internal/RoutingFieldMapper.java +++ b/core/src/main/java/org/elasticsearch/index/mapper/internal/RoutingFieldMapper.java @@ -124,7 +124,9 @@ public class RoutingFieldMapper extends MetadataFieldMapper { static final class RoutingFieldType extends MappedFieldType { - public RoutingFieldType() {} + public RoutingFieldType() { + setFieldDataType(new FieldDataType("string")); + } protected RoutingFieldType(RoutingFieldType ref) { super(ref); @@ -157,21 +159,11 @@ public class RoutingFieldMapper extends MetadataFieldMapper { } protected RoutingFieldMapper(MappedFieldType fieldType, boolean required, String path, Settings indexSettings) { - super(NAME, fieldType, false, null, indexSettings); + super(NAME, fieldType, Defaults.FIELD_TYPE, indexSettings); this.required = required; this.path = path; } - @Override - public MappedFieldType defaultFieldType() { - return Defaults.FIELD_TYPE; - } - - @Override - public FieldDataType defaultFieldDataType() { - return new FieldDataType("string"); - } - public void markAsRequired() { this.required = true; } diff --git a/core/src/main/java/org/elasticsearch/index/mapper/internal/SizeFieldMapper.java b/core/src/main/java/org/elasticsearch/index/mapper/internal/SizeFieldMapper.java index 224cb32d8db..cbd5d3e5f8d 100644 --- a/core/src/main/java/org/elasticsearch/index/mapper/internal/SizeFieldMapper.java +++ b/core/src/main/java/org/elasticsearch/index/mapper/internal/SizeFieldMapper.java @@ -83,6 +83,7 @@ public class SizeFieldMapper extends MetadataFieldMapper { @Override public SizeFieldMapper build(BuilderContext context) { setupFieldType(context); + fieldType.setHasDocValues(false); return new SizeFieldMapper(enabledState, fieldType, context.indexSettings()); } } @@ -114,7 +115,7 @@ public class SizeFieldMapper extends MetadataFieldMapper { } public SizeFieldMapper(EnabledAttributeMapper enabled, MappedFieldType fieldType, Settings indexSettings) { - super(NAME, fieldType, false, null, indexSettings); + super(NAME, fieldType, Defaults.SIZE_FIELD_TYPE, indexSettings); this.enabledState = enabled; } @@ -138,16 +139,6 @@ public class SizeFieldMapper extends MetadataFieldMapper { super.parse(context); } - @Override - public MappedFieldType defaultFieldType() { - return Defaults.SIZE_FIELD_TYPE; - } - - @Override - public FieldDataType defaultFieldDataType() { - return new FieldDataType("int"); - } - @Override public Mapper parse(ParseContext context) throws IOException { // nothing to do here, we call the parent in postParse diff --git a/core/src/main/java/org/elasticsearch/index/mapper/internal/SourceFieldMapper.java b/core/src/main/java/org/elasticsearch/index/mapper/internal/SourceFieldMapper.java index 55274a17687..2f374e6b4f1 100644 --- a/core/src/main/java/org/elasticsearch/index/mapper/internal/SourceFieldMapper.java +++ b/core/src/main/java/org/elasticsearch/index/mapper/internal/SourceFieldMapper.java @@ -256,7 +256,7 @@ public class SourceFieldMapper extends MetadataFieldMapper { protected SourceFieldMapper(boolean enabled, String format, Boolean compress, long compressThreshold, String[] includes, String[] excludes, Settings indexSettings) { - super(NAME, Defaults.FIELD_TYPE.clone(), false, null, indexSettings); // Only stored. + super(NAME, Defaults.FIELD_TYPE.clone(), Defaults.FIELD_TYPE, indexSettings); // Only stored. this.enabled = enabled; this.compress = compress; this.compressThreshold = compressThreshold; @@ -284,16 +284,6 @@ public class SourceFieldMapper extends MetadataFieldMapper { return complete; } - @Override - public MappedFieldType defaultFieldType() { - return Defaults.FIELD_TYPE; - } - - @Override - public FieldDataType defaultFieldDataType() { - return null; - } - @Override public void preParse(ParseContext context) throws IOException { super.parse(context); diff --git a/core/src/main/java/org/elasticsearch/index/mapper/internal/TTLFieldMapper.java b/core/src/main/java/org/elasticsearch/index/mapper/internal/TTLFieldMapper.java index 63c6f28e700..3dfaf8c500d 100644 --- a/core/src/main/java/org/elasticsearch/index/mapper/internal/TTLFieldMapper.java +++ b/core/src/main/java/org/elasticsearch/index/mapper/internal/TTLFieldMapper.java @@ -101,6 +101,7 @@ public class TTLFieldMapper extends MetadataFieldMapper { @Override public TTLFieldMapper build(BuilderContext context) { setupFieldType(context); + fieldType.setHasDocValues(false); return new TTLFieldMapper(fieldType, enabledState, defaultTTL, fieldDataSettings, context.indexSettings()); } } @@ -167,7 +168,7 @@ public class TTLFieldMapper extends MetadataFieldMapper { protected TTLFieldMapper(MappedFieldType fieldType, EnabledAttributeMapper enabled, long defaultTTL, @Nullable Settings fieldDataSettings, Settings indexSettings) { - super(NAME, fieldType, false, fieldDataSettings, indexSettings); + super(NAME, fieldType, Defaults.TTL_FIELD_TYPE, indexSettings); this.enabledState = enabled; this.defaultTTL = defaultTTL; } @@ -194,16 +195,6 @@ public class TTLFieldMapper extends MetadataFieldMapper { super.parse(context); } - @Override - public MappedFieldType defaultFieldType() { - return Defaults.TTL_FIELD_TYPE; - } - - @Override - public FieldDataType defaultFieldDataType() { - return new FieldDataType("long"); - } - @Override public Mapper parse(ParseContext context) throws IOException, MapperParsingException { if (context.sourceToParse().ttl() < 0) { // no ttl has been provided externally diff --git a/core/src/main/java/org/elasticsearch/index/mapper/internal/TimestampFieldMapper.java b/core/src/main/java/org/elasticsearch/index/mapper/internal/TimestampFieldMapper.java index 4104a2bcb14..507b2d1da89 100644 --- a/core/src/main/java/org/elasticsearch/index/mapper/internal/TimestampFieldMapper.java +++ b/core/src/main/java/org/elasticsearch/index/mapper/internal/TimestampFieldMapper.java @@ -77,9 +77,11 @@ public class TimestampFieldMapper extends MetadataFieldMapper { FIELD_TYPE.setDateTimeFormatter(DATE_TIME_FORMATTER); FIELD_TYPE.setIndexAnalyzer(NumericDateAnalyzer.buildNamedAnalyzer(DATE_TIME_FORMATTER, Defaults.PRECISION_STEP_64_BIT)); FIELD_TYPE.setSearchAnalyzer(NumericDateAnalyzer.buildNamedAnalyzer(DATE_TIME_FORMATTER, Integer.MAX_VALUE)); + FIELD_TYPE.setHasDocValues(true); FIELD_TYPE.freeze(); PRE_20_FIELD_TYPE = FIELD_TYPE.clone(); PRE_20_FIELD_TYPE.setStored(false); + PRE_20_FIELD_TYPE.setHasDocValues(false); PRE_20_FIELD_TYPE.freeze(); } @@ -145,8 +147,7 @@ public class TimestampFieldMapper extends MetadataFieldMapper { fieldType.setStored(false); } setupFieldType(context); - return new TimestampFieldMapper(fieldType, docValues, enabledState, path, defaultTimestamp, - ignoreMissing, fieldDataSettings, context.indexSettings()); + return new TimestampFieldMapper(fieldType, defaultFieldType, enabledState, path, defaultTimestamp, ignoreMissing, context.indexSettings()); } } @@ -227,7 +228,7 @@ public class TimestampFieldMapper extends MetadataFieldMapper { } } - private static MappedFieldType defaultFieldType(Settings settings, MappedFieldType existing) { + private static MappedFieldType chooseFieldType(Settings settings, MappedFieldType existing) { if (existing != null) { return existing; } @@ -238,22 +239,18 @@ public class TimestampFieldMapper extends MetadataFieldMapper { private final String path; private final String defaultTimestamp; - private final MappedFieldType defaultFieldType; private final Boolean ignoreMissing; public TimestampFieldMapper(Settings indexSettings, MappedFieldType existing) { - this(defaultFieldType(indexSettings, existing).clone(), null, Defaults.ENABLED, Defaults.PATH, Defaults.DEFAULT_TIMESTAMP, null, - existing == null ? null : (existing.fieldDataType() == null ? null : existing.fieldDataType().getSettings()), - indexSettings); + this(chooseFieldType(indexSettings, existing).clone(), chooseFieldType(indexSettings, null), Defaults.ENABLED, Defaults.PATH, Defaults.DEFAULT_TIMESTAMP, null, indexSettings); } - protected TimestampFieldMapper(MappedFieldType fieldType, Boolean docValues, EnabledAttributeMapper enabledState, String path, - String defaultTimestamp, Boolean ignoreMissing, @Nullable Settings fieldDataSettings, Settings indexSettings) { - super(NAME, fieldType, docValues, fieldDataSettings, indexSettings); + protected TimestampFieldMapper(MappedFieldType fieldType, MappedFieldType defaultFieldType, EnabledAttributeMapper enabledState, String path, + String defaultTimestamp, Boolean ignoreMissing, Settings indexSettings) { + super(NAME, fieldType, defaultFieldType, indexSettings); this.enabledState = enabledState; this.path = path; this.defaultTimestamp = defaultTimestamp; - this.defaultFieldType = defaultFieldType(indexSettings, null); this.ignoreMissing = ignoreMissing; } @@ -262,16 +259,6 @@ public class TimestampFieldMapper extends MetadataFieldMapper { return (TimestampFieldType)super.fieldType(); } - @Override - public MappedFieldType defaultFieldType() { - return defaultFieldType; - } - - @Override - public FieldDataType defaultFieldDataType() { - return new FieldDataType("long"); - } - public boolean enabled() { return this.enabledState.enabled; } @@ -335,7 +322,7 @@ public class TimestampFieldMapper extends MetadataFieldMapper { fieldType().stored() == Defaults.FIELD_TYPE.stored() && enabledState == Defaults.ENABLED && path == Defaults.PATH && fieldType().dateTimeFormatter().format().equals(Defaults.DATE_TIME_FORMATTER.format()) && Defaults.DEFAULT_TIMESTAMP.equals(defaultTimestamp) - && defaultDocValues() == fieldType().hasDocValues()) { + && defaultFieldType.hasDocValues() == fieldType().hasDocValues()) { return builder; } builder.startObject(CONTENT_TYPE); @@ -363,12 +350,8 @@ public class TimestampFieldMapper extends MetadataFieldMapper { if (includeDefaults || ignoreMissing != null) { builder.field("ignore_missing", ignoreMissing); } - if (indexCreatedBefore2x) { - if (hasCustomFieldDataSettings()) { - builder.field("fielddata", (Map) customFieldDataSettings.getAsMap()); - } else if (includeDefaults) { - builder.field("fielddata", (Map) fieldType().fieldDataType().getSettings().getAsMap()); - } + if (indexCreatedBefore2x && (includeDefaults || hasCustomFieldDataSettings())) { + builder.field("fielddata", fieldType().fieldDataType().getSettings().getAsMap()); } builder.endObject(); diff --git a/core/src/main/java/org/elasticsearch/index/mapper/internal/TypeFieldMapper.java b/core/src/main/java/org/elasticsearch/index/mapper/internal/TypeFieldMapper.java index 970638f3718..84d9ee4b1ab 100644 --- a/core/src/main/java/org/elasticsearch/index/mapper/internal/TypeFieldMapper.java +++ b/core/src/main/java/org/elasticsearch/index/mapper/internal/TypeFieldMapper.java @@ -106,7 +106,9 @@ public class TypeFieldMapper extends MetadataFieldMapper { static final class TypeFieldType extends MappedFieldType { - public TypeFieldType() {} + public TypeFieldType() { + setFieldDataType(new FieldDataType("string")); + } protected TypeFieldType(TypeFieldType ref) { super(ref); @@ -150,20 +152,9 @@ public class TypeFieldMapper extends MetadataFieldMapper { } public TypeFieldMapper(MappedFieldType fieldType, Settings indexSettings) { - super(NAME, fieldType, false, null, indexSettings); + super(NAME, fieldType, Defaults.FIELD_TYPE, indexSettings); } - @Override - public MappedFieldType defaultFieldType() { - return Defaults.FIELD_TYPE; - } - - @Override - public FieldDataType defaultFieldDataType() { - return new FieldDataType("string"); - } - - @Override public void preParse(ParseContext context) throws IOException { super.parse(context); diff --git a/core/src/main/java/org/elasticsearch/index/mapper/internal/UidFieldMapper.java b/core/src/main/java/org/elasticsearch/index/mapper/internal/UidFieldMapper.java index ebbd8d7a781..d187698301d 100644 --- a/core/src/main/java/org/elasticsearch/index/mapper/internal/UidFieldMapper.java +++ b/core/src/main/java/org/elasticsearch/index/mapper/internal/UidFieldMapper.java @@ -88,8 +88,9 @@ public class UidFieldMapper extends MetadataFieldMapper { @Override public UidFieldMapper build(BuilderContext context) { - fieldType.setNames(new MappedFieldType.Names(indexName, indexName, name)); - return new UidFieldMapper(fieldType, docValues, fieldDataSettings, context.indexSettings()); + setupFieldType(context); + fieldType.setHasDocValues(context.indexCreatedVersion().before(Version.V_2_0_0)); + return new UidFieldMapper(fieldType, defaultFieldType, context.indexSettings()); } } @@ -107,7 +108,9 @@ public class UidFieldMapper extends MetadataFieldMapper { static final class UidFieldType extends MappedFieldType { - public UidFieldType() {} + public UidFieldType() { + setFieldDataType(new FieldDataType("string")); + } protected UidFieldType(UidFieldType ref) { super(ref); @@ -133,30 +136,11 @@ public class UidFieldMapper extends MetadataFieldMapper { } public UidFieldMapper(Settings indexSettings, MappedFieldType existing) { - this(existing == null ? Defaults.FIELD_TYPE.clone() : existing, null, - existing == null ? null : (existing.fieldDataType() == null ? null : existing.fieldDataType().getSettings()), - indexSettings); + this(existing == null ? Defaults.FIELD_TYPE.clone() : existing, Defaults.FIELD_TYPE, indexSettings); } - protected UidFieldMapper(MappedFieldType fieldType, Boolean docValues, @Nullable Settings fieldDataSettings, Settings indexSettings) { - super(NAME, fieldType, docValuesEnabled(docValues, indexSettings), fieldDataSettings, indexSettings); - } - - static Boolean docValuesEnabled(Boolean docValues, Settings indexSettings) { - if (Version.indexCreated(indexSettings).onOrAfter(Version.V_2_0_0)) { - return false; // explicitly disable doc values for 2.0+, for now - } - return docValues; - } - - @Override - public MappedFieldType defaultFieldType() { - return Defaults.FIELD_TYPE; - } - - @Override - public FieldDataType defaultFieldDataType() { - return new FieldDataType("string"); + protected UidFieldMapper(MappedFieldType fieldType, MappedFieldType defaultFieldType, Settings indexSettings) { + super(NAME, fieldType, defaultFieldType, indexSettings); } @Override @@ -230,9 +214,7 @@ public class UidFieldMapper extends MetadataFieldMapper { builder.startObject(CONTENT_TYPE); - if (hasCustomFieldDataSettings()) { - builder.field("fielddata", (Map) customFieldDataSettings.getAsMap()); - } else if (includeDefaults) { + if (includeDefaults || hasCustomFieldDataSettings()) { builder.field("fielddata", (Map) fieldType().fieldDataType().getSettings().getAsMap()); } diff --git a/core/src/main/java/org/elasticsearch/index/mapper/internal/VersionFieldMapper.java b/core/src/main/java/org/elasticsearch/index/mapper/internal/VersionFieldMapper.java index 09d8e9e115f..56c70dc9318 100644 --- a/core/src/main/java/org/elasticsearch/index/mapper/internal/VersionFieldMapper.java +++ b/core/src/main/java/org/elasticsearch/index/mapper/internal/VersionFieldMapper.java @@ -35,6 +35,7 @@ import org.elasticsearch.index.mapper.MergeResult; import org.elasticsearch.index.mapper.MetadataFieldMapper; import org.elasticsearch.index.mapper.ParseContext; import org.elasticsearch.index.mapper.ParseContext.Document; +import org.elasticsearch.index.mapper.core.AbstractFieldMapper; import java.io.IOException; import java.util.Iterator; @@ -55,6 +56,7 @@ public class VersionFieldMapper extends MetadataFieldMapper { static { FIELD_TYPE.setNames(new MappedFieldType.Names(NAME)); FIELD_TYPE.setDocValuesType(DocValuesType.NUMERIC); + FIELD_TYPE.setHasDocValues(true); FIELD_TYPE.freeze(); } } @@ -89,7 +91,9 @@ public class VersionFieldMapper extends MetadataFieldMapper { static final class VersionFieldType extends MappedFieldType { - public VersionFieldType() {} + public VersionFieldType() { + setFieldDataType(new FieldDataType("long")); + } protected VersionFieldType(VersionFieldType ref) { super(ref); @@ -116,7 +120,7 @@ public class VersionFieldMapper extends MetadataFieldMapper { } public VersionFieldMapper(Settings indexSettings) { - super(NAME, Defaults.FIELD_TYPE, true, null, indexSettings); + super(NAME, Defaults.FIELD_TYPE, Defaults.FIELD_TYPE, indexSettings); } @Override @@ -148,16 +152,6 @@ public class VersionFieldMapper extends MetadataFieldMapper { } } - @Override - public MappedFieldType defaultFieldType() { - return Defaults.FIELD_TYPE; - } - - @Override - public FieldDataType defaultFieldDataType() { - return new FieldDataType("long"); - } - @Override protected String contentType() { return CONTENT_TYPE; diff --git a/core/src/main/java/org/elasticsearch/index/mapper/ip/IpFieldMapper.java b/core/src/main/java/org/elasticsearch/index/mapper/ip/IpFieldMapper.java index b80f5051b89..47089252e6d 100644 --- a/core/src/main/java/org/elasticsearch/index/mapper/ip/IpFieldMapper.java +++ b/core/src/main/java/org/elasticsearch/index/mapper/ip/IpFieldMapper.java @@ -48,6 +48,7 @@ import org.elasticsearch.index.mapper.MapperParsingException; import org.elasticsearch.index.mapper.MergeMappingException; import org.elasticsearch.index.mapper.MergeResult; import org.elasticsearch.index.mapper.ParseContext; +import org.elasticsearch.index.mapper.core.LongFieldMapper; import org.elasticsearch.index.mapper.core.LongFieldMapper.CustomLongNumericField; import org.elasticsearch.index.mapper.core.NumberFieldMapper; import org.elasticsearch.index.query.QueryParseContext; @@ -119,8 +120,8 @@ public class IpFieldMapper extends NumberFieldMapper { @Override public IpFieldMapper build(BuilderContext context) { setupFieldType(context); - IpFieldMapper fieldMapper = new IpFieldMapper(name, fieldType, docValues, ignoreMalformed(context), coerce(context), - fieldDataSettings, context.indexSettings(), multiFieldsBuilder.build(this, context), copyTo); + IpFieldMapper fieldMapper = new IpFieldMapper(name, fieldType, defaultFieldType, ignoreMalformed(context), coerce(context), + context.indexSettings(), multiFieldsBuilder.build(this, context), copyTo); fieldMapper.includeInAll(includeInAll); return fieldMapper; } @@ -158,10 +159,10 @@ public class IpFieldMapper extends NumberFieldMapper { } } - public static final class IpFieldType extends NumberFieldType { + public static final class IpFieldType extends LongFieldMapper.LongFieldType { public IpFieldType() { - super(NumericType.LONG); + setFieldDataType(new FieldDataType("long")); } protected IpFieldType(IpFieldType ref) { @@ -235,22 +236,10 @@ public class IpFieldMapper extends NumberFieldMapper { } } - protected IpFieldMapper(String simpleName, MappedFieldType fieldType, Boolean docValues, + protected IpFieldMapper(String simpleName, MappedFieldType fieldType, MappedFieldType defaultFieldType, Explicit ignoreMalformed, Explicit coerce, - @Nullable Settings fieldDataSettings, Settings indexSettings, MultiFields multiFields, CopyTo copyTo) { - super(simpleName, fieldType, docValues, ignoreMalformed, coerce, - fieldDataSettings, indexSettings, multiFields, copyTo); - } - - @Override - public MappedFieldType defaultFieldType() { - return Defaults.FIELD_TYPE; - } - - @Override - public FieldDataType defaultFieldDataType() { - return new FieldDataType("long"); + super(simpleName, fieldType, defaultFieldType, ignoreMalformed, coerce, indexSettings, multiFields, copyTo); } private static long parseValue(Object value) { diff --git a/core/src/test/java/org/elasticsearch/index/mapper/FieldTypeLookupTests.java b/core/src/test/java/org/elasticsearch/index/mapper/FieldTypeLookupTests.java index dd02b208a14..1b8e41d5d60 100644 --- a/core/src/test/java/org/elasticsearch/index/mapper/FieldTypeLookupTests.java +++ b/core/src/test/java/org/elasticsearch/index/mapper/FieldTypeLookupTests.java @@ -179,7 +179,7 @@ public class FieldTypeLookupTests extends ElasticsearchTestCase { static class FakeFieldMapper extends AbstractFieldMapper { static Settings dummySettings = Settings.builder().put(IndexMetaData.SETTING_VERSION_CREATED, Version.CURRENT.id).build(); public FakeFieldMapper(String fullName, String indexName) { - super(fullName, makeFieldType(fullName, indexName), null, null, dummySettings, null, null); + super(fullName, makeFieldType(fullName, indexName), null, dummySettings, null, null); } static MappedFieldType makeFieldType(String fullName, String indexName) { FakeFieldType fieldType = new FakeFieldType(); @@ -201,10 +201,6 @@ public class FieldTypeLookupTests extends ElasticsearchTestCase { } } @Override - public MappedFieldType defaultFieldType() { return null; } - @Override - public FieldDataType defaultFieldDataType() { return null; } - @Override protected String contentType() { return null; } @Override protected void parseCreateField(ParseContext context, List list) throws IOException {} diff --git a/core/src/test/java/org/elasticsearch/index/mapper/all/SimpleAllMapperTests.java b/core/src/test/java/org/elasticsearch/index/mapper/all/SimpleAllMapperTests.java index b46c4e349d7..dabac4e2040 100644 --- a/core/src/test/java/org/elasticsearch/index/mapper/all/SimpleAllMapperTests.java +++ b/core/src/test/java/org/elasticsearch/index/mapper/all/SimpleAllMapperTests.java @@ -226,7 +226,6 @@ public class SimpleAllMapperTests extends ElasticsearchSingleNodeTest { boolean tv_offsets = false; boolean tv_positions = false; String similarity = null; - boolean fieldData = false; XContentBuilder mappingBuilder = jsonBuilder(); mappingBuilder.startObject().startObject("test"); List> booleanOptionList = new ArrayList<>(); @@ -263,12 +262,6 @@ public class SimpleAllMapperTests extends ElasticsearchSingleNodeTest { if (randomBoolean()) { mappingBuilder.field("similarity", similarity = randomBoolean() ? "BM25" : "TF/IDF"); } - if (randomBoolean()) { - fieldData = true; - mappingBuilder.startObject("fielddata"); - mappingBuilder.field("foo", "bar"); - mappingBuilder.endObject(); - } mappingBuilder.endObject(); } @@ -310,7 +303,6 @@ public class SimpleAllMapperTests extends ElasticsearchSingleNodeTest { } else { assertThat(similarity, equalTo(builtDocMapper.allFieldMapper().fieldType().similarity().name())); } - assertThat(builtMapping.contains("fielddata"), is(fieldData)); if (allDefault) { BytesStreamOutput bytesStreamOutput = new BytesStreamOutput(0); XContentBuilder b = new XContentBuilder(XContentType.JSON.xContent(), bytesStreamOutput); diff --git a/core/src/test/java/org/elasticsearch/index/mapper/externalvalues/ExternalMapper.java b/core/src/test/java/org/elasticsearch/index/mapper/externalvalues/ExternalMapper.java index 313d4ff575b..9c423ac0476 100755 --- a/core/src/test/java/org/elasticsearch/index/mapper/externalvalues/ExternalMapper.java +++ b/core/src/test/java/org/elasticsearch/index/mapper/externalvalues/ExternalMapper.java @@ -174,8 +174,7 @@ public class ExternalMapper extends AbstractFieldMapper { String generatedValue, String mapperName, BinaryFieldMapper binMapper, BooleanFieldMapper boolMapper, GeoPointFieldMapper pointMapper, GeoShapeFieldMapper shapeMapper, FieldMapper stringMapper, Settings indexSettings, MultiFields multiFields, CopyTo copyTo) { - super(simpleName, fieldType, false, null, indexSettings, - multiFields, copyTo); + super(simpleName, fieldType, new ExternalFieldType(), indexSettings, multiFields, copyTo); this.generatedValue = generatedValue; this.mapperName = mapperName; this.binMapper = binMapper; @@ -185,16 +184,6 @@ public class ExternalMapper extends AbstractFieldMapper { this.stringMapper = stringMapper; } - @Override - public MappedFieldType defaultFieldType() { - return new ExternalFieldType(); - } - - @Override - public FieldDataType defaultFieldDataType() { - return null; - } - @Override public Mapper parse(ParseContext context) throws IOException { byte[] bytes = "Hello world".getBytes(Charset.defaultCharset()); diff --git a/core/src/test/java/org/elasticsearch/index/mapper/externalvalues/ExternalMetadataMapper.java b/core/src/test/java/org/elasticsearch/index/mapper/externalvalues/ExternalMetadataMapper.java index 031d3aab7af..1cda8eee239 100644 --- a/core/src/test/java/org/elasticsearch/index/mapper/externalvalues/ExternalMetadataMapper.java +++ b/core/src/test/java/org/elasticsearch/index/mapper/externalvalues/ExternalMetadataMapper.java @@ -53,7 +53,7 @@ public class ExternalMetadataMapper extends MetadataFieldMapper { } protected ExternalMetadataMapper(Settings indexSettings) { - super(FIELD_NAME, FIELD_TYPE, true, null, indexSettings); + super(FIELD_NAME, FIELD_TYPE, FIELD_TYPE, indexSettings); } @Override @@ -61,16 +61,6 @@ public class ExternalMetadataMapper extends MetadataFieldMapper { return CONTENT_TYPE; } - @Override - public MappedFieldType defaultFieldType() { - return FIELD_TYPE; - } - - @Override - public FieldDataType defaultFieldDataType() { - return new FieldDataType("string"); - } - @Override protected void parseCreateField(ParseContext context, List fields) throws IOException { // handled in post parse