Fail automatic string upgrade if the value of `index` is not recognized. #18082
Closes #18062
This commit is contained in:
parent
8e178c4f8e
commit
8bdda49f90
|
@ -29,7 +29,6 @@ import org.apache.lucene.search.RegexpQuery;
|
||||||
import org.apache.lucene.util.BytesRef;
|
import org.apache.lucene.util.BytesRef;
|
||||||
import org.elasticsearch.Version;
|
import org.elasticsearch.Version;
|
||||||
import org.elasticsearch.common.Nullable;
|
import org.elasticsearch.common.Nullable;
|
||||||
import org.elasticsearch.common.Strings;
|
|
||||||
import org.elasticsearch.common.logging.DeprecationLogger;
|
import org.elasticsearch.common.logging.DeprecationLogger;
|
||||||
import org.elasticsearch.common.logging.ESLogger;
|
import org.elasticsearch.common.logging.ESLogger;
|
||||||
import org.elasticsearch.common.logging.Loggers;
|
import org.elasticsearch.common.logging.Loggers;
|
||||||
|
@ -204,6 +203,9 @@ public class StringFieldMapper extends FieldMapper implements AllFieldMapper.Inc
|
||||||
public Mapper.Builder parse(String fieldName, Map<String, Object> node, ParserContext parserContext) throws MapperParsingException {
|
public Mapper.Builder parse(String fieldName, Map<String, Object> node, ParserContext parserContext) throws MapperParsingException {
|
||||||
if (parserContext.indexVersionCreated().onOrAfter(Version.V_5_0_0_alpha1)) {
|
if (parserContext.indexVersionCreated().onOrAfter(Version.V_5_0_0_alpha1)) {
|
||||||
final Object index = node.get("index");
|
final Object index = node.get("index");
|
||||||
|
if (Arrays.asList(null, "no", "not_analyzed", "analyzed").contains(index) == false) {
|
||||||
|
throw new IllegalArgumentException("Can't parse [index] value [" + index + "] for field [" + fieldName + "], expected [no], [not_analyzed] or [analyzed]");
|
||||||
|
}
|
||||||
final boolean keyword = index != null && "analyzed".equals(index) == false;
|
final boolean keyword = index != null && "analyzed".equals(index) == false;
|
||||||
|
|
||||||
// Automatically upgrade simple mappings for ease of upgrade, otherwise fail
|
// Automatically upgrade simple mappings for ease of upgrade, otherwise fail
|
||||||
|
@ -283,7 +285,7 @@ public class StringFieldMapper extends FieldMapper implements AllFieldMapper.Inc
|
||||||
node.put("index", false);
|
node.put("index", false);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
throw new IllegalArgumentException("Can't parse [index] value [" + index + "] for field [" + fieldName + "], expected [true], [false], [no], [not_analyzed] or [analyzed]");
|
throw new IllegalArgumentException("Can't parse [index] value [" + index + "] for field [" + fieldName + "], expected [no], [not_analyzed] or [analyzed]");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
final Object fielddataObject = node.get("fielddata");
|
final Object fielddataObject = node.get("fielddata");
|
||||||
|
|
|
@ -103,6 +103,22 @@ public class StringMappingUpgradeTests extends ESSingleNodeTestCase {
|
||||||
assertEquals(IndexOptions.NONE, field.fieldType().indexOptions());
|
assertEquals(IndexOptions.NONE, field.fieldType().indexOptions());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testIllegalIndexValue() throws IOException {
|
||||||
|
IndexService indexService = createIndex("test");
|
||||||
|
DocumentMapperParser parser = indexService.mapperService().documentMapperParser();
|
||||||
|
String mapping = XContentFactory.jsonBuilder().startObject().startObject("type")
|
||||||
|
.startObject("properties")
|
||||||
|
.startObject("field")
|
||||||
|
.field("type", "string")
|
||||||
|
.field("index", false)
|
||||||
|
.endObject()
|
||||||
|
.endObject() .endObject().endObject().string();
|
||||||
|
IllegalArgumentException e = expectThrows(IllegalArgumentException.class,
|
||||||
|
() -> parser.parse("type", new CompressedXContent(mapping)));
|
||||||
|
assertThat(e.getMessage(),
|
||||||
|
containsString("Can't parse [index] value [false] for field [field], expected [no], [not_analyzed] or [analyzed]"));
|
||||||
|
}
|
||||||
|
|
||||||
public void testNotSupportedUpgrade() throws IOException {
|
public void testNotSupportedUpgrade() throws IOException {
|
||||||
IndexService indexService = createIndex("test");
|
IndexService indexService = createIndex("test");
|
||||||
DocumentMapperParser parser = indexService.mapperService().documentMapperParser();
|
DocumentMapperParser parser = indexService.mapperService().documentMapperParser();
|
||||||
|
|
Loading…
Reference in New Issue