diff --git a/server/src/main/java/org/elasticsearch/search/lookup/LeafDocLookup.java b/server/src/main/java/org/elasticsearch/search/lookup/LeafDocLookup.java index 4beb2507d7f25..17518b2f1f60f 100644 --- a/server/src/main/java/org/elasticsearch/search/lookup/LeafDocLookup.java +++ b/server/src/main/java/org/elasticsearch/search/lookup/LeafDocLookup.java @@ -18,9 +18,11 @@ */ package org.elasticsearch.search.lookup; +import org.apache.logging.log4j.LogManager; import org.apache.lucene.index.LeafReaderContext; import org.elasticsearch.ExceptionsHelper; import org.elasticsearch.common.Nullable; +import org.elasticsearch.common.logging.DeprecationLogger; import org.elasticsearch.index.fielddata.IndexFieldData; import org.elasticsearch.index.fielddata.ScriptDocValues; import org.elasticsearch.index.mapper.MappedFieldType; @@ -38,6 +40,12 @@ public class LeafDocLookup implements Map> { + private static final DeprecationLogger DEPRECATION_LOGGER + = new DeprecationLogger(LogManager.getLogger(LeafDocLookup.class)); + static final String TYPES_DEPRECATION_KEY = "type-field-doc-lookup"; + static final String TYPES_DEPRECATION_MESSAGE = + "[types removal] Looking up doc types in scripts is deprecated."; + private final Map> localCacheFieldData = new HashMap<>(4); private final MapperService mapperService; @@ -72,6 +80,10 @@ public void setDocument(int docId) { @Override public ScriptDocValues get(Object key) { + // deprecate _type + if ("_type".equals(key)) { + DEPRECATION_LOGGER.deprecatedAndMaybeLog(TYPES_DEPRECATION_KEY, TYPES_DEPRECATION_MESSAGE); + } // assume its a string... String fieldName = key.toString(); ScriptDocValues scriptValues = localCacheFieldData.get(fieldName); diff --git a/server/src/test/java/org/elasticsearch/search/lookup/LeafDocLookupTests.java b/server/src/test/java/org/elasticsearch/search/lookup/LeafDocLookupTests.java index dfdbef1c3d539..fca61bf2564b9 100644 --- a/server/src/test/java/org/elasticsearch/search/lookup/LeafDocLookupTests.java +++ b/server/src/test/java/org/elasticsearch/search/lookup/LeafDocLookupTests.java @@ -26,6 +26,7 @@ import org.elasticsearch.test.ESTestCase; import org.junit.Before; +import static org.elasticsearch.search.lookup.LeafDocLookup.TYPES_DEPRECATION_MESSAGE; import static org.mockito.AdditionalAnswers.returnsFirstArg; import static org.mockito.Matchers.anyObject; import static org.mockito.Mockito.doReturn; @@ -45,6 +46,7 @@ public void setUp() throws Exception { when(fieldType.valueForDisplay(anyObject())).then(returnsFirstArg()); MapperService mapperService = mock(MapperService.class); + when(mapperService.fullName("_type")).thenReturn(fieldType); when(mapperService.fullName("field")).thenReturn(fieldType); when(mapperService.fullName("alias")).thenReturn(fieldType); @@ -72,4 +74,10 @@ public void testLookupWithFieldAlias() { ScriptDocValues fetchedDocValues = docLookup.get("alias"); assertEquals(docValues, fetchedDocValues); } + + public void testTypesDeprecation() { + ScriptDocValues fetchedDocValues = docLookup.get("_type"); + assertEquals(docValues, fetchedDocValues); + assertWarnings(TYPES_DEPRECATION_MESSAGE); + } }