diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/FieldMapper.java b/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/FieldMapper.java index 78664809f7c..75d4b7dab16 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/FieldMapper.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/FieldMapper.java @@ -30,7 +30,7 @@ import org.elasticsearch.common.util.concurrent.ThreadSafe; import org.elasticsearch.index.field.data.FieldDataType; /** - * @author kimchy (Shay Banon) + * @author kimchy (shay.banon) */ @ThreadSafe public interface FieldMapper { diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/AbstractFieldMapper.java b/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/AbstractFieldMapper.java index da1a6c1fd64..06c2c9d4ec3 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/AbstractFieldMapper.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/AbstractFieldMapper.java @@ -396,18 +396,22 @@ public abstract class AbstractFieldMapper implements FieldMapper, XContent protected void doXContentBody(XContentBuilder builder) throws IOException { builder.field("type", contentType()); - builder.field("index_name", names.indexNameClean()); - builder.field("index", index.name().toLowerCase()); - builder.field("store", store.name().toLowerCase()); - builder.field("term_vector", termVector.name().toLowerCase()); - builder.field("boost", boost); - builder.field("omit_norms", omitNorms); - builder.field("omit_term_freq_and_positions", omitTermFreqAndPositions); - if (indexAnalyzer != null && !indexAnalyzer.name().startsWith("_")) { - builder.field("index_analyzer", indexAnalyzer.name()); + if (!names.name().equals(names.indexNameClean())) { + builder.field("index_name", names.indexNameClean()); } - if (searchAnalyzer != null && !searchAnalyzer.name().startsWith("_")) { - builder.field("search_analyzer", searchAnalyzer.name()); + if (boost != 1.0f) { + builder.field("boost", boost); + } + if (indexAnalyzer != null && searchAnalyzer != null && indexAnalyzer.name().equals(searchAnalyzer.name()) && !indexAnalyzer.name().startsWith("_")) { + // same analyzers, output it once + builder.field("analyzer", indexAnalyzer.name()); + } else { + if (indexAnalyzer != null && !indexAnalyzer.name().startsWith("_")) { + builder.field("index_analyzer", indexAnalyzer.name()); + } + if (searchAnalyzer != null && !searchAnalyzer.name().startsWith("_")) { + builder.field("search_analyzer", searchAnalyzer.name()); + } } } diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/AllFieldMapper.java b/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/AllFieldMapper.java index 5f8314579df..3047e26fdf3 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/AllFieldMapper.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/AllFieldMapper.java @@ -154,15 +154,30 @@ public class AllFieldMapper extends AbstractFieldMapper implements org.ela } @Override public void toXContent(XContentBuilder builder, Params params) throws IOException { - builder.startObject(CONTENT_TYPE); - builder.field("enabled", enabled); - builder.field("store", store.name().toLowerCase()); - builder.field("term_vector", termVector.name().toLowerCase()); - if (indexAnalyzer != null && !indexAnalyzer.name().startsWith("_")) { - builder.field("index_analyzer", indexAnalyzer.name()); + // if all are defaults, no need to write it at all + if (enabled == Defaults.ENABLED && store == Defaults.STORE && termVector == Defaults.TERM_VECTOR && indexAnalyzer == null && searchAnalyzer == null) { + return; } - if (searchAnalyzer != null && !searchAnalyzer.name().startsWith("_")) { - builder.field("search_analyzer", searchAnalyzer.name()); + builder.startObject(CONTENT_TYPE); + if (enabled != Defaults.ENABLED) { + builder.field("enabled", enabled); + } + if (store != Defaults.STORE) { + builder.field("store", store.name().toLowerCase()); + } + if (termVector != Defaults.TERM_VECTOR) { + builder.field("term_vector", termVector.name().toLowerCase()); + } + if (indexAnalyzer != null && searchAnalyzer != null && indexAnalyzer.name().equals(searchAnalyzer.name()) && !indexAnalyzer.name().startsWith("_")) { + // same analyzers, output it once + builder.field("analyzer", indexAnalyzer.name()); + } else { + if (indexAnalyzer != null && !indexAnalyzer.name().startsWith("_")) { + builder.field("index_analyzer", indexAnalyzer.name()); + } + if (searchAnalyzer != null && !searchAnalyzer.name().startsWith("_")) { + builder.field("search_analyzer", searchAnalyzer.name()); + } } builder.endObject(); } diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/BinaryFieldMapper.java b/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/BinaryFieldMapper.java index 67bf03ff765..0dcd679d3de 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/BinaryFieldMapper.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/BinaryFieldMapper.java @@ -102,7 +102,9 @@ public class BinaryFieldMapper extends AbstractFieldMapper { @Override public void toXContent(XContentBuilder builder, Params params) throws IOException { builder.startObject(names.name()); builder.field("type", contentType()); - builder.field("index_name", names.indexNameClean()); + if (!names.name().equals(names.indexNameClean())) { + builder.field("index_name", names.indexNameClean()); + } builder.endObject(); } } \ No newline at end of file diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/BooleanFieldMapper.java b/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/BooleanFieldMapper.java index bd3445d86b1..0217a0724b1 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/BooleanFieldMapper.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/BooleanFieldMapper.java @@ -167,6 +167,21 @@ public class BooleanFieldMapper extends AbstractFieldMapper { @Override protected void doXContentBody(XContentBuilder builder) throws IOException { super.doXContentBody(builder); + if (index != Defaults.INDEX) { + builder.field("index", index.name().toLowerCase()); + } + if (store != Defaults.STORE) { + builder.field("store", store.name().toLowerCase()); + } + if (termVector != Defaults.TERM_VECTOR) { + builder.field("term_vector", termVector.name().toLowerCase()); + } + if (omitNorms != Defaults.OMIT_NORMS) { + builder.field("omit_norms", omitNorms); + } + if (omitTermFreqAndPositions != Defaults.OMIT_TERM_FREQ_AND_POSITIONS) { + builder.field("omit_term_freq_and_positions", omitTermFreqAndPositions); + } if (nullValue != null) { builder.field("null_value", nullValue); } diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/BoostFieldMapper.java b/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/BoostFieldMapper.java index 74685bc0b2a..038a9e45f48 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/BoostFieldMapper.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/BoostFieldMapper.java @@ -176,8 +176,14 @@ public class BoostFieldMapper extends NumberFieldMapper implements org.el } @Override public void toXContent(XContentBuilder builder, Params params) throws IOException { + // all are defaults, don't write it at all + if (name().equals(Defaults.NAME) && nullValue == null) { + return; + } builder.startObject(contentType()); - builder.field("name", name()); + if (!name().equals(Defaults.NAME)) { + builder.field("name", name()); + } if (nullValue != null) { builder.field("null_value", nullValue); } diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/DateFieldMapper.java b/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/DateFieldMapper.java index 1e2b9e62909..3aac1b3127e 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/DateFieldMapper.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/DateFieldMapper.java @@ -222,6 +222,24 @@ public class DateFieldMapper extends NumberFieldMapper { @Override protected void doXContentBody(XContentBuilder builder) throws IOException { super.doXContentBody(builder); + if (index != Defaults.INDEX) { + builder.field("index", index.name().toLowerCase()); + } + if (store != Defaults.STORE) { + builder.field("store", store.name().toLowerCase()); + } + if (termVector != Defaults.TERM_VECTOR) { + builder.field("term_vector", termVector.name().toLowerCase()); + } + if (omitNorms != Defaults.OMIT_NORMS) { + builder.field("omit_norms", omitNorms); + } + if (omitTermFreqAndPositions != Defaults.OMIT_TERM_FREQ_AND_POSITIONS) { + builder.field("omit_term_freq_and_positions", omitTermFreqAndPositions); + } + if (precisionStep != Defaults.PRECISION_STEP) { + builder.field("precision_step", precisionStep); + } builder.field("format", dateTimeFormatter.format()); if (nullValue != null) { builder.field("null_value", nullValue); diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/DoubleFieldMapper.java b/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/DoubleFieldMapper.java index 92f07d518c4..c7f9fa4c85e 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/DoubleFieldMapper.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/DoubleFieldMapper.java @@ -205,6 +205,24 @@ public class DoubleFieldMapper extends NumberFieldMapper { @Override protected void doXContentBody(XContentBuilder builder) throws IOException { super.doXContentBody(builder); + if (index != Defaults.INDEX) { + builder.field("index", index.name().toLowerCase()); + } + if (store != Defaults.STORE) { + builder.field("store", store.name().toLowerCase()); + } + if (termVector != Defaults.TERM_VECTOR) { + builder.field("term_vector", termVector.name().toLowerCase()); + } + if (omitNorms != Defaults.OMIT_NORMS) { + builder.field("omit_norms", omitNorms); + } + if (omitTermFreqAndPositions != Defaults.OMIT_TERM_FREQ_AND_POSITIONS) { + builder.field("omit_term_freq_and_positions", omitTermFreqAndPositions); + } + if (precisionStep != Defaults.PRECISION_STEP) { + builder.field("precision_step", precisionStep); + } if (nullValue != null) { builder.field("null_value", nullValue); } diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/FloatFieldMapper.java b/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/FloatFieldMapper.java index a28ed29e22f..88049146c9f 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/FloatFieldMapper.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/FloatFieldMapper.java @@ -205,6 +205,24 @@ public class FloatFieldMapper extends NumberFieldMapper { @Override protected void doXContentBody(XContentBuilder builder) throws IOException { super.doXContentBody(builder); + if (index != Defaults.INDEX) { + builder.field("index", index.name().toLowerCase()); + } + if (store != Defaults.STORE) { + builder.field("store", store.name().toLowerCase()); + } + if (termVector != Defaults.TERM_VECTOR) { + builder.field("term_vector", termVector.name().toLowerCase()); + } + if (omitNorms != Defaults.OMIT_NORMS) { + builder.field("omit_norms", omitNorms); + } + if (omitTermFreqAndPositions != Defaults.OMIT_TERM_FREQ_AND_POSITIONS) { + builder.field("omit_term_freq_and_positions", omitTermFreqAndPositions); + } + if (precisionStep != Defaults.PRECISION_STEP) { + builder.field("precision_step", precisionStep); + } if (nullValue != null) { builder.field("null_value", nullValue); } diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/IdFieldMapper.java b/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/IdFieldMapper.java index d9b590bda31..d7721f4dfd7 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/IdFieldMapper.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/IdFieldMapper.java @@ -121,8 +121,14 @@ public class IdFieldMapper extends AbstractFieldMapper implements org.el } @Override public void toXContent(XContentBuilder builder, Params params) throws IOException { + // if all are defaults, no sense to write it at all + if (store == Defaults.STORE) { + return; + } builder.startObject(CONTENT_TYPE); - builder.field("store", store.name().toLowerCase()); + if (store != Defaults.STORE) { + builder.field("store", store.name().toLowerCase()); + } builder.endObject(); } diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/IndexFieldMapper.java b/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/IndexFieldMapper.java index 420d866cb55..d99f3d65eb8 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/IndexFieldMapper.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/IndexFieldMapper.java @@ -128,9 +128,17 @@ public class IndexFieldMapper extends AbstractFieldMapper implements org } @Override public void toXContent(XContentBuilder builder, Params params) throws IOException { + // if all defaults, no need to write it at all + if (store == Defaults.STORE && enabled == Defaults.ENABLED) { + return; + } builder.startObject(CONTENT_TYPE); - builder.field("store", store.name().toLowerCase()); - builder.field("enabled", enabled); + if (store != Defaults.STORE) { + builder.field("store", store.name().toLowerCase()); + } + if (enabled != Defaults.ENABLED) { + builder.field("enabled", enabled); + } builder.endObject(); } diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/IntegerFieldMapper.java b/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/IntegerFieldMapper.java index 1cb9296c867..eb3c199938f 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/IntegerFieldMapper.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/IntegerFieldMapper.java @@ -204,6 +204,24 @@ public class IntegerFieldMapper extends NumberFieldMapper { @Override protected void doXContentBody(XContentBuilder builder) throws IOException { super.doXContentBody(builder); + if (index != Defaults.INDEX) { + builder.field("index", index.name().toLowerCase()); + } + if (store != Defaults.STORE) { + builder.field("store", store.name().toLowerCase()); + } + if (termVector != Defaults.TERM_VECTOR) { + builder.field("term_vector", termVector.name().toLowerCase()); + } + if (omitNorms != Defaults.OMIT_NORMS) { + builder.field("omit_norms", omitNorms); + } + if (omitTermFreqAndPositions != Defaults.OMIT_TERM_FREQ_AND_POSITIONS) { + builder.field("omit_term_freq_and_positions", omitTermFreqAndPositions); + } + if (precisionStep != Defaults.PRECISION_STEP) { + builder.field("precision_step", precisionStep); + } if (nullValue != null) { builder.field("null_value", nullValue); } diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/IpFieldMapper.java b/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/IpFieldMapper.java index 92b35278b44..7e5838a0542 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/IpFieldMapper.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/IpFieldMapper.java @@ -237,6 +237,24 @@ public class IpFieldMapper extends NumberFieldMapper { @Override protected void doXContentBody(XContentBuilder builder) throws IOException { super.doXContentBody(builder); + if (index != Defaults.INDEX) { + builder.field("index", index.name().toLowerCase()); + } + if (store != Defaults.STORE) { + builder.field("store", store.name().toLowerCase()); + } + if (termVector != Defaults.TERM_VECTOR) { + builder.field("term_vector", termVector.name().toLowerCase()); + } + if (omitNorms != Defaults.OMIT_NORMS) { + builder.field("omit_norms", omitNorms); + } + if (omitTermFreqAndPositions != Defaults.OMIT_TERM_FREQ_AND_POSITIONS) { + builder.field("omit_term_freq_and_positions", omitTermFreqAndPositions); + } + if (precisionStep != Defaults.PRECISION_STEP) { + builder.field("precision_step", precisionStep); + } if (nullValue != null) { builder.field("null_value", nullValue); } diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/LongFieldMapper.java b/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/LongFieldMapper.java index 25268e1ed33..d9c7dea16ff 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/LongFieldMapper.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/LongFieldMapper.java @@ -204,6 +204,24 @@ public class LongFieldMapper extends NumberFieldMapper { @Override protected void doXContentBody(XContentBuilder builder) throws IOException { super.doXContentBody(builder); + if (index != Defaults.INDEX) { + builder.field("index", index.name().toLowerCase()); + } + if (store != Defaults.STORE) { + builder.field("store", store.name().toLowerCase()); + } + if (termVector != Defaults.TERM_VECTOR) { + builder.field("term_vector", termVector.name().toLowerCase()); + } + if (omitNorms != Defaults.OMIT_NORMS) { + builder.field("omit_norms", omitNorms); + } + if (omitTermFreqAndPositions != Defaults.OMIT_TERM_FREQ_AND_POSITIONS) { + builder.field("omit_term_freq_and_positions", omitTermFreqAndPositions); + } + if (precisionStep != Defaults.PRECISION_STEP) { + builder.field("precision_step", precisionStep); + } if (nullValue != null) { builder.field("null_value", nullValue); } diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/MultiFieldMapper.java b/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/MultiFieldMapper.java index 824c2fefb0e..e81ae7741f9 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/MultiFieldMapper.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/MultiFieldMapper.java @@ -266,7 +266,9 @@ public class MultiFieldMapper implements XContentMapper, IncludeInAllMapper { @Override public void toXContent(XContentBuilder builder, Params params) throws IOException { builder.startObject(name); builder.field("type", CONTENT_TYPE); - builder.field("path", pathType.name().toLowerCase()); + if (pathType != Defaults.PATH_TYPE) { + builder.field("path", pathType.name().toLowerCase()); + } builder.startObject("fields"); if (defaultMapper != null) { diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/NumberFieldMapper.java b/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/NumberFieldMapper.java index 3f34848c307..3b1eacf25ee 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/NumberFieldMapper.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/NumberFieldMapper.java @@ -28,7 +28,6 @@ import org.apache.lucene.search.Query; import org.apache.lucene.util.NumericUtils; import org.elasticsearch.common.thread.ThreadLocals; import org.elasticsearch.common.trove.TIntObjectHashMap; -import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.index.analysis.NamedAnalyzer; import org.elasticsearch.index.field.data.FieldDataType; import org.elasticsearch.index.mapper.MergeMappingException; @@ -166,16 +165,11 @@ public abstract class NumberFieldMapper extends AbstractFieldM } } - @Override protected void doXContentBody(XContentBuilder builder) throws IOException { - super.doXContentBody(builder); - builder.field("precision_step", precisionStep); - } - @Override public abstract FieldDataType fieldDataType(); /** - * Removes a cached numeric token stream. The stream will be returned to the cahed once it is used - * sicne it implements the end method. + * Removes a cached numeric token stream. The stream will be returned to the cached once it is used + * since it implements the end method. */ protected CachedNumericTokenStream popCachedStream(int precisionStep) { Deque deque = cachedStreams.get().get().get(precisionStep); diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/ObjectMapper.java b/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/ObjectMapper.java index 860edfc7283..a9e1061e058 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/ObjectMapper.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/ObjectMapper.java @@ -551,10 +551,18 @@ public class ObjectMapper implements XContentMapper, IncludeInAllMapper { public void toXContent(XContentBuilder builder, Params params, XContentMapper... additionalMappers) throws IOException { builder.startObject(name); - builder.field("type", CONTENT_TYPE); - builder.field("dynamic", dynamic); - builder.field("enabled", enabled); - builder.field("path", pathType.name().toLowerCase()); + if (mappers.isEmpty()) { // only write the object content type if there are no properties, otherwise, it is automatically detected + builder.field("type", CONTENT_TYPE); + } + if (dynamic != Defaults.DYNAMIC) { + builder.field("dynamic", dynamic); + } + if (enabled != Defaults.ENABLED) { + builder.field("enabled", enabled); + } + if (pathType != Defaults.PATH_TYPE) { + builder.field("path", pathType.name().toLowerCase()); + } if (includeInAll != null) { builder.field("include_in_all", includeInAll); } diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/RootObjectMapper.java b/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/RootObjectMapper.java index 54df66578a5..51e7c890e50 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/RootObjectMapper.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/RootObjectMapper.java @@ -93,14 +93,17 @@ public class RootObjectMapper extends ObjectMapper { @Override protected ObjectMapper createMapper(String name, boolean enabled, boolean dynamic, ContentPath.Type pathType, Map mappers) { + FormatDateTimeFormatter[] dates = null; if (dateTimeFormatters == null) { - dateTimeFormatters = newArrayList(); + dates = new FormatDateTimeFormatter[0]; } else if (dateTimeFormatters.isEmpty()) { // add the default one - dateTimeFormatters.addAll(newArrayList(Defaults.DATE_TIME_FORMATTERS)); + dates = Defaults.DATE_TIME_FORMATTERS; + } else { + dates = dateTimeFormatters.toArray(new FormatDateTimeFormatter[dateTimeFormatters.size()]); } return new RootObjectMapper(name, enabled, dynamic, pathType, mappers, - dateTimeFormatters.toArray(new FormatDateTimeFormatter[dateTimeFormatters.size()]), + dates, dynamicTemplates.toArray(new DynamicTemplate[dynamicTemplates.size()])); } } @@ -206,12 +209,14 @@ public class RootObjectMapper extends ObjectMapper { } @Override protected void doXContent(XContentBuilder builder, Params params) throws IOException { - if (dateTimeFormatters.length > 0) { - builder.startArray("date_formats"); - for (FormatDateTimeFormatter dateTimeFormatter : dateTimeFormatters) { - builder.value(dateTimeFormatter.format()); + if (dateTimeFormatters != Defaults.DATE_TIME_FORMATTERS) { + if (dateTimeFormatters.length > 0) { + builder.startArray("date_formats"); + for (FormatDateTimeFormatter dateTimeFormatter : dateTimeFormatters) { + builder.value(dateTimeFormatter.format()); + } + builder.endArray(); } - builder.endArray(); } if (dynamicTemplates != null && dynamicTemplates.length > 0) { diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/ShortFieldMapper.java b/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/ShortFieldMapper.java index 68e39285acf..b04678f5ca5 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/ShortFieldMapper.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/ShortFieldMapper.java @@ -204,6 +204,24 @@ public class ShortFieldMapper extends NumberFieldMapper { @Override protected void doXContentBody(XContentBuilder builder) throws IOException { super.doXContentBody(builder); + if (index != Defaults.INDEX) { + builder.field("index", index.name().toLowerCase()); + } + if (store != Defaults.STORE) { + builder.field("store", store.name().toLowerCase()); + } + if (termVector != Defaults.TERM_VECTOR) { + builder.field("term_vector", termVector.name().toLowerCase()); + } + if (omitNorms != Defaults.OMIT_NORMS) { + builder.field("omit_norms", omitNorms); + } + if (omitTermFreqAndPositions != Defaults.OMIT_TERM_FREQ_AND_POSITIONS) { + builder.field("omit_term_freq_and_positions", omitTermFreqAndPositions); + } + if (precisionStep != Defaults.PRECISION_STEP) { + builder.field("precision_step", precisionStep); + } if (nullValue != null) { builder.field("null_value", nullValue); } diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/SourceFieldMapper.java b/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/SourceFieldMapper.java index f407dc837c8..e68653d2cd7 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/SourceFieldMapper.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/SourceFieldMapper.java @@ -168,9 +168,14 @@ public class SourceFieldMapper extends AbstractFieldMapper implements or } @Override public void toXContent(XContentBuilder builder, Params params) throws IOException { + // all are defaults, no need to write it at all + if (enabled == Defaults.ENABLED && compress == null) { + return; + } builder.startObject(contentType()); - builder.field("name", name()); - builder.field("enabled", enabled); + if (enabled != Defaults.ENABLED) { + builder.field("enabled", enabled); + } if (compress != null) { builder.field("compress", compress); } diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/StringFieldMapper.java b/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/StringFieldMapper.java index 6451d5757de..984f08871f5 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/StringFieldMapper.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/StringFieldMapper.java @@ -166,6 +166,21 @@ public class StringFieldMapper extends AbstractFieldMapper implements In @Override protected void doXContentBody(XContentBuilder builder) throws IOException { super.doXContentBody(builder); + if (index != Defaults.INDEX) { + builder.field("index", index.name().toLowerCase()); + } + if (store != Defaults.STORE) { + builder.field("store", store.name().toLowerCase()); + } + if (termVector != Defaults.TERM_VECTOR) { + builder.field("term_vector", termVector.name().toLowerCase()); + } + if (omitNorms != Defaults.OMIT_NORMS) { + builder.field("omit_norms", omitNorms); + } + if (omitTermFreqAndPositions != Defaults.OMIT_TERM_FREQ_AND_POSITIONS) { + builder.field("omit_term_freq_and_positions", omitTermFreqAndPositions); + } if (nullValue != null) { builder.field("null_value", nullValue); } diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/TypeFieldMapper.java b/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/TypeFieldMapper.java index 961999c6b2c..113845dcfe7 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/TypeFieldMapper.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/TypeFieldMapper.java @@ -110,8 +110,14 @@ public class TypeFieldMapper extends AbstractFieldMapper implements org. } @Override public void toXContent(XContentBuilder builder, Params params) throws IOException { + // if all are defaults, no sense to write it at all + if (store == Defaults.STORE) { + return; + } builder.startObject(CONTENT_TYPE); - builder.field("store", store.name().toLowerCase()); + if (store != Defaults.STORE) { + builder.field("store", store.name().toLowerCase()); + } builder.endObject(); } diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/geo/GeoPointFieldMapper.java b/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/geo/GeoPointFieldMapper.java index 192b9d61726..ea5a741e843 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/geo/GeoPointFieldMapper.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/geo/GeoPointFieldMapper.java @@ -66,19 +66,22 @@ public class GeoPointFieldMapper implements XContentMapper, ArrayValueMapperPars public static class Defaults { public static final ContentPath.Type PATH_TYPE = ContentPath.Type.FULL; public static final Field.Store STORE = Field.Store.NO; + public static final boolean ENABLE_LATLON = false; + public static final boolean ENABLE_GEOHASH = false; + public static final int PRECISION = GeoHashUtils.PRECISION; } public static class Builder extends XContentMapper.Builder { private ContentPath.Type pathType = Defaults.PATH_TYPE; - private boolean enableGeoHash = false; + private boolean enableGeoHash = Defaults.ENABLE_GEOHASH; - private boolean enableLatLon = false; + private boolean enableLatLon = Defaults.ENABLE_LATLON; private Integer precisionStep; - private int precision = GeoHashUtils.PRECISION; + private int precision = Defaults.PRECISION; private Field.Store store = Defaults.STORE; @@ -354,11 +357,21 @@ public class GeoPointFieldMapper implements XContentMapper, ArrayValueMapperPars @Override public void toXContent(XContentBuilder builder, Params params) throws IOException { builder.startObject(name); builder.field("type", CONTENT_TYPE); - builder.field("path", pathType.name().toLowerCase()); - builder.field("lat_lon", enableLatLon); - builder.field("geohash", enableGeoHash); - builder.field("store", geoStringMapper.store().name().toLowerCase()); - builder.field("geohash_precision", precision); + if (pathType != Defaults.PATH_TYPE) { + builder.field("path", pathType.name().toLowerCase()); + } + if (enableLatLon != Defaults.ENABLE_LATLON) { + builder.field("lat_lon", enableLatLon); + } + if (enableGeoHash != Defaults.ENABLE_GEOHASH) { + builder.field("geohash", enableGeoHash); + } + if (geoStringMapper.store() != Defaults.STORE) { + builder.field("store", geoStringMapper.store().name().toLowerCase()); + } + if (precision != Defaults.PRECISION) { + builder.field("geohash_precision", precision); + } if (precisionStep != null) { builder.field("precision_step", precisionStep); } diff --git a/modules/test/integration/src/test/java/org/elasticsearch/test/integration/indices/settings/UpdateNumberOfReplicasTests.java b/modules/test/integration/src/test/java/org/elasticsearch/test/integration/indices/settings/UpdateNumberOfReplicasTests.java index 501bb007549..41a35a48476 100644 --- a/modules/test/integration/src/test/java/org/elasticsearch/test/integration/indices/settings/UpdateNumberOfReplicasTests.java +++ b/modules/test/integration/src/test/java/org/elasticsearch/test/integration/indices/settings/UpdateNumberOfReplicasTests.java @@ -103,7 +103,7 @@ public class UpdateNumberOfReplicasTests extends AbstractNodesTests { Thread.sleep(200); logger.info("Running Cluster Health"); - clusterHealth = client1.admin().cluster().prepareHealth().setWaitForYellowStatus().execute().actionGet(); + clusterHealth = client1.admin().cluster().prepareHealth().setWaitForYellowStatus().setWaitForActiveShards(10).execute().actionGet(); logger.info("Done Cluster Health, status " + clusterHealth.status()); assertThat(clusterHealth.timedOut(), equalTo(false)); assertThat(clusterHealth.status(), equalTo(ClusterHealthStatus.YELLOW));