diff --git a/modules/percolator/src/main/java/org/elasticsearch/percolator/PercolateQueryBuilder.java b/modules/percolator/src/main/java/org/elasticsearch/percolator/PercolateQueryBuilder.java index 734b5e72da5a7..353451f596bcc 100644 --- a/modules/percolator/src/main/java/org/elasticsearch/percolator/PercolateQueryBuilder.java +++ b/modules/percolator/src/main/java/org/elasticsearch/percolator/PercolateQueryBuilder.java @@ -466,7 +466,6 @@ protected Query doToQuery(QueryShardContext context) throws IOException { final List docs = new ArrayList<>(); final DocumentMapper docMapper; final MapperService mapperService = context.getMapperService(); - String type = mapperService.documentMapper().type(); docMapper = mapperService.documentMapper(); for (BytesReference document : documents) { docs.add(docMapper.parse(new SourceToParse(context.index().getName(), "_temp_id", document, documentXContentType))); diff --git a/server/src/main/java/org/elasticsearch/index/engine/Engine.java b/server/src/main/java/org/elasticsearch/index/engine/Engine.java index c4ed3a7c4c2ec..4c2490d27abf3 100644 --- a/server/src/main/java/org/elasticsearch/index/engine/Engine.java +++ b/server/src/main/java/org/elasticsearch/index/engine/Engine.java @@ -59,7 +59,7 @@ import org.elasticsearch.common.unit.TimeValue; import org.elasticsearch.common.util.concurrent.ReleasableLock; import org.elasticsearch.index.VersionType; -import org.elasticsearch.index.mapper.MapperService; +import org.elasticsearch.index.mapper.MappedFieldType; import org.elasticsearch.index.mapper.Mapping; import org.elasticsearch.index.mapper.ParseContext.Document; import org.elasticsearch.index.mapper.ParsedDocument; @@ -705,7 +705,7 @@ public enum SearcherScope { * Creates a new history snapshot from Lucene for reading operations whose seqno in the requesting seqno range (both inclusive). * This feature requires soft-deletes enabled. If soft-deletes are disabled, this method will throw an {@link IllegalStateException}. */ - public abstract Translog.Snapshot newChangesSnapshot(String source, MapperService mapperService, + public abstract Translog.Snapshot newChangesSnapshot(String source, Function fieldTypeLookup, long fromSeqNo, long toSeqNo, boolean requiredFullRange) throws IOException; /** diff --git a/server/src/main/java/org/elasticsearch/index/engine/InternalEngine.java b/server/src/main/java/org/elasticsearch/index/engine/InternalEngine.java index 0b4c730ee10eb..336e60a3ce427 100644 --- a/server/src/main/java/org/elasticsearch/index/engine/InternalEngine.java +++ b/server/src/main/java/org/elasticsearch/index/engine/InternalEngine.java @@ -74,7 +74,7 @@ import org.elasticsearch.index.VersionType; import org.elasticsearch.index.fieldvisitor.IdOnlyFieldVisitor; import org.elasticsearch.index.mapper.IdFieldMapper; -import org.elasticsearch.index.mapper.MapperService; +import org.elasticsearch.index.mapper.MappedFieldType; import org.elasticsearch.index.mapper.ParseContext; import org.elasticsearch.index.mapper.ParsedDocument; import org.elasticsearch.index.mapper.SeqNoFieldMapper; @@ -113,6 +113,7 @@ import java.util.concurrent.locks.ReentrantLock; import java.util.function.BiConsumer; import java.util.function.BiFunction; +import java.util.function.Function; import java.util.function.LongConsumer; import java.util.function.LongSupplier; import java.util.stream.Collectors; @@ -2457,14 +2458,14 @@ long getNumDocUpdates() { } @Override - public Translog.Snapshot newChangesSnapshot(String source, MapperService mapperService, + public Translog.Snapshot newChangesSnapshot(String source, Function fieldTypeLookup, long fromSeqNo, long toSeqNo, boolean requiredFullRange) throws IOException { ensureOpen(); refreshIfNeeded(source, toSeqNo); Searcher searcher = acquireSearcher(source, SearcherScope.INTERNAL); try { LuceneChangesSnapshot snapshot = new LuceneChangesSnapshot( - searcher, mapperService, LuceneChangesSnapshot.DEFAULT_BATCH_SIZE, fromSeqNo, toSeqNo, requiredFullRange); + searcher, fieldTypeLookup, LuceneChangesSnapshot.DEFAULT_BATCH_SIZE, fromSeqNo, toSeqNo, requiredFullRange); searcher = null; return snapshot; } catch (Exception e) { diff --git a/server/src/main/java/org/elasticsearch/index/engine/LuceneChangesSnapshot.java b/server/src/main/java/org/elasticsearch/index/engine/LuceneChangesSnapshot.java index d1f6ad0000718..85bcb721089de 100644 --- a/server/src/main/java/org/elasticsearch/index/engine/LuceneChangesSnapshot.java +++ b/server/src/main/java/org/elasticsearch/index/engine/LuceneChangesSnapshot.java @@ -37,7 +37,7 @@ import org.elasticsearch.common.lucene.search.Queries; import org.elasticsearch.core.internal.io.IOUtils; import org.elasticsearch.index.fieldvisitor.FieldsVisitor; -import org.elasticsearch.index.mapper.MapperService; +import org.elasticsearch.index.mapper.MappedFieldType; import org.elasticsearch.index.mapper.SeqNoFieldMapper; import org.elasticsearch.index.mapper.SourceFieldMapper; import org.elasticsearch.index.translog.Translog; @@ -47,6 +47,7 @@ import java.util.Comparator; import java.util.List; import java.util.concurrent.atomic.AtomicBoolean; +import java.util.function.Function; /** * A {@link Translog.Snapshot} from changes in a Lucene index @@ -61,7 +62,7 @@ final class LuceneChangesSnapshot implements Translog.Snapshot { private final boolean requiredFullRange; private final IndexSearcher indexSearcher; - private final MapperService mapperService; + private final Function fieldTypeLookup; private int docIndex = 0; private final int totalHits; private ScoreDoc[] scoreDocs; @@ -72,13 +73,13 @@ final class LuceneChangesSnapshot implements Translog.Snapshot { * Creates a new "translog" snapshot from Lucene for reading operations whose seq# in the specified range. * * @param engineSearcher the internal engine searcher which will be taken over if the snapshot is opened successfully - * @param mapperService the mapper service which will be mainly used to resolve the document's type and uid + * @param fieldTypeLookup the lookup function used to resolve field types by name * @param searchBatchSize the number of documents should be returned by each search * @param fromSeqNo the min requesting seq# - inclusive * @param toSeqNo the maximum requesting seq# - inclusive * @param requiredFullRange if true, the snapshot will strictly check for the existence of operations between fromSeqNo and toSeqNo */ - LuceneChangesSnapshot(Engine.Searcher engineSearcher, MapperService mapperService, int searchBatchSize, + LuceneChangesSnapshot(Engine.Searcher engineSearcher, Function fieldTypeLookup, int searchBatchSize, long fromSeqNo, long toSeqNo, boolean requiredFullRange) throws IOException { if (fromSeqNo < 0 || toSeqNo < 0 || fromSeqNo > toSeqNo) { throw new IllegalArgumentException("Invalid range; from_seqno [" + fromSeqNo + "], to_seqno [" + toSeqNo + "]"); @@ -92,7 +93,7 @@ final class LuceneChangesSnapshot implements Translog.Snapshot { IOUtils.close(engineSearcher); } }; - this.mapperService = mapperService; + this.fieldTypeLookup = fieldTypeLookup; final long requestingSize = (toSeqNo - fromSeqNo) == Long.MAX_VALUE ? Long.MAX_VALUE : (toSeqNo - fromSeqNo + 1L); this.searchBatchSize = requestingSize < searchBatchSize ? Math.toIntExact(requestingSize) : searchBatchSize; this.fromSeqNo = fromSeqNo; @@ -234,7 +235,7 @@ private Translog.Operation readDocAsOp(int docIndex) throws IOException { SourceFieldMapper.NAME; final FieldsVisitor fields = new FieldsVisitor(true, sourceField); leaf.reader().document(segmentDocID, fields); - fields.postProcess(mapperService); + fields.postProcess(fieldTypeLookup); final Translog.Operation op; final boolean isTombstone = parallelArray.isTombStone[docIndex]; diff --git a/server/src/main/java/org/elasticsearch/index/engine/ReadOnlyEngine.java b/server/src/main/java/org/elasticsearch/index/engine/ReadOnlyEngine.java index 482d043bd7159..4bc697e018ee4 100644 --- a/server/src/main/java/org/elasticsearch/index/engine/ReadOnlyEngine.java +++ b/server/src/main/java/org/elasticsearch/index/engine/ReadOnlyEngine.java @@ -31,7 +31,7 @@ import org.elasticsearch.common.lucene.index.ElasticsearchDirectoryReader; import org.elasticsearch.common.util.concurrent.ReleasableLock; import org.elasticsearch.core.internal.io.IOUtils; -import org.elasticsearch.index.mapper.MapperService; +import org.elasticsearch.index.mapper.MappedFieldType; import org.elasticsearch.index.seqno.SeqNoStats; import org.elasticsearch.index.seqno.SequenceNumbers; import org.elasticsearch.index.store.Store; @@ -291,8 +291,8 @@ public Closeable acquireHistoryRetentionLock() { } @Override - public Translog.Snapshot newChangesSnapshot(String source, MapperService mapperService, long fromSeqNo, long toSeqNo, - boolean requiredFullRange) { + public Translog.Snapshot newChangesSnapshot(String source, Function fieldTypeLookup, long fromSeqNo, + long toSeqNo, boolean requiredFullRange) { return newEmptySnapshot(); } diff --git a/server/src/main/java/org/elasticsearch/index/fieldvisitor/FieldsVisitor.java b/server/src/main/java/org/elasticsearch/index/fieldvisitor/FieldsVisitor.java index ae6bfb7c84571..1c4305317f360 100644 --- a/server/src/main/java/org/elasticsearch/index/fieldvisitor/FieldsVisitor.java +++ b/server/src/main/java/org/elasticsearch/index/fieldvisitor/FieldsVisitor.java @@ -26,7 +26,6 @@ import org.elasticsearch.index.mapper.IdFieldMapper; import org.elasticsearch.index.mapper.IgnoredFieldMapper; import org.elasticsearch.index.mapper.MappedFieldType; -import org.elasticsearch.index.mapper.MapperService; import org.elasticsearch.index.mapper.RoutingFieldMapper; import org.elasticsearch.index.mapper.SourceFieldMapper; import org.elasticsearch.index.mapper.Uid; @@ -38,6 +37,7 @@ import java.util.List; import java.util.Map; import java.util.Set; +import java.util.function.Function; import static java.util.Collections.emptyMap; import static java.util.Collections.unmodifiableSet; @@ -87,9 +87,9 @@ public Status needsField(FieldInfo fieldInfo) { : Status.NO; } - public void postProcess(MapperService mapperService) { + public final void postProcess(Function fieldTypeLookup) { for (Map.Entry> entry : fields().entrySet()) { - MappedFieldType fieldType = mapperService.fieldType(entry.getKey()); + MappedFieldType fieldType = fieldTypeLookup.apply(entry.getKey()); if (fieldType == null) { throw new IllegalStateException("Field [" + entry.getKey() + "] exists in the index but not in mappings"); diff --git a/server/src/main/java/org/elasticsearch/index/get/ShardGetService.java b/server/src/main/java/org/elasticsearch/index/get/ShardGetService.java index bd74e3b4ad32d..7ce3fd8ba581a 100644 --- a/server/src/main/java/org/elasticsearch/index/get/ShardGetService.java +++ b/server/src/main/java/org/elasticsearch/index/get/ShardGetService.java @@ -274,7 +274,7 @@ private GetResult innerGetLoadFromStoredFields(String id, String[] storedFields, // put stored fields into result objects if (!fieldVisitor.fields().isEmpty()) { - fieldVisitor.postProcess(mapperService); + fieldVisitor.postProcess(mapperService::fieldType); documentFields = new HashMap<>(); metadataFields = new HashMap<>(); for (Map.Entry> entry : fieldVisitor.fields().entrySet()) { diff --git a/server/src/main/java/org/elasticsearch/index/query/ExistsQueryBuilder.java b/server/src/main/java/org/elasticsearch/index/query/ExistsQueryBuilder.java index e7a3e69b31e65..61c922e23d037 100644 --- a/server/src/main/java/org/elasticsearch/index/query/ExistsQueryBuilder.java +++ b/server/src/main/java/org/elasticsearch/index/query/ExistsQueryBuilder.java @@ -165,7 +165,7 @@ public static Query newFilter(QueryShardContext context, String fieldPattern, bo } private static Query newFieldExistsQuery(QueryShardContext context, String field) { - MappedFieldType fieldType = context.getMapperService().fieldType(field); + MappedFieldType fieldType = context.fieldMapper(field); if (fieldType == null) { // The field does not exist as a leaf but could be an object so // check for an object mapper @@ -182,7 +182,7 @@ private static Query newObjectFieldExistsQuery(QueryShardContext context, String BooleanQuery.Builder booleanQuery = new BooleanQuery.Builder(); Collection fields = context.simpleMatchToIndexNames(objField + ".*"); for (String field : fields) { - Query existsQuery = context.getMapperService().fieldType(field).existsQuery(context); + Query existsQuery = context.fieldMapper(field).existsQuery(context); booleanQuery.add(existsQuery, Occur.SHOULD); } return new ConstantScoreQuery(booleanQuery.build()); @@ -194,7 +194,7 @@ private static Query newObjectFieldExistsQuery(QueryShardContext context, String */ private static Collection getMappedField(QueryShardContext context, String fieldPattern) { final FieldNamesFieldMapper.FieldNamesFieldType fieldNamesFieldType = (FieldNamesFieldMapper.FieldNamesFieldType) context - .getMapperService().fieldType(FieldNamesFieldMapper.NAME); + .fieldMapper(FieldNamesFieldMapper.NAME); if (fieldNamesFieldType == null) { // can only happen when no types exist, so no docs exist either @@ -212,7 +212,7 @@ private static Collection getMappedField(QueryShardContext context, Stri if (fields.size() == 1) { String field = fields.iterator().next(); - MappedFieldType fieldType = context.getMapperService().fieldType(field); + MappedFieldType fieldType = context.fieldMapper(field); if (fieldType == null) { // The field does not exist as a leaf but could be an object so // check for an object mapper diff --git a/server/src/main/java/org/elasticsearch/index/query/InnerHitContextBuilder.java b/server/src/main/java/org/elasticsearch/index/query/InnerHitContextBuilder.java index add896d68f81c..165b66fde22d6 100644 --- a/server/src/main/java/org/elasticsearch/index/query/InnerHitContextBuilder.java +++ b/server/src/main/java/org/elasticsearch/index/query/InnerHitContextBuilder.java @@ -89,12 +89,11 @@ protected void setupInnerHitsContext(QueryShardContext queryShardContext, innerHitsContext.storedFieldsContext(innerHitBuilder.getStoredFieldsContext()); } if (innerHitBuilder.getDocValueFields() != null) { - FetchDocValuesContext docValuesContext = FetchDocValuesContext.create( - queryShardContext.getMapperService(), innerHitBuilder.getDocValueFields()); + FetchDocValuesContext docValuesContext = FetchDocValuesContext.create(queryShardContext::simpleMatchToIndexNames, + queryShardContext.getIndexSettings().getMaxDocvalueFields(), innerHitBuilder.getDocValueFields()); innerHitsContext.docValuesContext(docValuesContext); } if (innerHitBuilder.getFetchFields() != null) { - String indexName = queryShardContext.index().getName(); FetchFieldsContext fieldsContext = new FetchFieldsContext(innerHitBuilder.getFetchFields()); innerHitsContext.fetchFieldsContext(fieldsContext); } diff --git a/server/src/main/java/org/elasticsearch/index/query/NestedQueryBuilder.java b/server/src/main/java/org/elasticsearch/index/query/NestedQueryBuilder.java index c804b66b47a68..33e96e8ae9f2f 100644 --- a/server/src/main/java/org/elasticsearch/index/query/NestedQueryBuilder.java +++ b/server/src/main/java/org/elasticsearch/index/query/NestedQueryBuilder.java @@ -302,7 +302,8 @@ protected Query doToQuery(QueryShardContext context) throws IOException { // ToParentBlockJoinQuery requires that the inner query only matches documents // in its child space - if (new NestedHelper(context.getMapperService()).mightMatchNonNestedDocs(innerQuery, path)) { + NestedHelper nestedHelper = new NestedHelper(context.getMapperService()::getObjectMapper, context.getMapperService()::fieldType); + if (nestedHelper.mightMatchNonNestedDocs(innerQuery, path)) { innerQuery = Queries.filtered(innerQuery, nestedObjectMapper.nestedTypeFilter()); } diff --git a/server/src/main/java/org/elasticsearch/index/query/QueryShardContext.java b/server/src/main/java/org/elasticsearch/index/query/QueryShardContext.java index dbf64f8710f88..d3460fb36d1b2 100644 --- a/server/src/main/java/org/elasticsearch/index/query/QueryShardContext.java +++ b/server/src/main/java/org/elasticsearch/index/query/QueryShardContext.java @@ -243,7 +243,7 @@ public Analyzer getSearchAnalyzer(MappedFieldType fieldType) { if (fieldType.getTextSearchInfo().getSearchAnalyzer() != null) { return fieldType.getTextSearchInfo().getSearchAnalyzer(); } - return getMapperService().searchAnalyzer(); + return mapperService.searchAnalyzer(); } /** @@ -254,7 +254,7 @@ public Analyzer getSearchQuoteAnalyzer(MappedFieldType fieldType) { if (fieldType.getTextSearchInfo().getSearchQuoteAnalyzer() != null) { return fieldType.getTextSearchInfo().getSearchQuoteAnalyzer(); } - return getMapperService().searchQuoteAnalyzer(); + return mapperService.searchQuoteAnalyzer(); } public ValuesSourceRegistry getValuesSourceRegistry() { @@ -288,7 +288,7 @@ MappedFieldType failIfFieldMappingNotFound(String name, MappedFieldType fieldMap public SearchLookup lookup() { if (this.lookup == null) { this.lookup = new SearchLookup( - getMapperService(), + mapperService, (fieldType, searchLookup) -> indexFieldDataService.apply(fieldType, fullyQualifiedIndex.getName(), searchLookup) ); } @@ -304,7 +304,7 @@ public SearchLookup newFetchLookup() { * Real customization coming soon, I promise! */ return new SearchLookup( - getMapperService(), + mapperService, (fieldType, searchLookup) -> indexFieldDataService.apply(fieldType, fullyQualifiedIndex.getName(), searchLookup) ); } diff --git a/server/src/main/java/org/elasticsearch/index/query/RangeQueryBuilder.java b/server/src/main/java/org/elasticsearch/index/query/RangeQueryBuilder.java index e8482866e7d38..67246ea143a7d 100644 --- a/server/src/main/java/org/elasticsearch/index/query/RangeQueryBuilder.java +++ b/server/src/main/java/org/elasticsearch/index/query/RangeQueryBuilder.java @@ -480,7 +480,7 @@ protected Query doToQuery(QueryShardContext context) throws IOException { * if the {@link FieldNamesFieldMapper} is enabled. */ final FieldNamesFieldMapper.FieldNamesFieldType fieldNamesFieldType = - (FieldNamesFieldMapper.FieldNamesFieldType) context.getMapperService().fieldType(FieldNamesFieldMapper.NAME); + (FieldNamesFieldMapper.FieldNamesFieldType) context.fieldMapper(FieldNamesFieldMapper.NAME); if (fieldNamesFieldType == null) { return new MatchNoDocsQuery("No mappings yet"); } diff --git a/server/src/main/java/org/elasticsearch/index/query/functionscore/FieldValueFactorFunctionBuilder.java b/server/src/main/java/org/elasticsearch/index/query/functionscore/FieldValueFactorFunctionBuilder.java index 2878d818591cb..981bbcae3ff92 100644 --- a/server/src/main/java/org/elasticsearch/index/query/functionscore/FieldValueFactorFunctionBuilder.java +++ b/server/src/main/java/org/elasticsearch/index/query/functionscore/FieldValueFactorFunctionBuilder.java @@ -144,7 +144,7 @@ protected int doHashCode() { @Override protected ScoreFunction doToFunction(QueryShardContext context) { - MappedFieldType fieldType = context.getMapperService().fieldType(field); + MappedFieldType fieldType = context.fieldMapper(field); IndexNumericFieldData fieldData = null; if (fieldType == null) { if(missing == null) { diff --git a/server/src/main/java/org/elasticsearch/index/query/functionscore/RandomScoreFunctionBuilder.java b/server/src/main/java/org/elasticsearch/index/query/functionscore/RandomScoreFunctionBuilder.java index 172f0b6d24df1..7565e5720aa77 100644 --- a/server/src/main/java/org/elasticsearch/index/query/functionscore/RandomScoreFunctionBuilder.java +++ b/server/src/main/java/org/elasticsearch/index/query/functionscore/RandomScoreFunctionBuilder.java @@ -158,11 +158,11 @@ protected ScoreFunction doToFunction(QueryShardContext context) { } else { final MappedFieldType fieldType; if (field != null) { - fieldType = context.getMapperService().fieldType(field); + fieldType = context.fieldMapper(field); } else { deprecationLogger.deprecate("seed_requires_field", "As of version 7.0 Elasticsearch will require that a [field] parameter is provided when a [seed] is set"); - fieldType = context.getMapperService().fieldType(IdFieldMapper.NAME); + fieldType = context.fieldMapper(IdFieldMapper.NAME); } if (fieldType == null) { if (context.getMapperService().documentMapper() == null) { diff --git a/server/src/main/java/org/elasticsearch/index/search/NestedHelper.java b/server/src/main/java/org/elasticsearch/index/search/NestedHelper.java index 4e41002d69b28..6b40aa647b407 100644 --- a/server/src/main/java/org/elasticsearch/index/search/NestedHelper.java +++ b/server/src/main/java/org/elasticsearch/index/search/NestedHelper.java @@ -21,6 +21,7 @@ import org.apache.lucene.index.PrefixCodedTerms; import org.apache.lucene.search.BooleanClause; +import org.apache.lucene.search.BooleanClause.Occur; import org.apache.lucene.search.BooleanQuery; import org.apache.lucene.search.BoostQuery; import org.apache.lucene.search.ConstantScoreQuery; @@ -31,18 +32,21 @@ import org.apache.lucene.search.Query; import org.apache.lucene.search.TermInSetQuery; import org.apache.lucene.search.TermQuery; -import org.apache.lucene.search.BooleanClause.Occur; -import org.elasticsearch.index.mapper.MapperService; +import org.elasticsearch.index.mapper.MappedFieldType; import org.elasticsearch.index.mapper.ObjectMapper; +import java.util.function.Function; + /** Utility class to filter parent and children clauses when building nested * queries. */ public final class NestedHelper { - private final MapperService mapperService; + private final Function objectMapperLookup; + private final Function fieldTypeLookup; - public NestedHelper(MapperService mapperService) { - this.mapperService = mapperService; + public NestedHelper(Function objectMapperLookup, Function fieldTypeLookup) { + this.objectMapperLookup = objectMapperLookup; + this.fieldTypeLookup = fieldTypeLookup; } /** Returns true if the given query might match nested documents. */ @@ -103,12 +107,12 @@ boolean mightMatchNestedDocs(String field) { // we might add a nested filter when it is nor required. return true; } - if (mapperService.fieldType(field) == null) { + if (fieldTypeLookup.apply(field) == null) { // field does not exist return false; } for (String parent = parentObject(field); parent != null; parent = parentObject(parent)) { - ObjectMapper mapper = mapperService.getObjectMapper(parent); + ObjectMapper mapper = objectMapperLookup.apply(parent); if (mapper != null && mapper.nested().isNested()) { return true; } @@ -172,11 +176,11 @@ boolean mightMatchNonNestedDocs(String field, String nestedPath) { // we might add a nested filter when it is nor required. return true; } - if (mapperService.fieldType(field) == null) { + if (fieldTypeLookup.apply(field) == null) { return false; } for (String parent = parentObject(field); parent != null; parent = parentObject(parent)) { - ObjectMapper mapper = mapperService.getObjectMapper(parent); + ObjectMapper mapper = objectMapperLookup.apply(parent); if (mapper!= null && mapper.nested().isNested()) { if (mapper.fullPath().equals(nestedPath)) { // If the mapper does not include in its parent or in the root object then diff --git a/server/src/main/java/org/elasticsearch/index/search/QueryParserHelper.java b/server/src/main/java/org/elasticsearch/index/search/QueryParserHelper.java index fca92dd334b0c..b8e8930ed7c26 100644 --- a/server/src/main/java/org/elasticsearch/index/search/QueryParserHelper.java +++ b/server/src/main/java/org/elasticsearch/index/search/QueryParserHelper.java @@ -125,7 +125,7 @@ static Map resolveMappingField(QueryShardContext context, String fieldName = fieldName + fieldSuffix; } - MappedFieldType fieldType = context.getMapperService().fieldType(fieldName); + MappedFieldType fieldType = context.fieldMapper(fieldName); if (fieldType == null) { continue; } diff --git a/server/src/main/java/org/elasticsearch/index/search/QueryStringQueryParser.java b/server/src/main/java/org/elasticsearch/index/search/QueryStringQueryParser.java index aa384f1453b6e..ce8ce11203993 100644 --- a/server/src/main/java/org/elasticsearch/index/search/QueryStringQueryParser.java +++ b/server/src/main/java/org/elasticsearch/index/search/QueryStringQueryParser.java @@ -624,7 +624,7 @@ private Query getPossiblyAnalyzedPrefixQuery(String field, String termStr, Mappe private Query existsQuery(String fieldName) { final FieldNamesFieldMapper.FieldNamesFieldType fieldNamesFieldType = - (FieldNamesFieldMapper.FieldNamesFieldType) context.getMapperService().fieldType(FieldNamesFieldMapper.NAME); + (FieldNamesFieldMapper.FieldNamesFieldType) context.fieldMapper(FieldNamesFieldMapper.NAME); if (fieldNamesFieldType == null) { return new MatchNoDocsQuery("No mappings yet"); } diff --git a/server/src/main/java/org/elasticsearch/index/shard/IndexShard.java b/server/src/main/java/org/elasticsearch/index/shard/IndexShard.java index be22194512b77..e178e62cce433 100644 --- a/server/src/main/java/org/elasticsearch/index/shard/IndexShard.java +++ b/server/src/main/java/org/elasticsearch/index/shard/IndexShard.java @@ -47,9 +47,6 @@ import org.elasticsearch.action.admin.indices.forcemerge.ForceMergeRequest; import org.elasticsearch.action.admin.indices.upgrade.post.UpgradeRequest; import org.elasticsearch.action.support.replication.PendingReplicationActions; -import org.elasticsearch.index.bulk.stats.BulkOperationListener; -import org.elasticsearch.index.bulk.stats.BulkStats; -import org.elasticsearch.index.bulk.stats.ShardBulkStats; import org.elasticsearch.action.support.replication.ReplicationResponse; import org.elasticsearch.cluster.metadata.IndexMetadata; import org.elasticsearch.cluster.metadata.MappingMetadata; @@ -86,6 +83,9 @@ import org.elasticsearch.index.IndexService; import org.elasticsearch.index.IndexSettings; import org.elasticsearch.index.VersionType; +import org.elasticsearch.index.bulk.stats.BulkOperationListener; +import org.elasticsearch.index.bulk.stats.BulkStats; +import org.elasticsearch.index.bulk.stats.ShardBulkStats; import org.elasticsearch.index.cache.IndexCache; import org.elasticsearch.index.cache.bitset.ShardBitsetFilterCache; import org.elasticsearch.index.cache.request.ShardRequestCache; @@ -1961,7 +1961,8 @@ public long getMinRetainedSeqNo() { */ public Translog.Snapshot newChangesSnapshot(String source, long fromSeqNo, long toSeqNo, boolean requiredFullRange) throws IOException { - return getEngine().newChangesSnapshot(source, mapperService, fromSeqNo, toSeqNo, requiredFullRange); + return getEngine().newChangesSnapshot(source, mapperService == null ? null : mapperService::fieldType, + fromSeqNo, toSeqNo, requiredFullRange); } public List segments(boolean verbose) { diff --git a/server/src/main/java/org/elasticsearch/search/DefaultSearchContext.java b/server/src/main/java/org/elasticsearch/search/DefaultSearchContext.java index 9f8f0abc323ad..b93d0ad143254 100644 --- a/server/src/main/java/org/elasticsearch/search/DefaultSearchContext.java +++ b/server/src/main/java/org/elasticsearch/search/DefaultSearchContext.java @@ -267,9 +267,10 @@ public void preProcess(boolean rewrite) { public Query buildFilteredQuery(Query query) { List filters = new ArrayList<>(); + NestedHelper nestedHelper = new NestedHelper(mapperService()::getObjectMapper, mapperService()::fieldType); if (mapperService().hasNested() - && new NestedHelper(mapperService()).mightMatchNestedDocs(query) - && (aliasFilter == null || new NestedHelper(mapperService()).mightMatchNestedDocs(aliasFilter))) { + && nestedHelper.mightMatchNestedDocs(query) + && (aliasFilter == null || nestedHelper.mightMatchNestedDocs(aliasFilter))) { filters.add(Queries.newNonNestedFilter()); } diff --git a/server/src/main/java/org/elasticsearch/search/SearchService.java b/server/src/main/java/org/elasticsearch/search/SearchService.java index 657dec8090ade..2a284722fb445 100644 --- a/server/src/main/java/org/elasticsearch/search/SearchService.java +++ b/server/src/main/java/org/elasticsearch/search/SearchService.java @@ -963,7 +963,8 @@ private void parseSource(DefaultSearchContext context, SearchSourceBuilder sourc context.fetchSourceContext(source.fetchSource()); } if (source.docValueFields() != null) { - FetchDocValuesContext docValuesContext = FetchDocValuesContext.create(context.mapperService(), source.docValueFields()); + FetchDocValuesContext docValuesContext = FetchDocValuesContext.create(context.mapperService()::simpleMatchToFullName, + context.mapperService().getIndexSettings().getMaxDocvalueFields(), source.docValueFields()); context.docValuesContext(docValuesContext); } if (source.fetchFields() != null) { diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/metrics/TopHitsAggregationBuilder.java b/server/src/main/java/org/elasticsearch/search/aggregations/metrics/TopHitsAggregationBuilder.java index da01b743e8870..9c461b03c3ffb 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/metrics/TopHitsAggregationBuilder.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/metrics/TopHitsAggregationBuilder.java @@ -612,7 +612,7 @@ public BucketCardinality bucketCardinality() { protected TopHitsAggregatorFactory doBuild(QueryShardContext queryShardContext, AggregatorFactory parent, Builder subfactoriesBuilder) throws IOException { long innerResultWindow = from() + size(); - int maxInnerResultWindow = queryShardContext.getMapperService().getIndexSettings().getMaxInnerResultWindow(); + int maxInnerResultWindow = queryShardContext.getIndexSettings().getMaxInnerResultWindow(); if (innerResultWindow > maxInnerResultWindow) { throw new IllegalArgumentException( "Top hits result window is too large, the top hits aggregator [" + name + "]'s from + size must be less " + diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/metrics/TopHitsAggregatorFactory.java b/server/src/main/java/org/elasticsearch/search/aggregations/metrics/TopHitsAggregatorFactory.java index 42197d4277ed2..cdcfe8c664d8c 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/metrics/TopHitsAggregatorFactory.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/metrics/TopHitsAggregatorFactory.java @@ -110,7 +110,8 @@ public Aggregator createInternal(SearchContext searchContext, subSearchContext.storedFieldsContext(storedFieldsContext); } if (docValueFields != null) { - FetchDocValuesContext docValuesContext = FetchDocValuesContext.create(searchContext.mapperService(), docValueFields); + FetchDocValuesContext docValuesContext = FetchDocValuesContext.create(searchContext.mapperService()::simpleMatchToFullName, + searchContext.mapperService().getIndexSettings().getMaxDocvalueFields(), docValueFields); subSearchContext.docValuesContext(docValuesContext); } if (fetchFields != null) { diff --git a/server/src/main/java/org/elasticsearch/search/fetch/FetchPhase.java b/server/src/main/java/org/elasticsearch/search/fetch/FetchPhase.java index 4ca0f9cf290c5..0a063a1ff4474 100644 --- a/server/src/main/java/org/elasticsearch/search/fetch/FetchPhase.java +++ b/server/src/main/java/org/elasticsearch/search/fetch/FetchPhase.java @@ -69,6 +69,7 @@ import java.util.List; import java.util.Map; import java.util.Set; +import java.util.function.Function; import static java.util.Collections.emptyMap; @@ -317,7 +318,7 @@ private HitContext prepareNonNestedHitContext(SearchContext context, return new HitContext(hit, subReaderContext, subDocId, lookup.source(), sharedCache); } else { SearchHit hit; - loadStoredFields(context.mapperService(), fieldReader, fieldsVisitor, subDocId); + loadStoredFields(context::fieldType, fieldReader, fieldsVisitor, subDocId); if (fieldsVisitor.fields().isEmpty() == false) { Map docFields = new HashMap<>(); Map metaFields = new HashMap<>(); @@ -373,7 +374,7 @@ private HitContext prepareNestedHitContext(SearchContext context, } } else { FieldsVisitor rootFieldsVisitor = new FieldsVisitor(needSource); - loadStoredFields(context.mapperService(), storedFieldReader, rootFieldsVisitor, rootDocId); + loadStoredFields(context::fieldType, storedFieldReader, rootFieldsVisitor, rootDocId); rootId = rootFieldsVisitor.id(); if (needSource) { @@ -388,7 +389,7 @@ private HitContext prepareNestedHitContext(SearchContext context, Map metaFields = emptyMap(); if (context.hasStoredFields() && !context.storedFieldsContext().fieldNames().isEmpty()) { FieldsVisitor nestedFieldsVisitor = new CustomFieldsVisitor(storedToRequestedFields.keySet(), false); - loadStoredFields(context.mapperService(), storedFieldReader, nestedFieldsVisitor, nestedDocId); + loadStoredFields(context::fieldType, storedFieldReader, nestedFieldsVisitor, nestedDocId); if (nestedFieldsVisitor.fields().isEmpty() == false) { docFields = new HashMap<>(); metaFields = new HashMap<>(); @@ -522,12 +523,12 @@ private SearchHit.NestedIdentity getInternalNestedIdentity(SearchContext context return nestedIdentity; } - private void loadStoredFields(MapperService mapperService, + private void loadStoredFields(Function fieldTypeLookup, CheckedBiConsumer fieldReader, FieldsVisitor fieldVisitor, int docId) throws IOException { fieldVisitor.reset(); fieldReader.accept(docId, fieldVisitor); - fieldVisitor.postProcess(mapperService); + fieldVisitor.postProcess(fieldTypeLookup); } private static void fillDocAndMetaFields(SearchContext context, FieldsVisitor fieldsVisitor, diff --git a/server/src/main/java/org/elasticsearch/search/fetch/subphase/FetchDocValuesContext.java b/server/src/main/java/org/elasticsearch/search/fetch/subphase/FetchDocValuesContext.java index e207976240d92..129ae0b6a3bf2 100644 --- a/server/src/main/java/org/elasticsearch/search/fetch/subphase/FetchDocValuesContext.java +++ b/server/src/main/java/org/elasticsearch/search/fetch/subphase/FetchDocValuesContext.java @@ -19,11 +19,12 @@ package org.elasticsearch.search.fetch.subphase; import org.elasticsearch.index.IndexSettings; -import org.elasticsearch.index.mapper.MapperService; import java.util.ArrayList; import java.util.Collection; import java.util.List; +import java.util.Set; +import java.util.function.Function; /** * All the required context to pull a field from the doc values. @@ -32,16 +33,16 @@ public class FetchDocValuesContext { private final List fields; - public static FetchDocValuesContext create(MapperService mapperService, + public static FetchDocValuesContext create(Function> simpleMatchToFullName, + int maxAllowedDocvalueFields, List fieldPatterns) { List fields = new ArrayList<>(); for (FieldAndFormat field : fieldPatterns) { - Collection fieldNames = mapperService.simpleMatchToFullName(field.field); + Collection fieldNames = simpleMatchToFullName.apply(field.field); for (String fieldName: fieldNames) { fields.add(new FieldAndFormat(fieldName, field.format)); } } - int maxAllowedDocvalueFields = mapperService.getIndexSettings().getMaxDocvalueFields(); if (fields.size() > maxAllowedDocvalueFields) { throw new IllegalArgumentException( "Trying to retrieve too many docvalue_fields. Must be less than or equal to: [" + maxAllowedDocvalueFields diff --git a/server/src/main/java/org/elasticsearch/search/suggest/completion/CompletionSuggestionBuilder.java b/server/src/main/java/org/elasticsearch/search/suggest/completion/CompletionSuggestionBuilder.java index 32d9eab667d71..afa165e5eb67d 100644 --- a/server/src/main/java/org/elasticsearch/search/suggest/completion/CompletionSuggestionBuilder.java +++ b/server/src/main/java/org/elasticsearch/search/suggest/completion/CompletionSuggestionBuilder.java @@ -292,7 +292,7 @@ public SuggestionContext build(QueryShardContext context) throws IOException { if (shardSize != null) { suggestionContext.setShardSize(shardSize); } - MappedFieldType mappedFieldType = mapperService.fieldType(suggestionContext.getField()); + MappedFieldType mappedFieldType = context.fieldMapper(suggestionContext.getField()); if (mappedFieldType == null || mappedFieldType instanceof CompletionFieldMapper.CompletionFieldType == false) { throw new IllegalArgumentException("Field [" + suggestionContext.getField() + "] is not a completion suggest field"); } diff --git a/server/src/test/java/org/elasticsearch/index/engine/InternalEngineTests.java b/server/src/test/java/org/elasticsearch/index/engine/InternalEngineTests.java index 0135b19293f6d..ed2127d8aa16b 100644 --- a/server/src/test/java/org/elasticsearch/index/engine/InternalEngineTests.java +++ b/server/src/test/java/org/elasticsearch/index/engine/InternalEngineTests.java @@ -1319,7 +1319,7 @@ public void testForceMergeWithSoftDeletesRetention() throws Exception { } engine.forceMerge(true, 1, false, false, false, UUIDs.randomBase64UUID()); assertConsistentHistoryBetweenTranslogAndLuceneIndex(engine, mapperService); - Map ops = readAllOperationsInLucene(engine, mapperService) + Map ops = readAllOperationsInLucene(engine, mapperService::fieldType) .stream().collect(Collectors.toMap(Translog.Operation::seqNo, Function.identity())); for (long seqno = 0; seqno <= localCheckpoint; seqno++) { long minSeqNoToRetain = Math.min(globalCheckpoint.get() + 1 - retainedExtraOps, safeCommitCheckpoint + 1); @@ -1343,7 +1343,7 @@ public void testForceMergeWithSoftDeletesRetention() throws Exception { engine.forceMerge(true, 1, false, false, false, UUIDs.randomBase64UUID()); assertConsistentHistoryBetweenTranslogAndLuceneIndex(engine, mapperService); - assertThat(readAllOperationsInLucene(engine, mapperService), hasSize(liveDocs.size())); + assertThat(readAllOperationsInLucene(engine, mapperService::fieldType), hasSize(liveDocs.size())); } } @@ -1407,7 +1407,7 @@ public void testForceMergeWithSoftDeletesRetentionAndRecoverySource() throws Exc } engine.forceMerge(true, 1, false, false, false, UUIDs.randomBase64UUID()); assertConsistentHistoryBetweenTranslogAndLuceneIndex(engine, mapperService); - Map ops = readAllOperationsInLucene(engine, mapperService) + Map ops = readAllOperationsInLucene(engine, mapperService::fieldType) .stream().collect(Collectors.toMap(Translog.Operation::seqNo, Function.identity())); for (long seqno = 0; seqno <= engine.getPersistedLocalCheckpoint(); seqno++) { String msg = "seq# [" + seqno + "], global checkpoint [" + globalCheckpoint + "], retained-ops [" + retainedExtraOps + "]"; @@ -1450,7 +1450,7 @@ public void testForceMergeWithSoftDeletesRetentionAndRecoverySource() throws Exc } engine.forceMerge(true, 1, false, false, false, UUIDs.randomBase64UUID()); assertConsistentHistoryBetweenTranslogAndLuceneIndex(engine, mapperService); - assertThat(readAllOperationsInLucene(engine, mapperService), hasSize(liveDocsWithSource.size())); + assertThat(readAllOperationsInLucene(engine, mapperService::fieldType), hasSize(liveDocsWithSource.size())); } } @@ -3337,7 +3337,7 @@ public void testDoubleDeliveryReplica() throws IOException { assertEquals(1, topDocs.totalHits.value); } if (engine.engineConfig.getIndexSettings().isSoftDeleteEnabled()) { - List ops = readAllOperationsInLucene(engine, createMapperService()); + List ops = readAllOperationsInLucene(engine, createMapperService()::fieldType); assertThat(ops.stream().map(o -> o.seqNo()).collect(Collectors.toList()), hasItem(20L)); } } @@ -4059,7 +4059,7 @@ protected long doGenerateSeqNoForOperation(Operation operation) { assertThat(noOp.reason(), equalTo(reason)); if (engine.engineConfig.getIndexSettings().isSoftDeleteEnabled()) { MapperService mapperService = createMapperService(); - List operationsFromLucene = readAllOperationsInLucene(noOpEngine, mapperService); + List operationsFromLucene = readAllOperationsInLucene(noOpEngine, mapperService::fieldType); assertThat(operationsFromLucene, hasSize(maxSeqNo + 2 - localCheckpoint)); // fills n gap and 2 manual noop. for (int i = 0; i < operationsFromLucene.size(); i++) { assertThat(operationsFromLucene.get(i), @@ -4133,7 +4133,7 @@ public void testRandomOperations() throws Exception { } } if (engine.engineConfig.getIndexSettings().isSoftDeleteEnabled()) { - List operations = readAllOperationsInLucene(engine, createMapperService()); + List operations = readAllOperationsInLucene(engine, createMapperService()::fieldType); assertThat(operations, hasSize(numOps)); } } @@ -5071,7 +5071,7 @@ private void assertOperationHistoryInLucene(List operations) t } } MapperService mapperService = createMapperService(); - List actualOps = readAllOperationsInLucene(engine, mapperService); + List actualOps = readAllOperationsInLucene(engine, mapperService::fieldType); assertThat(actualOps.stream().map(o -> o.seqNo()).collect(Collectors.toList()), containsInAnyOrder(expectedSeqNos.toArray())); assertConsistentHistoryBetweenTranslogAndLuceneIndex(engine, mapperService); } @@ -5152,7 +5152,7 @@ public void testKeepMinRetainedSeqNoByMergePolicy() throws IOException { long minRetainSeqNos = engine.getMinRetainedSeqNo(); assertThat(minRetainSeqNos, lessThanOrEqualTo(globalCheckpoint.get() + 1)); Long[] expectedOps = existingSeqNos.stream().filter(seqno -> seqno >= minRetainSeqNos).toArray(Long[]::new); - Set actualOps = readAllOperationsInLucene(engine, createMapperService()).stream() + Set actualOps = readAllOperationsInLucene(engine, createMapperService()::fieldType).stream() .map(Translog.Operation::seqNo).collect(Collectors.toSet()); assertThat(actualOps, containsInAnyOrder(expectedOps)); } @@ -5239,7 +5239,7 @@ public void onFailure(Exception e) { @Override protected void doRun() throws Exception { latch.await(); - Translog.Snapshot changes = engine.newChangesSnapshot("test", mapperService, min, max, true); + Translog.Snapshot changes = engine.newChangesSnapshot("test", mapperService::fieldType, min, max, true); changes.close(); } }); diff --git a/server/src/test/java/org/elasticsearch/index/engine/LuceneChangesSnapshotTests.java b/server/src/test/java/org/elasticsearch/index/engine/LuceneChangesSnapshotTests.java index 0bdc89a38e8ec..49bb4d7e27641 100644 --- a/server/src/test/java/org/elasticsearch/index/engine/LuceneChangesSnapshotTests.java +++ b/server/src/test/java/org/elasticsearch/index/engine/LuceneChangesSnapshotTests.java @@ -60,12 +60,12 @@ public void testBasics() throws Exception { long fromSeqNo = randomNonNegativeLong(); long toSeqNo = randomLongBetween(fromSeqNo, Long.MAX_VALUE); // Empty engine - try (Translog.Snapshot snapshot = engine.newChangesSnapshot("test", mapperService, fromSeqNo, toSeqNo, true)) { + try (Translog.Snapshot snapshot = engine.newChangesSnapshot("test", mapperService::fieldType, fromSeqNo, toSeqNo, true)) { IllegalStateException error = expectThrows(IllegalStateException.class, () -> drainAll(snapshot)); assertThat(error.getMessage(), containsString("Not all operations between from_seqno [" + fromSeqNo + "] and to_seqno [" + toSeqNo + "] found")); } - try (Translog.Snapshot snapshot = engine.newChangesSnapshot("test", mapperService, fromSeqNo, toSeqNo, false)) { + try (Translog.Snapshot snapshot = engine.newChangesSnapshot("test", mapperService::fieldType, fromSeqNo, toSeqNo, false)) { assertThat(snapshot, SnapshotMatchers.size(0)); } int numOps = between(1, 100); @@ -93,7 +93,7 @@ public void testBasics() throws Exception { Engine.Searcher searcher = engine.acquireSearcher("test", Engine.SearcherScope.INTERNAL); try (Translog.Snapshot snapshot = new LuceneChangesSnapshot( - searcher, mapperService, between(1, LuceneChangesSnapshot.DEFAULT_BATCH_SIZE), fromSeqNo, toSeqNo, false)) { + searcher, mapperService::fieldType, between(1, LuceneChangesSnapshot.DEFAULT_BATCH_SIZE), fromSeqNo, toSeqNo, false)) { searcher = null; assertThat(snapshot, SnapshotMatchers.size(0)); } finally { @@ -102,7 +102,7 @@ searcher, mapperService, between(1, LuceneChangesSnapshot.DEFAULT_BATCH_SIZE), f searcher = engine.acquireSearcher("test", Engine.SearcherScope.INTERNAL); try (Translog.Snapshot snapshot = new LuceneChangesSnapshot( - searcher, mapperService, between(1, LuceneChangesSnapshot.DEFAULT_BATCH_SIZE), fromSeqNo, toSeqNo, true)) { + searcher, mapperService::fieldType, between(1, LuceneChangesSnapshot.DEFAULT_BATCH_SIZE), fromSeqNo, toSeqNo, true)) { searcher = null; IllegalStateException error = expectThrows(IllegalStateException.class, () -> drainAll(snapshot)); assertThat(error.getMessage(), @@ -115,7 +115,7 @@ searcher, mapperService, between(1, LuceneChangesSnapshot.DEFAULT_BATCH_SIZE), f toSeqNo = randomLongBetween(refreshedSeqNo + 1, numOps * 2); Engine.Searcher searcher = engine.acquireSearcher("test", Engine.SearcherScope.INTERNAL); try (Translog.Snapshot snapshot = new LuceneChangesSnapshot( - searcher, mapperService, between(1, LuceneChangesSnapshot.DEFAULT_BATCH_SIZE), fromSeqNo, toSeqNo, false)) { + searcher, mapperService::fieldType, between(1, LuceneChangesSnapshot.DEFAULT_BATCH_SIZE), fromSeqNo, toSeqNo, false)) { searcher = null; assertThat(snapshot, SnapshotMatchers.containsSeqNoRange(fromSeqNo, refreshedSeqNo)); } finally { @@ -123,7 +123,7 @@ searcher, mapperService, between(1, LuceneChangesSnapshot.DEFAULT_BATCH_SIZE), f } searcher = engine.acquireSearcher("test", Engine.SearcherScope.INTERNAL); try (Translog.Snapshot snapshot = new LuceneChangesSnapshot( - searcher, mapperService, between(1, LuceneChangesSnapshot.DEFAULT_BATCH_SIZE), fromSeqNo, toSeqNo, true)) { + searcher, mapperService::fieldType, between(1, LuceneChangesSnapshot.DEFAULT_BATCH_SIZE), fromSeqNo, toSeqNo, true)) { searcher = null; IllegalStateException error = expectThrows(IllegalStateException.class, () -> drainAll(snapshot)); assertThat(error.getMessage(), @@ -134,7 +134,7 @@ searcher, mapperService, between(1, LuceneChangesSnapshot.DEFAULT_BATCH_SIZE), f toSeqNo = randomLongBetween(fromSeqNo, refreshedSeqNo); searcher = engine.acquireSearcher("test", Engine.SearcherScope.INTERNAL); try (Translog.Snapshot snapshot = new LuceneChangesSnapshot( - searcher, mapperService, between(1, LuceneChangesSnapshot.DEFAULT_BATCH_SIZE), fromSeqNo, toSeqNo, true)) { + searcher, mapperService::fieldType, between(1, LuceneChangesSnapshot.DEFAULT_BATCH_SIZE), fromSeqNo, toSeqNo, true)) { searcher = null; assertThat(snapshot, SnapshotMatchers.containsSeqNoRange(fromSeqNo, toSeqNo)); } finally { @@ -144,7 +144,8 @@ searcher, mapperService, between(1, LuceneChangesSnapshot.DEFAULT_BATCH_SIZE), f // Get snapshot via engine will auto refresh fromSeqNo = randomLongBetween(0, numOps - 1); toSeqNo = randomLongBetween(fromSeqNo, numOps - 1); - try (Translog.Snapshot snapshot = engine.newChangesSnapshot("test", mapperService, fromSeqNo, toSeqNo, randomBoolean())) { + try (Translog.Snapshot snapshot = engine.newChangesSnapshot("test", mapperService::fieldType, + fromSeqNo, toSeqNo, randomBoolean())) { assertThat(snapshot, SnapshotMatchers.containsSeqNoRange(fromSeqNo, toSeqNo)); } } @@ -175,7 +176,8 @@ public void testSkipNonRootOfNestedDocuments() throws Exception { long maxSeqNo = engine.getLocalCheckpointTracker().getMaxSeqNo(); engine.refresh("test"); Engine.Searcher searcher = engine.acquireSearcher("test", Engine.SearcherScope.INTERNAL); - try (Translog.Snapshot snapshot = new LuceneChangesSnapshot(searcher, mapperService, between(1, 100), 0, maxSeqNo, false)) { + try (Translog.Snapshot snapshot = new LuceneChangesSnapshot(searcher, mapperService::fieldType, + between(1, 100), 0, maxSeqNo, false)) { assertThat(snapshot.totalOperations(), equalTo(seqNoToTerm.size())); Translog.Operation op; while ((op = snapshot.next()) != null) { @@ -249,7 +251,7 @@ void pullOperations(InternalEngine follower) throws IOException { long fromSeqNo = followerCheckpoint + 1; long batchSize = randomLongBetween(0, 100); long toSeqNo = Math.min(fromSeqNo + batchSize, leaderCheckpoint); - try (Translog.Snapshot snapshot = leader.newChangesSnapshot("test", mapperService, fromSeqNo, toSeqNo, true)) { + try (Translog.Snapshot snapshot = leader.newChangesSnapshot("test", mapperService::fieldType, fromSeqNo, toSeqNo, true)) { translogHandler.run(follower, snapshot); } } @@ -295,7 +297,7 @@ private List drainAll(Translog.Snapshot snapshot) throws IOE public void testOverFlow() throws Exception { long fromSeqNo = randomLongBetween(0, 5); long toSeqNo = randomLongBetween(Long.MAX_VALUE - 5, Long.MAX_VALUE); - try (Translog.Snapshot snapshot = engine.newChangesSnapshot("test", mapperService, fromSeqNo, toSeqNo, true)) { + try (Translog.Snapshot snapshot = engine.newChangesSnapshot("test", mapperService::fieldType, fromSeqNo, toSeqNo, true)) { IllegalStateException error = expectThrows(IllegalStateException.class, () -> drainAll(snapshot)); assertThat(error.getMessage(), containsString("Not all operations between from_seqno [" + fromSeqNo + "] and to_seqno [" + toSeqNo + "] found")); diff --git a/server/src/test/java/org/elasticsearch/index/mapper/IdFieldTypeTests.java b/server/src/test/java/org/elasticsearch/index/mapper/IdFieldTypeTests.java index 878a16f1a2cca..7af0da7d98aa5 100644 --- a/server/src/test/java/org/elasticsearch/index/mapper/IdFieldTypeTests.java +++ b/server/src/test/java/org/elasticsearch/index/mapper/IdFieldTypeTests.java @@ -49,10 +49,6 @@ public void testTermsQuery() { IndexSettings mockSettings = new IndexSettings(indexMetadata, Settings.EMPTY); Mockito.when(context.getIndexSettings()).thenReturn(mockSettings); Mockito.when(context.indexVersionCreated()).thenReturn(indexSettings.getAsVersion(IndexMetadata.SETTING_VERSION_CREATED, null)); - - MapperService mapperService = Mockito.mock(MapperService.class); - Mockito.when(context.getMapperService()).thenReturn(mapperService); - MappedFieldType ft = new IdFieldMapper.IdFieldType(() -> false); Query query = ft.termQuery("id", context); assertEquals(new TermInSetQuery("_id", Uid.encodeId("id")), query); diff --git a/server/src/test/java/org/elasticsearch/index/mapper/StoredNumericValuesTests.java b/server/src/test/java/org/elasticsearch/index/mapper/StoredNumericValuesTests.java index 6ac75999c0b4e..ba37a91d56cac 100644 --- a/server/src/test/java/org/elasticsearch/index/mapper/StoredNumericValuesTests.java +++ b/server/src/test/java/org/elasticsearch/index/mapper/StoredNumericValuesTests.java @@ -90,7 +90,7 @@ public void testBytesAndNumericRepresentation() throws Exception { CustomFieldsVisitor fieldsVisitor = new CustomFieldsVisitor(fieldNames, false); searcher.doc(0, fieldsVisitor); - fieldsVisitor.postProcess(mapperService); + fieldsVisitor.postProcess(mapperService::fieldType); assertThat(fieldsVisitor.fields().size(), equalTo(10)); assertThat(fieldsVisitor.fields().get("field1").size(), equalTo(1)); assertThat(fieldsVisitor.fields().get("field1").get(0), equalTo((byte) 1)); diff --git a/server/src/test/java/org/elasticsearch/index/query/DistanceFeatureQueryBuilderTests.java b/server/src/test/java/org/elasticsearch/index/query/DistanceFeatureQueryBuilderTests.java index a7dd41a8d2cfc..4feaf9a9758be 100644 --- a/server/src/test/java/org/elasticsearch/index/query/DistanceFeatureQueryBuilderTests.java +++ b/server/src/test/java/org/elasticsearch/index/query/DistanceFeatureQueryBuilderTests.java @@ -29,7 +29,6 @@ import org.elasticsearch.common.unit.TimeValue; import org.elasticsearch.index.mapper.DateFieldMapper; import org.elasticsearch.index.mapper.DateFieldMapper.DateFieldType; -import org.elasticsearch.index.mapper.MapperService; import org.elasticsearch.index.query.DistanceFeatureQueryBuilder.Origin; import org.elasticsearch.test.AbstractQueryTestCase; import org.joda.time.DateTime; @@ -85,8 +84,7 @@ protected void doAssertLuceneQuery(DistanceFeatureQueryBuilder queryBuilder, double pivotDouble = DistanceUnit.DEFAULT.parse(pivot, DistanceUnit.DEFAULT); expectedQuery = LatLonPoint.newDistanceFeatureQuery(fieldName, boost, originGeoPoint.lat(), originGeoPoint.lon(), pivotDouble); } else { // if (fieldName.equals(DATE_FIELD_NAME)) - MapperService mapperService = context.getMapperService(); - DateFieldType fieldType = (DateFieldType) mapperService.fieldType(fieldName); + DateFieldType fieldType = (DateFieldType) context.fieldMapper(fieldName); long originLong = fieldType.parseToLong(origin, true, null, null, context::nowInMillis); TimeValue pivotVal = TimeValue.parseTimeValue(pivot, DistanceFeatureQueryBuilder.class.getSimpleName() + ".pivot"); long pivotLong; diff --git a/server/src/test/java/org/elasticsearch/index/query/ExistsQueryBuilderTests.java b/server/src/test/java/org/elasticsearch/index/query/ExistsQueryBuilderTests.java index c218cca03e1ea..227b2d7a7647a 100644 --- a/server/src/test/java/org/elasticsearch/index/query/ExistsQueryBuilderTests.java +++ b/server/src/test/java/org/elasticsearch/index/query/ExistsQueryBuilderTests.java @@ -61,7 +61,7 @@ protected void doAssertLuceneQuery(ExistsQueryBuilder queryBuilder, Query query, String fieldPattern = queryBuilder.fieldName(); Collection fields = context.simpleMatchToIndexNames(fieldPattern); Collection mappedFields = fields.stream().filter((field) -> context.getObjectMapper(field) != null - || context.getMapperService().fieldType(field) != null).collect(Collectors.toList()); + || context.fieldMapper(field) != null).collect(Collectors.toList()); if (mappedFields.size() == 0) { assertThat(query, instanceOf(MatchNoDocsQuery.class)); MatchNoDocsQuery matchNoDocsQuery = (MatchNoDocsQuery) query; @@ -79,11 +79,11 @@ protected void doAssertLuceneQuery(ExistsQueryBuilder queryBuilder, Query query, BooleanClause booleanClause = booleanQuery.clauses().get(i); assertThat(booleanClause.getOccur(), equalTo(BooleanClause.Occur.SHOULD)); } - } else if (context.getMapperService().fieldType(field).hasDocValues()) { + } else if (context.fieldMapper(field).hasDocValues()) { assertThat(constantScoreQuery.getQuery(), instanceOf(DocValuesFieldExistsQuery.class)); DocValuesFieldExistsQuery dvExistsQuery = (DocValuesFieldExistsQuery) constantScoreQuery.getQuery(); assertEquals(field, dvExistsQuery.getField()); - } else if (context.getMapperService().fieldType(field).getTextSearchInfo().hasNorms()) { + } else if (context.fieldMapper(field).getTextSearchInfo().hasNorms()) { assertThat(constantScoreQuery.getQuery(), instanceOf(NormsFieldExistsQuery.class)); NormsFieldExistsQuery normsExistsQuery = (NormsFieldExistsQuery) constantScoreQuery.getQuery(); assertEquals(field, normsExistsQuery.getField()); diff --git a/server/src/test/java/org/elasticsearch/index/query/QueryStringQueryBuilderTests.java b/server/src/test/java/org/elasticsearch/index/query/QueryStringQueryBuilderTests.java index 4dd59dfdbd2fe..0e3621fd85de7 100644 --- a/server/src/test/java/org/elasticsearch/index/query/QueryStringQueryBuilderTests.java +++ b/server/src/test/java/org/elasticsearch/index/query/QueryStringQueryBuilderTests.java @@ -1056,7 +1056,7 @@ public void testExistsFieldQuery() throws Exception { QueryShardContext context = createShardContext(); QueryStringQueryBuilder queryBuilder = new QueryStringQueryBuilder(TEXT_FIELD_NAME + ":*"); Query query = queryBuilder.toQuery(context); - if (context.getMapperService().fieldType(TEXT_FIELD_NAME).getTextSearchInfo().hasNorms()) { + if (context.fieldMapper(TEXT_FIELD_NAME).getTextSearchInfo().hasNorms()) { assertThat(query, equalTo(new ConstantScoreQuery(new NormsFieldExistsQuery(TEXT_FIELD_NAME)))); } else { assertThat(query, equalTo(new ConstantScoreQuery(new TermQuery(new Term("_field_names", TEXT_FIELD_NAME))))); @@ -1066,7 +1066,7 @@ public void testExistsFieldQuery() throws Exception { String value = (quoted ? "\"" : "") + TEXT_FIELD_NAME + (quoted ? "\"" : ""); queryBuilder = new QueryStringQueryBuilder("_exists_:" + value); query = queryBuilder.toQuery(context); - if (context.getMapperService().fieldType(TEXT_FIELD_NAME).getTextSearchInfo().hasNorms()) { + if (context.fieldMapper(TEXT_FIELD_NAME).getTextSearchInfo().hasNorms()) { assertThat(query, equalTo(new ConstantScoreQuery(new NormsFieldExistsQuery(TEXT_FIELD_NAME)))); } else { assertThat(query, equalTo(new ConstantScoreQuery(new TermQuery(new Term("_field_names", TEXT_FIELD_NAME))))); diff --git a/server/src/test/java/org/elasticsearch/index/query/RangeQueryBuilderTests.java b/server/src/test/java/org/elasticsearch/index/query/RangeQueryBuilderTests.java index 17a918db4cbd3..296471db2913f 100644 --- a/server/src/test/java/org/elasticsearch/index/query/RangeQueryBuilderTests.java +++ b/server/src/test/java/org/elasticsearch/index/query/RangeQueryBuilderTests.java @@ -39,7 +39,6 @@ import org.elasticsearch.index.mapper.FieldNamesFieldMapper; import org.elasticsearch.index.mapper.MappedFieldType; import org.elasticsearch.index.mapper.MappedFieldType.Relation; -import org.elasticsearch.index.mapper.MapperService; import org.elasticsearch.test.AbstractQueryTestCase; import org.joda.time.DateTime; import org.joda.time.chrono.ISOChronology; @@ -80,7 +79,7 @@ protected RangeQueryBuilder doCreateTestQueryBuilder() { query.to(DateFieldMapper.DEFAULT_DATE_TIME_FORMATTER.format(end)); // Create timestamp option only then we have a date mapper, // otherwise we could trigger exception. - if (createShardContext().getMapperService().fieldType(DATE_FIELD_NAME) != null) { + if (createShardContext().fieldMapper(DATE_FIELD_NAME) != null) { if (randomBoolean()) { query.timeZone(randomZone().getId()); } @@ -136,10 +135,10 @@ protected void doAssertLuceneQuery(RangeQueryBuilder queryBuilder, Query query, String expectedFieldName = expectedFieldName(queryBuilder.fieldName()); if (queryBuilder.from() == null && queryBuilder.to() == null) { final Query expectedQuery; - final MappedFieldType resolvedFieldType = context.getMapperService().fieldType(queryBuilder.fieldName()); + final MappedFieldType resolvedFieldType = context.fieldMapper(queryBuilder.fieldName()); if (resolvedFieldType.hasDocValues()) { expectedQuery = new ConstantScoreQuery(new DocValuesFieldExistsQuery(expectedFieldName)); - } else if (context.getMapperService().fieldType(resolvedFieldType.name()) + } else if (context.fieldMapper(resolvedFieldType.name()) .getTextSearchInfo().hasNorms()) { expectedQuery = new ConstantScoreQuery(new NormsFieldExistsQuery(expectedFieldName)); } else { @@ -161,8 +160,7 @@ protected void doAssertLuceneQuery(RangeQueryBuilder queryBuilder, Query query, assertThat(query, instanceOf(IndexOrDocValuesQuery.class)); query = ((IndexOrDocValuesQuery) query).getIndexQuery(); assertThat(query, instanceOf(PointRangeQuery.class)); - MapperService mapperService = context.getMapperService(); - MappedFieldType mappedFieldType = mapperService.fieldType(expectedFieldName); + MappedFieldType mappedFieldType = context.fieldMapper(expectedFieldName); final Long fromInMillis; final Long toInMillis; // we have to normalize the incoming value into milliseconds since it could be literally anything diff --git a/server/src/test/java/org/elasticsearch/index/query/functionscore/ScoreFunctionBuilderTests.java b/server/src/test/java/org/elasticsearch/index/query/functionscore/ScoreFunctionBuilderTests.java index c66cad93e4bd8..95ecf5f208777 100644 --- a/server/src/test/java/org/elasticsearch/index/query/functionscore/ScoreFunctionBuilderTests.java +++ b/server/src/test/java/org/elasticsearch/index/query/functionscore/ScoreFunctionBuilderTests.java @@ -24,7 +24,6 @@ import org.elasticsearch.common.settings.Settings; import org.elasticsearch.index.IndexSettings; import org.elasticsearch.index.mapper.MappedFieldType; -import org.elasticsearch.index.mapper.MapperService; import org.elasticsearch.index.mapper.NumberFieldMapper; import org.elasticsearch.index.mapper.NumberFieldMapper.NumberType; import org.elasticsearch.index.query.QueryShardContext; @@ -60,10 +59,8 @@ public void testRandomScoreFunctionWithSeed() throws Exception { Mockito.when(context.index()).thenReturn(settings.getIndex()); Mockito.when(context.getShardId()).thenReturn(0); Mockito.when(context.getIndexSettings()).thenReturn(settings); - MapperService mapperService = Mockito.mock(MapperService.class); MappedFieldType ft = new NumberFieldMapper.NumberFieldType("foo", NumberType.LONG); - Mockito.when(mapperService.fieldType(Mockito.anyString())).thenReturn(ft); - Mockito.when(context.getMapperService()).thenReturn(mapperService); + Mockito.when(context.fieldMapper(Mockito.anyString())).thenReturn(ft); builder.toFunction(context); assertWarnings("As of version 7.0 Elasticsearch will require that a [field] parameter is provided when a [seed] is set"); } diff --git a/server/src/test/java/org/elasticsearch/index/search/NestedHelperTests.java b/server/src/test/java/org/elasticsearch/index/search/NestedHelperTests.java index e6860ca76597d..92e9940066546 100644 --- a/server/src/test/java/org/elasticsearch/index/search/NestedHelperTests.java +++ b/server/src/test/java/org/elasticsearch/index/search/NestedHelperTests.java @@ -101,111 +101,115 @@ public void setUp() throws Exception { mapperService = indexService.mapperService(); } + private static NestedHelper buildNestedHelper(MapperService mapperService) { + return new NestedHelper(mapperService::getObjectMapper, mapperService::fieldType); + } + public void testMatchAll() { - assertTrue(new NestedHelper(mapperService).mightMatchNestedDocs(new MatchAllDocsQuery())); - assertTrue(new NestedHelper(mapperService).mightMatchNonNestedDocs(new MatchAllDocsQuery(), "nested1")); - assertTrue(new NestedHelper(mapperService).mightMatchNonNestedDocs(new MatchAllDocsQuery(), "nested2")); - assertTrue(new NestedHelper(mapperService).mightMatchNonNestedDocs(new MatchAllDocsQuery(), "nested3")); - assertTrue(new NestedHelper(mapperService).mightMatchNonNestedDocs(new MatchAllDocsQuery(), "nested_missing")); + assertTrue(buildNestedHelper(mapperService).mightMatchNestedDocs(new MatchAllDocsQuery())); + assertTrue(buildNestedHelper(mapperService).mightMatchNonNestedDocs(new MatchAllDocsQuery(), "nested1")); + assertTrue(buildNestedHelper(mapperService).mightMatchNonNestedDocs(new MatchAllDocsQuery(), "nested2")); + assertTrue(buildNestedHelper(mapperService).mightMatchNonNestedDocs(new MatchAllDocsQuery(), "nested3")); + assertTrue(buildNestedHelper(mapperService).mightMatchNonNestedDocs(new MatchAllDocsQuery(), "nested_missing")); } public void testMatchNo() { - assertFalse(new NestedHelper(mapperService).mightMatchNestedDocs(new MatchNoDocsQuery())); - assertFalse(new NestedHelper(mapperService).mightMatchNonNestedDocs(new MatchNoDocsQuery(), "nested1")); - assertFalse(new NestedHelper(mapperService).mightMatchNonNestedDocs(new MatchNoDocsQuery(), "nested2")); - assertFalse(new NestedHelper(mapperService).mightMatchNonNestedDocs(new MatchNoDocsQuery(), "nested3")); - assertFalse(new NestedHelper(mapperService).mightMatchNonNestedDocs(new MatchNoDocsQuery(), "nested_missing")); + assertFalse(buildNestedHelper(mapperService).mightMatchNestedDocs(new MatchNoDocsQuery())); + assertFalse(buildNestedHelper(mapperService).mightMatchNonNestedDocs(new MatchNoDocsQuery(), "nested1")); + assertFalse(buildNestedHelper(mapperService).mightMatchNonNestedDocs(new MatchNoDocsQuery(), "nested2")); + assertFalse(buildNestedHelper(mapperService).mightMatchNonNestedDocs(new MatchNoDocsQuery(), "nested3")); + assertFalse(buildNestedHelper(mapperService).mightMatchNonNestedDocs(new MatchNoDocsQuery(), "nested_missing")); } public void testTermsQuery() { Query termsQuery = mapperService.fieldType("foo").termsQuery(Collections.singletonList("bar"), null); - assertFalse(new NestedHelper(mapperService).mightMatchNestedDocs(termsQuery)); - assertTrue(new NestedHelper(mapperService).mightMatchNonNestedDocs(termsQuery, "nested1")); - assertTrue(new NestedHelper(mapperService).mightMatchNonNestedDocs(termsQuery, "nested2")); - assertTrue(new NestedHelper(mapperService).mightMatchNonNestedDocs(termsQuery, "nested3")); - assertTrue(new NestedHelper(mapperService).mightMatchNonNestedDocs(termsQuery, "nested_missing")); + assertFalse(buildNestedHelper(mapperService).mightMatchNestedDocs(termsQuery)); + assertTrue(buildNestedHelper(mapperService).mightMatchNonNestedDocs(termsQuery, "nested1")); + assertTrue(buildNestedHelper(mapperService).mightMatchNonNestedDocs(termsQuery, "nested2")); + assertTrue(buildNestedHelper(mapperService).mightMatchNonNestedDocs(termsQuery, "nested3")); + assertTrue(buildNestedHelper(mapperService).mightMatchNonNestedDocs(termsQuery, "nested_missing")); termsQuery = mapperService.fieldType("nested1.foo").termsQuery(Collections.singletonList("bar"), null); - assertTrue(new NestedHelper(mapperService).mightMatchNestedDocs(termsQuery)); - assertFalse(new NestedHelper(mapperService).mightMatchNonNestedDocs(termsQuery, "nested1")); - assertTrue(new NestedHelper(mapperService).mightMatchNonNestedDocs(termsQuery, "nested2")); - assertTrue(new NestedHelper(mapperService).mightMatchNonNestedDocs(termsQuery, "nested3")); - assertTrue(new NestedHelper(mapperService).mightMatchNonNestedDocs(termsQuery, "nested_missing")); + assertTrue(buildNestedHelper(mapperService).mightMatchNestedDocs(termsQuery)); + assertFalse(buildNestedHelper(mapperService).mightMatchNonNestedDocs(termsQuery, "nested1")); + assertTrue(buildNestedHelper(mapperService).mightMatchNonNestedDocs(termsQuery, "nested2")); + assertTrue(buildNestedHelper(mapperService).mightMatchNonNestedDocs(termsQuery, "nested3")); + assertTrue(buildNestedHelper(mapperService).mightMatchNonNestedDocs(termsQuery, "nested_missing")); termsQuery = mapperService.fieldType("nested2.foo").termsQuery(Collections.singletonList("bar"), null); - assertTrue(new NestedHelper(mapperService).mightMatchNestedDocs(termsQuery)); - assertTrue(new NestedHelper(mapperService).mightMatchNonNestedDocs(termsQuery, "nested1")); - assertTrue(new NestedHelper(mapperService).mightMatchNonNestedDocs(termsQuery, "nested2")); - assertTrue(new NestedHelper(mapperService).mightMatchNonNestedDocs(termsQuery, "nested3")); - assertTrue(new NestedHelper(mapperService).mightMatchNonNestedDocs(termsQuery, "nested_missing")); + assertTrue(buildNestedHelper(mapperService).mightMatchNestedDocs(termsQuery)); + assertTrue(buildNestedHelper(mapperService).mightMatchNonNestedDocs(termsQuery, "nested1")); + assertTrue(buildNestedHelper(mapperService).mightMatchNonNestedDocs(termsQuery, "nested2")); + assertTrue(buildNestedHelper(mapperService).mightMatchNonNestedDocs(termsQuery, "nested3")); + assertTrue(buildNestedHelper(mapperService).mightMatchNonNestedDocs(termsQuery, "nested_missing")); termsQuery = mapperService.fieldType("nested3.foo").termsQuery(Collections.singletonList("bar"), null); - assertTrue(new NestedHelper(mapperService).mightMatchNestedDocs(termsQuery)); - assertTrue(new NestedHelper(mapperService).mightMatchNonNestedDocs(termsQuery, "nested1")); - assertTrue(new NestedHelper(mapperService).mightMatchNonNestedDocs(termsQuery, "nested2")); - assertTrue(new NestedHelper(mapperService).mightMatchNonNestedDocs(termsQuery, "nested3")); - assertTrue(new NestedHelper(mapperService).mightMatchNonNestedDocs(termsQuery, "nested_missing")); + assertTrue(buildNestedHelper(mapperService).mightMatchNestedDocs(termsQuery)); + assertTrue(buildNestedHelper(mapperService).mightMatchNonNestedDocs(termsQuery, "nested1")); + assertTrue(buildNestedHelper(mapperService).mightMatchNonNestedDocs(termsQuery, "nested2")); + assertTrue(buildNestedHelper(mapperService).mightMatchNonNestedDocs(termsQuery, "nested3")); + assertTrue(buildNestedHelper(mapperService).mightMatchNonNestedDocs(termsQuery, "nested_missing")); } public void testTermQuery() { Query termQuery = mapperService.fieldType("foo").termQuery("bar", null); - assertFalse(new NestedHelper(mapperService).mightMatchNestedDocs(termQuery)); - assertTrue(new NestedHelper(mapperService).mightMatchNonNestedDocs(termQuery, "nested1")); - assertTrue(new NestedHelper(mapperService).mightMatchNonNestedDocs(termQuery, "nested2")); - assertTrue(new NestedHelper(mapperService).mightMatchNonNestedDocs(termQuery, "nested3")); - assertTrue(new NestedHelper(mapperService).mightMatchNonNestedDocs(termQuery, "nested_missing")); + assertFalse(buildNestedHelper(mapperService).mightMatchNestedDocs(termQuery)); + assertTrue(buildNestedHelper(mapperService).mightMatchNonNestedDocs(termQuery, "nested1")); + assertTrue(buildNestedHelper(mapperService).mightMatchNonNestedDocs(termQuery, "nested2")); + assertTrue(buildNestedHelper(mapperService).mightMatchNonNestedDocs(termQuery, "nested3")); + assertTrue(buildNestedHelper(mapperService).mightMatchNonNestedDocs(termQuery, "nested_missing")); termQuery = mapperService.fieldType("nested1.foo").termQuery("bar", null); - assertTrue(new NestedHelper(mapperService).mightMatchNestedDocs(termQuery)); - assertFalse(new NestedHelper(mapperService).mightMatchNonNestedDocs(termQuery, "nested1")); - assertTrue(new NestedHelper(mapperService).mightMatchNonNestedDocs(termQuery, "nested2")); - assertTrue(new NestedHelper(mapperService).mightMatchNonNestedDocs(termQuery, "nested3")); - assertTrue(new NestedHelper(mapperService).mightMatchNonNestedDocs(termQuery, "nested_missing")); + assertTrue(buildNestedHelper(mapperService).mightMatchNestedDocs(termQuery)); + assertFalse(buildNestedHelper(mapperService).mightMatchNonNestedDocs(termQuery, "nested1")); + assertTrue(buildNestedHelper(mapperService).mightMatchNonNestedDocs(termQuery, "nested2")); + assertTrue(buildNestedHelper(mapperService).mightMatchNonNestedDocs(termQuery, "nested3")); + assertTrue(buildNestedHelper(mapperService).mightMatchNonNestedDocs(termQuery, "nested_missing")); termQuery = mapperService.fieldType("nested2.foo").termQuery("bar", null); - assertTrue(new NestedHelper(mapperService).mightMatchNestedDocs(termQuery)); - assertTrue(new NestedHelper(mapperService).mightMatchNonNestedDocs(termQuery, "nested1")); - assertTrue(new NestedHelper(mapperService).mightMatchNonNestedDocs(termQuery, "nested2")); - assertTrue(new NestedHelper(mapperService).mightMatchNonNestedDocs(termQuery, "nested3")); - assertTrue(new NestedHelper(mapperService).mightMatchNonNestedDocs(termQuery, "nested_missing")); + assertTrue(buildNestedHelper(mapperService).mightMatchNestedDocs(termQuery)); + assertTrue(buildNestedHelper(mapperService).mightMatchNonNestedDocs(termQuery, "nested1")); + assertTrue(buildNestedHelper(mapperService).mightMatchNonNestedDocs(termQuery, "nested2")); + assertTrue(buildNestedHelper(mapperService).mightMatchNonNestedDocs(termQuery, "nested3")); + assertTrue(buildNestedHelper(mapperService).mightMatchNonNestedDocs(termQuery, "nested_missing")); termQuery = mapperService.fieldType("nested3.foo").termQuery("bar", null); - assertTrue(new NestedHelper(mapperService).mightMatchNestedDocs(termQuery)); - assertTrue(new NestedHelper(mapperService).mightMatchNonNestedDocs(termQuery, "nested1")); - assertTrue(new NestedHelper(mapperService).mightMatchNonNestedDocs(termQuery, "nested2")); - assertTrue(new NestedHelper(mapperService).mightMatchNonNestedDocs(termQuery, "nested3")); - assertTrue(new NestedHelper(mapperService).mightMatchNonNestedDocs(termQuery, "nested_missing")); + assertTrue(buildNestedHelper(mapperService).mightMatchNestedDocs(termQuery)); + assertTrue(buildNestedHelper(mapperService).mightMatchNonNestedDocs(termQuery, "nested1")); + assertTrue(buildNestedHelper(mapperService).mightMatchNonNestedDocs(termQuery, "nested2")); + assertTrue(buildNestedHelper(mapperService).mightMatchNonNestedDocs(termQuery, "nested3")); + assertTrue(buildNestedHelper(mapperService).mightMatchNonNestedDocs(termQuery, "nested_missing")); } public void testRangeQuery() { QueryShardContext context = createSearchContext(indexService).getQueryShardContext(); Query rangeQuery = mapperService.fieldType("foo2").rangeQuery(2, 5, true, true, null, null, null, context); - assertFalse(new NestedHelper(mapperService).mightMatchNestedDocs(rangeQuery)); - assertTrue(new NestedHelper(mapperService).mightMatchNonNestedDocs(rangeQuery, "nested1")); - assertTrue(new NestedHelper(mapperService).mightMatchNonNestedDocs(rangeQuery, "nested2")); - assertTrue(new NestedHelper(mapperService).mightMatchNonNestedDocs(rangeQuery, "nested3")); - assertTrue(new NestedHelper(mapperService).mightMatchNonNestedDocs(rangeQuery, "nested_missing")); + assertFalse(buildNestedHelper(mapperService).mightMatchNestedDocs(rangeQuery)); + assertTrue(buildNestedHelper(mapperService).mightMatchNonNestedDocs(rangeQuery, "nested1")); + assertTrue(buildNestedHelper(mapperService).mightMatchNonNestedDocs(rangeQuery, "nested2")); + assertTrue(buildNestedHelper(mapperService).mightMatchNonNestedDocs(rangeQuery, "nested3")); + assertTrue(buildNestedHelper(mapperService).mightMatchNonNestedDocs(rangeQuery, "nested_missing")); rangeQuery = mapperService.fieldType("nested1.foo2").rangeQuery(2, 5, true, true, null, null, null, context); - assertTrue(new NestedHelper(mapperService).mightMatchNestedDocs(rangeQuery)); - assertFalse(new NestedHelper(mapperService).mightMatchNonNestedDocs(rangeQuery, "nested1")); - assertTrue(new NestedHelper(mapperService).mightMatchNonNestedDocs(rangeQuery, "nested2")); - assertTrue(new NestedHelper(mapperService).mightMatchNonNestedDocs(rangeQuery, "nested3")); - assertTrue(new NestedHelper(mapperService).mightMatchNonNestedDocs(rangeQuery, "nested_missing")); + assertTrue(buildNestedHelper(mapperService).mightMatchNestedDocs(rangeQuery)); + assertFalse(buildNestedHelper(mapperService).mightMatchNonNestedDocs(rangeQuery, "nested1")); + assertTrue(buildNestedHelper(mapperService).mightMatchNonNestedDocs(rangeQuery, "nested2")); + assertTrue(buildNestedHelper(mapperService).mightMatchNonNestedDocs(rangeQuery, "nested3")); + assertTrue(buildNestedHelper(mapperService).mightMatchNonNestedDocs(rangeQuery, "nested_missing")); rangeQuery = mapperService.fieldType("nested2.foo2").rangeQuery(2, 5, true, true, null, null, null, context); - assertTrue(new NestedHelper(mapperService).mightMatchNestedDocs(rangeQuery)); - assertTrue(new NestedHelper(mapperService).mightMatchNonNestedDocs(rangeQuery, "nested1")); - assertTrue(new NestedHelper(mapperService).mightMatchNonNestedDocs(rangeQuery, "nested2")); - assertTrue(new NestedHelper(mapperService).mightMatchNonNestedDocs(rangeQuery, "nested3")); - assertTrue(new NestedHelper(mapperService).mightMatchNonNestedDocs(rangeQuery, "nested_missing")); + assertTrue(buildNestedHelper(mapperService).mightMatchNestedDocs(rangeQuery)); + assertTrue(buildNestedHelper(mapperService).mightMatchNonNestedDocs(rangeQuery, "nested1")); + assertTrue(buildNestedHelper(mapperService).mightMatchNonNestedDocs(rangeQuery, "nested2")); + assertTrue(buildNestedHelper(mapperService).mightMatchNonNestedDocs(rangeQuery, "nested3")); + assertTrue(buildNestedHelper(mapperService).mightMatchNonNestedDocs(rangeQuery, "nested_missing")); rangeQuery = mapperService.fieldType("nested3.foo2").rangeQuery(2, 5, true, true, null, null, null, context); - assertTrue(new NestedHelper(mapperService).mightMatchNestedDocs(rangeQuery)); - assertTrue(new NestedHelper(mapperService).mightMatchNonNestedDocs(rangeQuery, "nested1")); - assertTrue(new NestedHelper(mapperService).mightMatchNonNestedDocs(rangeQuery, "nested2")); - assertTrue(new NestedHelper(mapperService).mightMatchNonNestedDocs(rangeQuery, "nested3")); - assertTrue(new NestedHelper(mapperService).mightMatchNonNestedDocs(rangeQuery, "nested_missing")); + assertTrue(buildNestedHelper(mapperService).mightMatchNestedDocs(rangeQuery)); + assertTrue(buildNestedHelper(mapperService).mightMatchNonNestedDocs(rangeQuery, "nested1")); + assertTrue(buildNestedHelper(mapperService).mightMatchNonNestedDocs(rangeQuery, "nested2")); + assertTrue(buildNestedHelper(mapperService).mightMatchNonNestedDocs(rangeQuery, "nested3")); + assertTrue(buildNestedHelper(mapperService).mightMatchNonNestedDocs(rangeQuery, "nested_missing")); } public void testDisjunction() { @@ -213,57 +217,57 @@ public void testDisjunction() { .add(new TermQuery(new Term("foo", "bar")), Occur.SHOULD) .add(new TermQuery(new Term("foo", "baz")), Occur.SHOULD) .build(); - assertFalse(new NestedHelper(mapperService).mightMatchNestedDocs(bq)); - assertTrue(new NestedHelper(mapperService).mightMatchNonNestedDocs(bq, "nested1")); + assertFalse(buildNestedHelper(mapperService).mightMatchNestedDocs(bq)); + assertTrue(buildNestedHelper(mapperService).mightMatchNonNestedDocs(bq, "nested1")); bq = new BooleanQuery.Builder() .add(new TermQuery(new Term("nested1.foo", "bar")), Occur.SHOULD) .add(new TermQuery(new Term("nested1.foo", "baz")), Occur.SHOULD) .build(); - assertTrue(new NestedHelper(mapperService).mightMatchNestedDocs(bq)); - assertFalse(new NestedHelper(mapperService).mightMatchNonNestedDocs(bq, "nested1")); + assertTrue(buildNestedHelper(mapperService).mightMatchNestedDocs(bq)); + assertFalse(buildNestedHelper(mapperService).mightMatchNonNestedDocs(bq, "nested1")); bq = new BooleanQuery.Builder() .add(new TermQuery(new Term("nested2.foo", "bar")), Occur.SHOULD) .add(new TermQuery(new Term("nested2.foo", "baz")), Occur.SHOULD) .build(); - assertTrue(new NestedHelper(mapperService).mightMatchNestedDocs(bq)); - assertTrue(new NestedHelper(mapperService).mightMatchNonNestedDocs(bq, "nested2")); + assertTrue(buildNestedHelper(mapperService).mightMatchNestedDocs(bq)); + assertTrue(buildNestedHelper(mapperService).mightMatchNonNestedDocs(bq, "nested2")); bq = new BooleanQuery.Builder() .add(new TermQuery(new Term("nested3.foo", "bar")), Occur.SHOULD) .add(new TermQuery(new Term("nested3.foo", "baz")), Occur.SHOULD) .build(); - assertTrue(new NestedHelper(mapperService).mightMatchNestedDocs(bq)); - assertTrue(new NestedHelper(mapperService).mightMatchNonNestedDocs(bq, "nested3")); + assertTrue(buildNestedHelper(mapperService).mightMatchNestedDocs(bq)); + assertTrue(buildNestedHelper(mapperService).mightMatchNonNestedDocs(bq, "nested3")); bq = new BooleanQuery.Builder() .add(new TermQuery(new Term("foo", "bar")), Occur.SHOULD) .add(new MatchAllDocsQuery(), Occur.SHOULD) .build(); - assertTrue(new NestedHelper(mapperService).mightMatchNestedDocs(bq)); - assertTrue(new NestedHelper(mapperService).mightMatchNonNestedDocs(bq, "nested1")); + assertTrue(buildNestedHelper(mapperService).mightMatchNestedDocs(bq)); + assertTrue(buildNestedHelper(mapperService).mightMatchNonNestedDocs(bq, "nested1")); bq = new BooleanQuery.Builder() .add(new TermQuery(new Term("nested1.foo", "bar")), Occur.SHOULD) .add(new MatchAllDocsQuery(), Occur.SHOULD) .build(); - assertTrue(new NestedHelper(mapperService).mightMatchNestedDocs(bq)); - assertTrue(new NestedHelper(mapperService).mightMatchNonNestedDocs(bq, "nested1")); + assertTrue(buildNestedHelper(mapperService).mightMatchNestedDocs(bq)); + assertTrue(buildNestedHelper(mapperService).mightMatchNonNestedDocs(bq, "nested1")); bq = new BooleanQuery.Builder() .add(new TermQuery(new Term("nested2.foo", "bar")), Occur.SHOULD) .add(new MatchAllDocsQuery(), Occur.SHOULD) .build(); - assertTrue(new NestedHelper(mapperService).mightMatchNestedDocs(bq)); - assertTrue(new NestedHelper(mapperService).mightMatchNonNestedDocs(bq, "nested2")); + assertTrue(buildNestedHelper(mapperService).mightMatchNestedDocs(bq)); + assertTrue(buildNestedHelper(mapperService).mightMatchNonNestedDocs(bq, "nested2")); bq = new BooleanQuery.Builder() .add(new TermQuery(new Term("nested3.foo", "bar")), Occur.SHOULD) .add(new MatchAllDocsQuery(), Occur.SHOULD) .build(); - assertTrue(new NestedHelper(mapperService).mightMatchNestedDocs(bq)); - assertTrue(new NestedHelper(mapperService).mightMatchNonNestedDocs(bq, "nested3")); + assertTrue(buildNestedHelper(mapperService).mightMatchNestedDocs(bq)); + assertTrue(buildNestedHelper(mapperService).mightMatchNonNestedDocs(bq, "nested3")); } private static Occur requiredOccur() { @@ -275,57 +279,57 @@ public void testConjunction() { .add(new TermQuery(new Term("foo", "bar")), requiredOccur()) .add(new MatchAllDocsQuery(), requiredOccur()) .build(); - assertFalse(new NestedHelper(mapperService).mightMatchNestedDocs(bq)); - assertTrue(new NestedHelper(mapperService).mightMatchNonNestedDocs(bq, "nested1")); + assertFalse(buildNestedHelper(mapperService).mightMatchNestedDocs(bq)); + assertTrue(buildNestedHelper(mapperService).mightMatchNonNestedDocs(bq, "nested1")); bq = new BooleanQuery.Builder() .add(new TermQuery(new Term("nested1.foo", "bar")), requiredOccur()) .add(new MatchAllDocsQuery(), requiredOccur()) .build(); - assertTrue(new NestedHelper(mapperService).mightMatchNestedDocs(bq)); - assertFalse(new NestedHelper(mapperService).mightMatchNonNestedDocs(bq, "nested1")); + assertTrue(buildNestedHelper(mapperService).mightMatchNestedDocs(bq)); + assertFalse(buildNestedHelper(mapperService).mightMatchNonNestedDocs(bq, "nested1")); bq = new BooleanQuery.Builder() .add(new TermQuery(new Term("nested2.foo", "bar")), requiredOccur()) .add(new MatchAllDocsQuery(), requiredOccur()) .build(); - assertTrue(new NestedHelper(mapperService).mightMatchNestedDocs(bq)); - assertTrue(new NestedHelper(mapperService).mightMatchNonNestedDocs(bq, "nested2")); + assertTrue(buildNestedHelper(mapperService).mightMatchNestedDocs(bq)); + assertTrue(buildNestedHelper(mapperService).mightMatchNonNestedDocs(bq, "nested2")); bq = new BooleanQuery.Builder() .add(new TermQuery(new Term("nested3.foo", "bar")), requiredOccur()) .add(new MatchAllDocsQuery(), requiredOccur()) .build(); - assertTrue(new NestedHelper(mapperService).mightMatchNestedDocs(bq)); - assertTrue(new NestedHelper(mapperService).mightMatchNonNestedDocs(bq, "nested3")); + assertTrue(buildNestedHelper(mapperService).mightMatchNestedDocs(bq)); + assertTrue(buildNestedHelper(mapperService).mightMatchNonNestedDocs(bq, "nested3")); bq = new BooleanQuery.Builder() .add(new MatchAllDocsQuery(), requiredOccur()) .add(new MatchAllDocsQuery(), requiredOccur()) .build(); - assertTrue(new NestedHelper(mapperService).mightMatchNestedDocs(bq)); - assertTrue(new NestedHelper(mapperService).mightMatchNonNestedDocs(bq, "nested1")); + assertTrue(buildNestedHelper(mapperService).mightMatchNestedDocs(bq)); + assertTrue(buildNestedHelper(mapperService).mightMatchNonNestedDocs(bq, "nested1")); bq = new BooleanQuery.Builder() .add(new MatchAllDocsQuery(), requiredOccur()) .add(new MatchAllDocsQuery(), requiredOccur()) .build(); - assertTrue(new NestedHelper(mapperService).mightMatchNestedDocs(bq)); - assertTrue(new NestedHelper(mapperService).mightMatchNonNestedDocs(bq, "nested1")); + assertTrue(buildNestedHelper(mapperService).mightMatchNestedDocs(bq)); + assertTrue(buildNestedHelper(mapperService).mightMatchNonNestedDocs(bq, "nested1")); bq = new BooleanQuery.Builder() .add(new MatchAllDocsQuery(), requiredOccur()) .add(new MatchAllDocsQuery(), requiredOccur()) .build(); - assertTrue(new NestedHelper(mapperService).mightMatchNestedDocs(bq)); - assertTrue(new NestedHelper(mapperService).mightMatchNonNestedDocs(bq, "nested2")); + assertTrue(buildNestedHelper(mapperService).mightMatchNestedDocs(bq)); + assertTrue(buildNestedHelper(mapperService).mightMatchNonNestedDocs(bq, "nested2")); bq = new BooleanQuery.Builder() .add(new MatchAllDocsQuery(), requiredOccur()) .add(new MatchAllDocsQuery(), requiredOccur()) .build(); - assertTrue(new NestedHelper(mapperService).mightMatchNestedDocs(bq)); - assertTrue(new NestedHelper(mapperService).mightMatchNonNestedDocs(bq, "nested3")); + assertTrue(buildNestedHelper(mapperService).mightMatchNestedDocs(bq)); + assertTrue(buildNestedHelper(mapperService).mightMatchNonNestedDocs(bq, "nested3")); } public void testNested() throws IOException { @@ -340,11 +344,11 @@ public void testNested() throws IOException { .build(); assertEquals(expectedChildQuery, query.getChildQuery()); - assertFalse(new NestedHelper(mapperService).mightMatchNestedDocs(query)); - assertTrue(new NestedHelper(mapperService).mightMatchNonNestedDocs(query, "nested1")); - assertTrue(new NestedHelper(mapperService).mightMatchNonNestedDocs(query, "nested2")); - assertTrue(new NestedHelper(mapperService).mightMatchNonNestedDocs(query, "nested3")); - assertTrue(new NestedHelper(mapperService).mightMatchNonNestedDocs(query, "nested_missing")); + assertFalse(buildNestedHelper(mapperService).mightMatchNestedDocs(query)); + assertTrue(buildNestedHelper(mapperService).mightMatchNonNestedDocs(query, "nested1")); + assertTrue(buildNestedHelper(mapperService).mightMatchNonNestedDocs(query, "nested2")); + assertTrue(buildNestedHelper(mapperService).mightMatchNonNestedDocs(query, "nested3")); + assertTrue(buildNestedHelper(mapperService).mightMatchNonNestedDocs(query, "nested_missing")); queryBuilder = new NestedQueryBuilder("nested1", new TermQueryBuilder("nested1.foo", "bar"), ScoreMode.Avg); query = (ESToParentBlockJoinQuery) queryBuilder.toQuery(context); @@ -353,11 +357,11 @@ public void testNested() throws IOException { expectedChildQuery = new TermQuery(new Term("nested1.foo", "bar")); assertEquals(expectedChildQuery, query.getChildQuery()); - assertFalse(new NestedHelper(mapperService).mightMatchNestedDocs(query)); - assertTrue(new NestedHelper(mapperService).mightMatchNonNestedDocs(query, "nested1")); - assertTrue(new NestedHelper(mapperService).mightMatchNonNestedDocs(query, "nested2")); - assertTrue(new NestedHelper(mapperService).mightMatchNonNestedDocs(query, "nested3")); - assertTrue(new NestedHelper(mapperService).mightMatchNonNestedDocs(query, "nested_missing")); + assertFalse(buildNestedHelper(mapperService).mightMatchNestedDocs(query)); + assertTrue(buildNestedHelper(mapperService).mightMatchNonNestedDocs(query, "nested1")); + assertTrue(buildNestedHelper(mapperService).mightMatchNonNestedDocs(query, "nested2")); + assertTrue(buildNestedHelper(mapperService).mightMatchNonNestedDocs(query, "nested3")); + assertTrue(buildNestedHelper(mapperService).mightMatchNonNestedDocs(query, "nested_missing")); queryBuilder = new NestedQueryBuilder("nested2", new TermQueryBuilder("nested2.foo", "bar"), ScoreMode.Avg); query = (ESToParentBlockJoinQuery) queryBuilder.toQuery(context); @@ -369,11 +373,11 @@ public void testNested() throws IOException { .build(); assertEquals(expectedChildQuery, query.getChildQuery()); - assertFalse(new NestedHelper(mapperService).mightMatchNestedDocs(query)); - assertTrue(new NestedHelper(mapperService).mightMatchNonNestedDocs(query, "nested1")); - assertTrue(new NestedHelper(mapperService).mightMatchNonNestedDocs(query, "nested2")); - assertTrue(new NestedHelper(mapperService).mightMatchNonNestedDocs(query, "nested3")); - assertTrue(new NestedHelper(mapperService).mightMatchNonNestedDocs(query, "nested_missing")); + assertFalse(buildNestedHelper(mapperService).mightMatchNestedDocs(query)); + assertTrue(buildNestedHelper(mapperService).mightMatchNonNestedDocs(query, "nested1")); + assertTrue(buildNestedHelper(mapperService).mightMatchNonNestedDocs(query, "nested2")); + assertTrue(buildNestedHelper(mapperService).mightMatchNonNestedDocs(query, "nested3")); + assertTrue(buildNestedHelper(mapperService).mightMatchNonNestedDocs(query, "nested_missing")); queryBuilder = new NestedQueryBuilder("nested3", new TermQueryBuilder("nested3.foo", "bar"), ScoreMode.Avg); query = (ESToParentBlockJoinQuery) queryBuilder.toQuery(context); @@ -385,10 +389,10 @@ public void testNested() throws IOException { .build(); assertEquals(expectedChildQuery, query.getChildQuery()); - assertFalse(new NestedHelper(mapperService).mightMatchNestedDocs(query)); - assertTrue(new NestedHelper(mapperService).mightMatchNonNestedDocs(query, "nested1")); - assertTrue(new NestedHelper(mapperService).mightMatchNonNestedDocs(query, "nested2")); - assertTrue(new NestedHelper(mapperService).mightMatchNonNestedDocs(query, "nested3")); - assertTrue(new NestedHelper(mapperService).mightMatchNonNestedDocs(query, "nested_missing")); + assertFalse(buildNestedHelper(mapperService).mightMatchNestedDocs(query)); + assertTrue(buildNestedHelper(mapperService).mightMatchNonNestedDocs(query, "nested1")); + assertTrue(buildNestedHelper(mapperService).mightMatchNonNestedDocs(query, "nested2")); + assertTrue(buildNestedHelper(mapperService).mightMatchNonNestedDocs(query, "nested3")); + assertTrue(buildNestedHelper(mapperService).mightMatchNonNestedDocs(query, "nested_missing")); } } diff --git a/test/framework/src/main/java/org/elasticsearch/index/engine/EngineTestCase.java b/test/framework/src/main/java/org/elasticsearch/index/engine/EngineTestCase.java index b7a7cf6c172a5..63abd9f4701da 100644 --- a/test/framework/src/main/java/org/elasticsearch/index/engine/EngineTestCase.java +++ b/test/framework/src/main/java/org/elasticsearch/index/engine/EngineTestCase.java @@ -80,6 +80,7 @@ import org.elasticsearch.index.fieldvisitor.IdOnlyFieldVisitor; import org.elasticsearch.index.mapper.DocumentMapper; import org.elasticsearch.index.mapper.IdFieldMapper; +import org.elasticsearch.index.mapper.MappedFieldType; import org.elasticsearch.index.mapper.MapperService; import org.elasticsearch.index.mapper.Mapping; import org.elasticsearch.index.mapper.ParseContext; @@ -1049,9 +1050,10 @@ public static List getDocIds(Engine engine, boolean refresh * Reads all engine operations that have been processed by the engine from Lucene index. * The returned operations are sorted and de-duplicated, thus each sequence number will be have at most one operation. */ - public static List readAllOperationsInLucene(Engine engine, MapperService mapper) throws IOException { + public static List readAllOperationsInLucene(Engine engine, + Function fieldTypeLookup) throws IOException { final List operations = new ArrayList<>(); - try (Translog.Snapshot snapshot = engine.newChangesSnapshot("test", mapper, 0, Long.MAX_VALUE, false)) { + try (Translog.Snapshot snapshot = engine.newChangesSnapshot("test", fieldTypeLookup, 0, Long.MAX_VALUE, false)) { Translog.Operation op; while ((op = snapshot.next()) != null){ operations.add(op); @@ -1074,7 +1076,7 @@ public static void assertConsistentHistoryBetweenTranslogAndLuceneIndex(Engine e translogOps.add(op); } } - final Map luceneOps = readAllOperationsInLucene(engine, mapper).stream() + final Map luceneOps = readAllOperationsInLucene(engine, mapper::fieldType).stream() .collect(Collectors.toMap(Translog.Operation::seqNo, Function.identity())); final long maxSeqNo = ((InternalEngine) engine).getLocalCheckpointTracker().getMaxSeqNo(); for (Translog.Operation op : translogOps) { diff --git a/x-pack/plugin/ccr/src/test/java/org/elasticsearch/xpack/ccr/index/engine/FollowingEngineTests.java b/x-pack/plugin/ccr/src/test/java/org/elasticsearch/xpack/ccr/index/engine/FollowingEngineTests.java index 0a925cb1500dc..5f65fc3a7b3fa 100644 --- a/x-pack/plugin/ccr/src/test/java/org/elasticsearch/xpack/ccr/index/engine/FollowingEngineTests.java +++ b/x-pack/plugin/ccr/src/test/java/org/elasticsearch/xpack/ccr/index/engine/FollowingEngineTests.java @@ -527,7 +527,7 @@ private void fetchOperations(AtomicBoolean stopped, AtomicLong lastFetchedSeqNo, final long fromSeqNo = randomLongBetween(Math.max(lastSeqNo - 5, 0), lastSeqNo + 1); final long toSeqNo = randomLongBetween(nextSeqNo, Math.min(nextSeqNo + 5, checkpoint)); try (Translog.Snapshot snapshot = - shuffleSnapshot(leader.newChangesSnapshot("test", mapperService, fromSeqNo, toSeqNo, true))) { + shuffleSnapshot(leader.newChangesSnapshot("test", mapperService::fieldType, fromSeqNo, toSeqNo, true))) { follower.advanceMaxSeqNoOfUpdatesOrDeletes(leader.getMaxSeqNoOfUpdatesOrDeletes()); Translog.Operation op; while ((op = snapshot.next()) != null) { diff --git a/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/security/authz/permission/DocumentPermissions.java b/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/security/authz/permission/DocumentPermissions.java index 712e45dae1658..1b83ca2467a9c 100644 --- a/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/security/authz/permission/DocumentPermissions.java +++ b/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/security/authz/permission/DocumentPermissions.java @@ -123,7 +123,7 @@ private static void buildRoleQuery(User user, ScriptService scriptService, Shard Query roleQuery = queryShardContext.toQuery(queryBuilder).query(); filter.add(roleQuery, SHOULD); if (queryShardContext.getMapperService().hasNested()) { - NestedHelper nestedHelper = new NestedHelper(queryShardContext.getMapperService()); + NestedHelper nestedHelper = new NestedHelper(queryShardContext::getObjectMapper, queryShardContext::fieldMapper); if (nestedHelper.mightMatchNestedDocs(roleQuery)) { roleQuery = new BooleanQuery.Builder().add(roleQuery, FILTER) .add(Queries.newNonNestedFilter(), FILTER).build(); diff --git a/x-pack/plugin/core/src/test/java/org/elasticsearch/snapshots/SourceOnlySnapshotShardTests.java b/x-pack/plugin/core/src/test/java/org/elasticsearch/snapshots/SourceOnlySnapshotShardTests.java index 32b0e9986ad09..9cee69388121e 100644 --- a/x-pack/plugin/core/src/test/java/org/elasticsearch/snapshots/SourceOnlySnapshotShardTests.java +++ b/x-pack/plugin/core/src/test/java/org/elasticsearch/snapshots/SourceOnlySnapshotShardTests.java @@ -327,7 +327,7 @@ public IndexShard reindex(DirectoryReader reader, MappingMetadata mapping) throw if (liveDocs == null || liveDocs.get(i)) { rootFieldsVisitor.reset(); leafReader.document(i, rootFieldsVisitor); - rootFieldsVisitor.postProcess(targetShard.mapperService()); + rootFieldsVisitor.postProcess(targetShard.mapperService()::fieldType); String id = rootFieldsVisitor.id(); BytesReference source = rootFieldsVisitor.source(); assert source != null : "_source is null but should have been filtered out at snapshot time"; diff --git a/x-pack/plugin/enrich/src/main/java/org/elasticsearch/xpack/enrich/action/EnrichShardMultiSearchAction.java b/x-pack/plugin/enrich/src/main/java/org/elasticsearch/xpack/enrich/action/EnrichShardMultiSearchAction.java index 907fa1266ca72..ad248e1262214 100644 --- a/x-pack/plugin/enrich/src/main/java/org/elasticsearch/xpack/enrich/action/EnrichShardMultiSearchAction.java +++ b/x-pack/plugin/enrich/src/main/java/org/elasticsearch/xpack/enrich/action/EnrichShardMultiSearchAction.java @@ -48,7 +48,6 @@ import org.elasticsearch.index.IndexService; import org.elasticsearch.index.engine.Engine; import org.elasticsearch.index.fieldvisitor.FieldsVisitor; -import org.elasticsearch.index.mapper.MapperService; import org.elasticsearch.index.query.QueryBuilder; import org.elasticsearch.index.query.QueryShardContext; import org.elasticsearch.index.shard.IndexShard; @@ -236,8 +235,6 @@ protected MultiSearchResponse shardOperation(Request request, ShardId shardId) t () -> { throw new UnsupportedOperationException(); }, null ); - final MapperService mapperService = context.getMapperService(); - final MultiSearchResponse.Item[] items = new MultiSearchResponse.Item[request.multiSearchRequest.requests().size()]; for (int i = 0; i < request.multiSearchRequest.requests().size(); i++) { final SearchSourceBuilder searchSourceBuilder = request.multiSearchRequest.requests().get(i).source(); @@ -257,7 +254,7 @@ protected MultiSearchResponse shardOperation(Request request, ShardId shardId) t visitor.reset(); searcher.doc(scoreDoc.doc, visitor); - visitor.postProcess(mapperService); + visitor.postProcess(context::fieldMapper); final SearchHit hit = new SearchHit(scoreDoc.doc, visitor.id(), Map.of(), Map.of()); hit.sourceRef(filterSource(fetchSourceContext, visitor.source())); hits[j] = hit; diff --git a/x-pack/plugin/runtime-fields/src/test/java/org/elasticsearch/xpack/runtimefields/mapper/AbstractScriptFieldTypeTestCase.java b/x-pack/plugin/runtime-fields/src/test/java/org/elasticsearch/xpack/runtimefields/mapper/AbstractScriptFieldTypeTestCase.java index b0bf2b8f1f38d..f1717b8c59f30 100644 --- a/x-pack/plugin/runtime-fields/src/test/java/org/elasticsearch/xpack/runtimefields/mapper/AbstractScriptFieldTypeTestCase.java +++ b/x-pack/plugin/runtime-fields/src/test/java/org/elasticsearch/xpack/runtimefields/mapper/AbstractScriptFieldTypeTestCase.java @@ -71,7 +71,6 @@ protected static QueryShardContext mockContext(boolean allowExpensiveQueries, Ma MapperService mapperService = mock(MapperService.class); when(mapperService.fieldType(anyString())).thenReturn(mappedFieldType); QueryShardContext context = mock(QueryShardContext.class); - when(context.getMapperService()).thenReturn(mapperService); if (mappedFieldType != null) { when(context.fieldMapper(anyString())).thenReturn(mappedFieldType); when(context.getSearchAnalyzer(any())).thenReturn(mappedFieldType.getTextSearchInfo().getSearchAnalyzer());