diff options
Diffstat (limited to 'core/src/main/java/org/elasticsearch/index/mapper/FieldMapper.java')
-rw-r--r-- | core/src/main/java/org/elasticsearch/index/mapper/FieldMapper.java | 35 |
1 files changed, 17 insertions, 18 deletions
diff --git a/core/src/main/java/org/elasticsearch/index/mapper/FieldMapper.java b/core/src/main/java/org/elasticsearch/index/mapper/FieldMapper.java index 3eca73cffe..a983850356 100644 --- a/core/src/main/java/org/elasticsearch/index/mapper/FieldMapper.java +++ b/core/src/main/java/org/elasticsearch/index/mapper/FieldMapper.java @@ -24,6 +24,7 @@ import com.carrotsearch.hppc.cursors.ObjectObjectCursor; import org.apache.lucene.document.Field; import org.apache.lucene.document.FieldType; import org.apache.lucene.index.IndexOptions; +import org.elasticsearch.Version; import org.elasticsearch.common.Nullable; import org.elasticsearch.common.collect.ImmutableOpenMap; import org.elasticsearch.common.lucene.Lucene; @@ -70,6 +71,7 @@ public abstract class FieldMapper extends Mapper implements Cloneable { this.fieldType = fieldType.clone(); this.defaultFieldType = defaultFieldType.clone(); this.defaultOptions = fieldType.indexOptions(); // we have to store it the fieldType is mutable + this.docValuesSet = fieldType.hasDocValues(); multiFieldsBuilder = new MultiFields.Builder(); } @@ -222,6 +224,15 @@ public abstract class FieldMapper extends Mapper implements Cloneable { return context.path().pathAsText(name); } + protected boolean defaultDocValues(Version indexCreated) { + if (indexCreated.onOrAfter(Version.V_3_0_0)) { + // add doc values by default to keyword (boolean, numerics, etc.) fields + return fieldType.tokenized() == false; + } else { + return fieldType.tokenized() == false && fieldType.indexOptions() != IndexOptions.NONE; + } + } + protected void setupFieldType(BuilderContext context) { fieldType.setName(buildFullName(context)); if (fieldType.indexAnalyzer() == null && fieldType.tokenized() == false && fieldType.indexOptions() != IndexOptions.NONE) { @@ -232,17 +243,10 @@ public abstract class FieldMapper extends Mapper implements Cloneable { Settings settings = Settings.builder().put(fieldType.fieldDataType().getSettings()).put(fieldDataSettings).build(); fieldType.setFieldDataType(new FieldDataType(fieldType.fieldDataType().getType(), settings)); } - boolean 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; - } + boolean defaultDocValues = defaultDocValues(context.indexCreatedVersion()); defaultFieldType.setHasDocValues(defaultDocValues); if (docValuesSet == false) { - fieldType.setHasDocValues(defaultDocValues || fieldDataDocValues); + fieldType.setHasDocValues(defaultDocValues); } } } @@ -394,7 +398,7 @@ public abstract class FieldMapper extends Mapper implements Cloneable { boolean defaultIndexed = defaultFieldType.indexOptions() != IndexOptions.NONE; if (includeDefaults || indexed != defaultIndexed || fieldType().tokenized() != defaultFieldType.tokenized()) { - builder.field("index", indexTokenizeOptionToString(indexed, fieldType().tokenized())); + builder.field("index", indexTokenizeOption(indexed, fieldType().tokenized())); } if (includeDefaults || fieldType().stored() != defaultFieldType.stored()) { builder.field("store", fieldType().stored()); @@ -491,14 +495,9 @@ public abstract class FieldMapper extends Mapper implements Cloneable { } } - protected static String indexTokenizeOptionToString(boolean indexed, boolean tokenized) { - if (!indexed) { - return "no"; - } else if (tokenized) { - return "analyzed"; - } else { - return "not_analyzed"; - } + /* Only protected so that string can override it */ + protected Object indexTokenizeOption(boolean indexed, boolean tokenized) { + return indexed; } protected boolean hasCustomFieldDataSettings() { |