From 93b04fb7bd9731b806de297650e734cc923727d7 Mon Sep 17 00:00:00 2001 From: Jim Ferenczi Date: Mon, 24 Jul 2017 13:07:19 +0200 Subject: [PATCH] The default _parent field should not try to load global ordinals (#25851) The default _parent field tries to load global ordinals because it is created with eager_global_ordinals=true. This leads to an IllegalStateException because this field does not have doc_values. This change explicitely sets eager_global_ordinals to false in order to avoid the ISE on startup. Fixes #25849 --- .../org/elasticsearch/index/mapper/ParentFieldMapper.java | 4 +++- .../elasticsearch/index/mapper/ParentFieldMapperTests.java | 2 ++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/org/elasticsearch/index/mapper/ParentFieldMapper.java b/core/src/main/java/org/elasticsearch/index/mapper/ParentFieldMapper.java index 482935437ed..f984871fbed 100644 --- a/core/src/main/java/org/elasticsearch/index/mapper/ParentFieldMapper.java +++ b/core/src/main/java/org/elasticsearch/index/mapper/ParentFieldMapper.java @@ -65,7 +65,7 @@ public class ParentFieldMapper extends MetadataFieldMapper { FIELD_TYPE.setIndexOptions(IndexOptions.NONE); FIELD_TYPE.setHasDocValues(true); FIELD_TYPE.setDocValuesType(DocValuesType.SORTED); - FIELD_TYPE.setEagerGlobalOrdinals(true); + FIELD_TYPE.setEagerGlobalOrdinals(false); FIELD_TYPE.freeze(); } } @@ -78,6 +78,8 @@ public class ParentFieldMapper extends MetadataFieldMapper { public Builder(String documentType) { super(Defaults.NAME, new ParentFieldType(Defaults.FIELD_TYPE, documentType), Defaults.FIELD_TYPE); + // Defaults to true + eagerGlobalOrdinals(true); this.documentType = documentType; builder = this; } diff --git a/core/src/test/java/org/elasticsearch/index/mapper/ParentFieldMapperTests.java b/core/src/test/java/org/elasticsearch/index/mapper/ParentFieldMapperTests.java index 935562a2bc4..d7d94786938 100644 --- a/core/src/test/java/org/elasticsearch/index/mapper/ParentFieldMapperTests.java +++ b/core/src/test/java/org/elasticsearch/index/mapper/ParentFieldMapperTests.java @@ -124,6 +124,8 @@ public class ParentFieldMapperTests extends ESSingleNodeTestCase { Set allFields = new HashSet<>(mapperService.simpleMatchToIndexNames("*")); assertTrue(allFields.contains("_parent")); assertFalse(allFields.contains("_parent#null")); + MappedFieldType fieldType = mapperService.fullName("_parent"); + assertFalse(fieldType.eagerGlobalOrdinals()); } private static int getNumberOfFieldWithParentPrefix(ParseContext.Document doc) {