/* * Licensed to Elasticsearch under one or more contributor * license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright * ownership. Elasticsearch licenses this file to you under * the Apache License, Version 2.0 (the "License"); you may * not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.elasticsearch.test; import com.carrotsearch.hppc.ObjectObjectAssociativeContainer; import org.apache.cassandra.cql3.statements.ParsedStatement; import org.apache.lucene.search.Collector; import org.apache.lucene.search.Query; import org.apache.lucene.search.Sort; import org.apache.lucene.util.Counter; import org.elassandra.search.SearchProcessor; import org.elasticsearch.action.search.SearchType; import org.elasticsearch.cache.recycler.PageCacheRecycler; import org.elasticsearch.cluster.ClusterService; import org.elasticsearch.cluster.ClusterState; import org.elasticsearch.common.HasContext; import org.elasticsearch.common.HasContextAndHeaders; import org.elasticsearch.common.HasHeaders; import org.elasticsearch.common.ParseFieldMatcher; import org.elasticsearch.common.collect.ImmutableOpenMap; import org.elasticsearch.common.util.BigArrays; import org.elasticsearch.index.IndexService; import org.elasticsearch.index.analysis.AnalysisService; import org.elasticsearch.index.cache.bitset.BitsetFilterCache; import org.elasticsearch.index.engine.Engine; import org.elasticsearch.index.fielddata.IndexFieldDataService; import org.elasticsearch.index.mapper.MappedFieldType; import org.elasticsearch.index.mapper.MapperService; import org.elasticsearch.index.mapper.object.ObjectMapper; import org.elasticsearch.index.query.IndexQueryParserService; import org.elasticsearch.index.query.ParsedQuery; import org.elasticsearch.index.shard.IndexShard; import org.elasticsearch.index.similarity.SimilarityService; import org.elasticsearch.script.ScriptService; import org.elasticsearch.search.SearchShardTarget; import org.elasticsearch.search.aggregations.SearchContextAggregations; import org.elasticsearch.search.dfs.DfsSearchResult; import org.elasticsearch.search.fetch.FetchSearchResult; import org.elasticsearch.search.fetch.FetchSubPhase; import org.elasticsearch.search.fetch.FetchSubPhaseContext; import org.elasticsearch.search.fetch.innerhits.InnerHitsContext; import org.elasticsearch.search.fetch.script.ScriptFieldsContext; import org.elasticsearch.search.fetch.source.FetchSourceContext; import org.elasticsearch.search.highlight.SearchContextHighlight; import org.elasticsearch.search.internal.ContextIndexSearcher; import org.elasticsearch.search.internal.ScrollContext; import org.elasticsearch.search.internal.SearchContext; import org.elasticsearch.search.internal.ShardSearchRequest; import org.elasticsearch.search.lookup.SearchLookup; import org.elasticsearch.search.profile.Profiler; import org.elasticsearch.search.profile.Profilers; import org.elasticsearch.search.query.QuerySearchResult; import org.elasticsearch.search.rescore.RescoreSearchContext; import org.elasticsearch.search.scan.ScanContext; import org.elasticsearch.search.suggest.SuggestionSearchContext; import org.elasticsearch.threadpool.ThreadPool; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; public class TestSearchContext extends SearchContext { final PageCacheRecycler pageCacheRecycler; final BigArrays bigArrays; final IndexService indexService; final ClusterService clusterService; final IndexFieldDataService indexFieldDataService; final BitsetFilterCache fixedBitSetFilterCache; final ThreadPool threadPool; final Map<Class<?>, Collector> queryCollectors = new HashMap<>(); final IndexShard indexShard; final Counter timeEstimateCounter = Counter.newCounter(); final QuerySearchResult queryResult = new QuerySearchResult(); ParsedQuery originalQuery; ParsedQuery postFilter; Query query; Float minScore; ContextIndexSearcher searcher; int size; private int terminateAfter = DEFAULT_TERMINATE_AFTER; private String[] types; private SearchContextAggregations aggregations; private final long originNanoTime = System.nanoTime(); private final Map<String, FetchSubPhaseContext> subPhaseContexts = new HashMap<>(); public TestSearchContext(ThreadPool threadPool,PageCacheRecycler pageCacheRecycler, BigArrays bigArrays, IndexService indexService) { this(threadPool, pageCacheRecycler, bigArrays, indexService, null); } public TestSearchContext(ThreadPool threadPool,PageCacheRecycler pageCacheRecycler, BigArrays bigArrays, IndexService indexService, ClusterService clusterService) { super(ParseFieldMatcher.STRICT, null); this.pageCacheRecycler = pageCacheRecycler; this.bigArrays = bigArrays.withCircuitBreaking(); this.indexService = indexService; this.indexFieldDataService = indexService.fieldData(); this.fixedBitSetFilterCache = indexService.bitsetFilterCache(); this.threadPool = threadPool; this.indexShard = indexService.shard(0); this.clusterService = clusterService; } public TestSearchContext() { super(ParseFieldMatcher.STRICT, null); this.pageCacheRecycler = null; this.bigArrays = null; this.indexService = null; this.indexFieldDataService = null; this.threadPool = null; this.fixedBitSetFilterCache = null; this.indexShard = null; this.clusterService = null; } public void setTypes(String... types) { this.types = types; } @Override public void preProcess() { } @Override public Query searchFilter(String[] types) { return null; } @Override public long id() { return 0; } @Override public String source() { return null; } @Override public ShardSearchRequest request() { return null; } @Override public SearchType searchType() { return null; } @Override public SearchContext searchType(SearchType searchType) { return null; } @Override public SearchShardTarget shardTarget() { return null; } @Override public int numberOfShards() { return 1; } @Override public boolean hasTypes() { return false; } @Override public String[] types() { return new String[0]; } @Override public float queryBoost() { return 0; } @Override public SearchContext queryBoost(float queryBoost) { return null; } @Override public long getOriginNanoTime() { return originNanoTime; } @Override protected long nowInMillisImpl() { return 0; } @Override public ScrollContext scrollContext() { return null; } @Override public SearchContext scrollContext(ScrollContext scrollContext) { throw new UnsupportedOperationException(); } @Override public SearchContextAggregations aggregations() { return aggregations; } @Override public SearchContext aggregations(SearchContextAggregations aggregations) { this.aggregations = aggregations; return this; } @Override public <SubPhaseContext extends FetchSubPhaseContext> SubPhaseContext getFetchSubPhaseContext(FetchSubPhase.ContextFactory<SubPhaseContext> contextFactory) { String subPhaseName = contextFactory.getName(); if (subPhaseContexts.get(subPhaseName) == null) { subPhaseContexts.put(subPhaseName, contextFactory.newContextInstance()); } return (SubPhaseContext) subPhaseContexts.get(subPhaseName); } @Override public SearchContextHighlight highlight() { return null; } @Override public void highlight(SearchContextHighlight highlight) { } @Override public SuggestionSearchContext suggest() { return null; } @Override public void suggest(SuggestionSearchContext suggest) { } @Override public List<RescoreSearchContext> rescore() { return null; } @Override public void addRescore(RescoreSearchContext rescore) { } @Override public boolean hasScriptFields() { return false; } @Override public ScriptFieldsContext scriptFields() { return null; } @Override public boolean sourceRequested() { return false; } @Override public boolean hasFetchSourceContext() { return false; } @Override public FetchSourceContext fetchSourceContext() { return null; } @Override public SearchContext fetchSourceContext(FetchSourceContext fetchSourceContext) { return null; } @Override public ContextIndexSearcher searcher() { return searcher; } public void setSearcher(Engine.Searcher searcher) { this.searcher = new ContextIndexSearcher(searcher, indexService.cache().query(), indexShard.getQueryCachingPolicy()); } @Override public IndexShard indexShard() { return indexShard; } @Override public MapperService mapperService() { if (indexService != null) { return indexService.mapperService(); } return null; } @Override public AnalysisService analysisService() { return indexService.analysisService(); } @Override public IndexQueryParserService queryParserService() { return indexService.queryParserService(); } @Override public SimilarityService similarityService() { return null; } @Override public ScriptService scriptService() { return indexService.injector().getInstance(ScriptService.class); } @Override public PageCacheRecycler pageCacheRecycler() { return pageCacheRecycler; } @Override public BigArrays bigArrays() { return bigArrays; } @Override public BitsetFilterCache bitsetFilterCache() { return fixedBitSetFilterCache; } @Override public IndexFieldDataService fieldData() { return indexFieldDataService; } @Override public long timeoutInMillis() { return 0; } @Override public void timeoutInMillis(long timeoutInMillis) { } @Override public int terminateAfter() { return terminateAfter; } @Override public void terminateAfter(int terminateAfter) { this.terminateAfter = terminateAfter; } @Override public SearchContext minimumScore(float minimumScore) { this.minScore = minimumScore; return this; } @Override public Float minimumScore() { return minScore; } @Override public SearchContext sort(Sort sort) { return null; } @Override public Sort sort() { return null; } @Override public SearchContext trackScores(boolean trackScores) { return null; } @Override public boolean trackScores() { return false; } @Override public SearchContext parsedPostFilter(ParsedQuery postFilter) { this.postFilter = postFilter; return this; } @Override public ParsedQuery parsedPostFilter() { return postFilter; } @Override public Query aliasFilter() { return null; } @Override public SearchContext parsedQuery(ParsedQuery query) { this.originalQuery = query; this.query = query.query(); return this; } @Override public ParsedQuery parsedQuery() { return originalQuery; } @Override public Query query() { return query; } @Override public int from() { return 0; } @Override public SearchContext from(int from) { return null; } @Override public int size() { return size; } public void setSize(int size) { this.size = size; } @Override public SearchContext size(int size) { return null; } @Override public boolean hasFieldNames() { return false; } @Override public List<String> fieldNames() { return null; } @Override public void emptyFieldNames() { } @Override public boolean explain() { return false; } @Override public void explain(boolean explain) { } @Override public List<String> groupStats() { return null; } @Override public void groupStats(List<String> groupStats) { } @Override public boolean version() { return false; } @Override public void version(boolean version) { } @Override public int[] docIdsToLoad() { return new int[0]; } @Override public int docIdsToLoadFrom() { return 0; } @Override public int docIdsToLoadSize() { return 0; } @Override public SearchContext docIdsToLoad(int[] docIdsToLoad, int docsIdsToLoadFrom, int docsIdsToLoadSize) { return null; } @Override public void accessed(long accessTime) { } @Override public long lastAccessTime() { return 0; } @Override public long keepAlive() { return 0; } @Override public void keepAlive(long keepAlive) { } @Override public SearchLookup lookup() { return new SearchLookup(mapperService(), fieldData(), null); } @Override public DfsSearchResult dfsResult() { return null; } @Override public QuerySearchResult queryResult() { return queryResult; } @Override public FetchSearchResult fetchResult() { return null; } @Override public ScanContext scanContext() { return null; } @Override public MappedFieldType smartNameFieldType(String name) { if (mapperService() != null) { return mapperService().smartNameFieldType(name, types()); } return null; } @Override public MappedFieldType smartNameFieldTypeFromAnyType(String name) { if (mapperService() != null) { return mapperService().smartNameFieldType(name); } return null; } @Override public ObjectMapper getObjectMapper(String name) { if (mapperService() != null) { return mapperService().getObjectMapper(name, types); } return null; } @Override public void doClose() { } @Override public Counter timeEstimateCounter() { return timeEstimateCounter; } @Override public InnerHitsContext innerHits() { throw new UnsupportedOperationException(); } @Override public <V> V putInContext(Object key, Object value) { return null; } @Override public void putAllInContext(ObjectObjectAssociativeContainer<Object, Object> map) { } @Override public <V> V getFromContext(Object key) { return null; } @Override public <V> V getFromContext(Object key, V defaultValue) { return defaultValue; } @Override public boolean hasInContext(Object key) { return false; } @Override public int contextSize() { return 0; } @Override public boolean isContextEmpty() { return true; } @Override public ImmutableOpenMap<Object, Object> getContext() { return ImmutableOpenMap.of(); } @Override public void copyContextFrom(HasContext other) { } @Override public <V> void putHeader(String key, V value) {} @Override public <V> V getHeader(String key) { return null; } @Override public boolean hasHeader(String key) { return false; } @Override public Set<String> getHeaders() { return Collections.EMPTY_SET; } @Override public void copyHeadersFrom(HasHeaders from) {} @Override public void copyContextAndHeadersFrom(HasContextAndHeaders other) {} @Override public Map<Class<?>, Collector> queryCollectors() { return queryCollectors; } @Override public Profilers getProfilers() { return null; // no profiling } @Override public ClusterService clusterService() { return clusterService; } @Override public boolean includeNode() { // TODO Auto-generated method stub return false; } @Override public void includeNode(boolean includeNode) { // TODO Auto-generated method stub } @Override public ClusterState getClusterState() { return clusterService.state(); } @Override public SearchProcessor searchProcessor() { // TODO Auto-generated method stub return null; } }