diff --git a/core/src/main/java/org/elasticsearch/action/search/type/TransportSearchScrollScanAction.java b/core/src/main/java/org/elasticsearch/action/search/type/TransportSearchScrollScanAction.java index 93042815e00..0be39abba14 100644 --- a/core/src/main/java/org/elasticsearch/action/search/type/TransportSearchScrollScanAction.java +++ b/core/src/main/java/org/elasticsearch/action/search/type/TransportSearchScrollScanAction.java @@ -41,7 +41,9 @@ import org.elasticsearch.search.internal.InternalSearchHits; import org.elasticsearch.search.internal.InternalSearchResponse; import java.io.IOException; +import java.util.ArrayList; import java.util.List; +import java.util.Objects; import java.util.concurrent.atomic.AtomicInteger; import static org.elasticsearch.action.search.type.TransportSearchHelper.internalScrollSearchRequest; @@ -159,7 +161,9 @@ public class TransportSearchScrollScanAction extends AbstractComponent { searchService.sendExecuteScan(node, internalScrollSearchRequest(searchId, request), new ActionListener() { @Override public void onResponse(ScrollQueryFetchSearchResult result) { - queryFetchResults.set(shardIndex, result.result()); + QueryFetchSearchResult shardResult = result.result(); + Objects.requireNonNull(shardResult, "QueryFetchSearchResult can't be null"); + queryFetchResults.setOnce(shardIndex, shardResult); if (counter.decrementAndGet() == 0) { finishHim(); } @@ -197,25 +201,27 @@ public class TransportSearchScrollScanAction extends AbstractComponent { private void innerFinishHim() throws IOException { int numberOfHits = 0; - for (AtomicArray.Entry entry : queryFetchResults.asList()) { + List> entries = queryFetchResults.asList(); + for (AtomicArray.Entry entry : entries) { numberOfHits += entry.value.queryResult().topDocs().scoreDocs.length; } - ScoreDoc[] docs = new ScoreDoc[numberOfHits]; - int counter = 0; - for (AtomicArray.Entry entry : queryFetchResults.asList()) { + List docs = new ArrayList<>(numberOfHits); + for (AtomicArray.Entry entry : entries) { ScoreDoc[] scoreDocs = entry.value.queryResult().topDocs().scoreDocs; for (ScoreDoc scoreDoc : scoreDocs) { scoreDoc.shardIndex = entry.index; - docs[counter++] = scoreDoc; + docs.add(scoreDoc); } } - final InternalSearchResponse internalResponse = searchPhaseController.merge(docs, queryFetchResults, queryFetchResults); + final InternalSearchResponse internalResponse = searchPhaseController.merge(docs.toArray(new ScoreDoc[0]), queryFetchResults, queryFetchResults); ((InternalSearchHits) internalResponse.hits()).totalHits = Long.parseLong(this.scrollId.getAttributes().get("total_hits")); - for (AtomicArray.Entry entry : queryFetchResults.asList()) { + for (AtomicArray.Entry entry : entries) { if (entry.value.queryResult().topDocs().scoreDocs.length < entry.value.queryResult().size()) { - // we found more than we want for this round, remove this from our scrolling + // we found more than we want for this round, remove this from our scrolling, so we don't go back to + // this shard, since all hits have been processed. + // The SearchContext already gets freed on the node holding the shard, via a similar check. queryFetchResults.set(entry.index, null); } } diff --git a/core/src/main/java/org/elasticsearch/common/lucene/search/XMoreLikeThis.java b/core/src/main/java/org/elasticsearch/common/lucene/search/XMoreLikeThis.java index b3aeb34a198..4999f2a7cf4 100644 --- a/core/src/main/java/org/elasticsearch/common/lucene/search/XMoreLikeThis.java +++ b/core/src/main/java/org/elasticsearch/common/lucene/search/XMoreLikeThis.java @@ -39,10 +39,7 @@ import org.apache.lucene.analysis.TokenStream; import org.apache.lucene.analysis.tokenattributes.CharTermAttribute; import org.apache.lucene.document.Document; import org.apache.lucene.index.*; -import org.apache.lucene.search.BooleanClause; -import org.apache.lucene.search.BooleanQuery; -import org.apache.lucene.search.Query; -import org.apache.lucene.search.TermQuery; +import org.apache.lucene.search.*; import org.apache.lucene.search.similarities.DefaultSimilarity; import org.apache.lucene.search.similarities.TFIDFSimilarity; import org.apache.lucene.util.BytesRef; @@ -855,9 +852,12 @@ public final class XMoreLikeThis { continue; } - PostingsEnum docs = termsEnum.postings(null, null); - final int freq = docs.freq(); - + final PostingsEnum docs = termsEnum.postings(null, null); + int freq = 0; + while(docs != null && docs.nextDoc() != DocIdSetIterator.NO_MORE_DOCS) { + freq += docs.freq(); + } + // increment frequency Int cnt = termFreqMap.get(term); if (cnt == null) { 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..b3a55fd3245 100644 --- a/core/src/main/java/org/elasticsearch/common/settings/Settings.java +++ b/core/src/main/java/org/elasticsearch/common/settings/Settings.java @@ -22,6 +22,7 @@ package org.elasticsearch.common.settings; import com.google.common.base.Charsets; import com.google.common.base.Predicate; import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSortedMap; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; import com.google.common.collect.Maps; @@ -81,7 +82,9 @@ public final class Settings implements ToXContent { private transient ClassLoader classLoader; Settings(Map settings, ClassLoader classLoader) { - this.settings = ImmutableMap.copyOf(settings); + // we use a sorted map for consistent serialization when using getAsMap() + // TODO: use Collections.unmodifiableMap with a TreeMap + this.settings = ImmutableSortedMap.copyOf(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/common/util/concurrent/AtomicArray.java b/core/src/main/java/org/elasticsearch/common/util/concurrent/AtomicArray.java index 93644d0d80f..38953c51b02 100644 --- a/core/src/main/java/org/elasticsearch/common/util/concurrent/AtomicArray.java +++ b/core/src/main/java/org/elasticsearch/common/util/concurrent/AtomicArray.java @@ -67,6 +67,15 @@ public class AtomicArray { } } + public final void setOnce(int i, E value) { + if (array.compareAndSet(i, null, value) == false) { + throw new IllegalStateException("index [" + i + "] has already been set"); + } + if (nonNullList != null) { // read first, lighter, and most times it will be null... + nonNullList = null; + } + } + /** * Gets the current value at position {@code i}. * 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..8aac83388e3 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,54 @@ 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); // the reference ctor freezes the field type + defaultFieldType.freeze(); + 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 +398,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 +421,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 +456,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 +480,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 +533,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 aa9d9669d56..1edfdb89e9d 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 @@ -94,8 +94,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()); } } @@ -207,14 +208,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; } @@ -222,16 +220,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); @@ -280,13 +268,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..443937feb30 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), makeFieldType(fullName, indexName), 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 diff --git a/pom.xml b/pom.xml index 0a642164b6c..a339908c080 100644 --- a/pom.xml +++ b/pom.xml @@ -128,7 +128,7 @@ org.elasticsearch - dev-tools + elasticsearch-dev-tools ${elasticsearch.version} @@ -737,8 +737,8 @@ 1.5 - org.elasticsearch:dev-tools:${elasticsearch.version} - org.elasticsearch:rest-api-spec:${elasticsearch.version} + org.elasticsearch:elasticsearch-dev-tools:${elasticsearch.version} + org.elasticsearch:elasticsearch-rest-api-spec:${elasticsearch.version} ${elasticsearch.tools.directory} @@ -1285,7 +1285,7 @@ org.eclipse.jdt.ui.text.custom_code_templates= org.apache.maven.plugins maven-invoker-plugin - 1.10 + 2.0.0