From 6be2c7fc8fc0ba100ccc383c6926143603cf1157 Mon Sep 17 00:00:00 2001 From: Shay Banon Date: Wed, 23 Nov 2011 09:04:28 +0200 Subject: [PATCH] Multi field mapper with more than one extra mapping can cause endless re-sync'ing of mapping between nodes, closes #1487. --- .../index/mapper/multifield/MultiFieldMapper.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/multifield/MultiFieldMapper.java b/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/multifield/MultiFieldMapper.java index 4b4fc67bf61fd..0c5f5327d1a7e 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/multifield/MultiFieldMapper.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/multifield/MultiFieldMapper.java @@ -39,6 +39,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.TreeMap; import static org.elasticsearch.common.collect.Lists.*; import static org.elasticsearch.common.collect.MapBuilder.*; @@ -305,8 +306,16 @@ public ImmutableMap mappers() { if (defaultMapper != null) { defaultMapper.toXContent(builder, params); } - for (Mapper mapper : mappers.values()) { - mapper.toXContent(builder, params); + if (mappers.size() <= 1) { + for (Mapper mapper : mappers.values()) { + mapper.toXContent(builder, params); + } + } else { + // sort the mappers (by name) if there is more than one mapping + TreeMap sortedMappers = new TreeMap(mappers); + for (Mapper mapper : sortedMappers.values()) { + mapper.toXContent(builder, params); + } } builder.endObject();