Browse Source

Remove SearchPhase interface (#62050)

The interface is never used as an abstraction - implementations are are called directly,
and most of them don't need to implement the preProcess method.
Alan Woodward 5 years ago
parent
commit
6a1c3e6059

+ 51 - 0
server/src/main/java/org/elasticsearch/search/SearchContextSourcePrinter.java

@@ -0,0 +1,51 @@
+/*
+ * 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.search;
+
+import org.elasticsearch.search.internal.SearchContext;
+import org.elasticsearch.tasks.Task;
+
+public class SearchContextSourcePrinter {
+    private final SearchContext searchContext;
+
+    public SearchContextSourcePrinter(SearchContext searchContext) {
+        this.searchContext = searchContext;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder builder = new StringBuilder();
+        builder.append(searchContext.indexShard().shardId());
+        builder.append(" ");
+        if (searchContext.request() != null &&
+            searchContext.request().source() != null) {
+            builder.append("source[").append(searchContext.request().source().toString()).append("], ");
+        } else {
+            builder.append("source[], ");
+        }
+        if (searchContext.getTask() != null &&
+            searchContext.getTask().getHeader(Task.X_OPAQUE_ID) != null) {
+            builder.append("id[").append(searchContext.getTask().getHeader(Task.X_OPAQUE_ID)).append("], ");
+        } else {
+            builder.append("id[], ");
+        }
+        return builder.toString();
+    }
+}

+ 0 - 67
server/src/main/java/org/elasticsearch/search/SearchPhase.java

@@ -1,67 +0,0 @@
-/*
- * 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.search;
-
-import org.elasticsearch.search.internal.SearchContext;
-import org.elasticsearch.tasks.Task;
-
-/**
- * Represents a phase of a search request e.g. query, fetch etc.
- */
-public interface SearchPhase {
-
-    /**
-     * Performs pre processing of the search context before the execute.
-     */
-    void preProcess(SearchContext context);
-
-    /**
-     * Executes the search phase
-     */
-    void execute(SearchContext context);
-
-    class SearchContextSourcePrinter {
-        private final SearchContext searchContext;
-
-        public SearchContextSourcePrinter(SearchContext searchContext) {
-            this.searchContext = searchContext;
-        }
-
-        @Override
-        public String toString() {
-            StringBuilder builder = new StringBuilder();
-            builder.append(searchContext.indexShard().shardId());
-            builder.append(" ");
-            if (searchContext.request() != null &&
-                    searchContext.request().source() != null) {
-                builder.append("source[").append(searchContext.request().source().toString()).append("], ");
-            } else {
-                builder.append("source[], ");
-            }
-            if (searchContext.getTask() != null &&
-                    searchContext.getTask().getHeader(Task.X_OPAQUE_ID) != null) {
-                builder.append("id[").append(searchContext.getTask().getHeader(Task.X_OPAQUE_ID)).append("], ");
-            } else {
-                builder.append("id[], ");
-            }
-            return builder.toString();
-        }
-    }
-}

+ 0 - 2
server/src/main/java/org/elasticsearch/search/SearchService.java

@@ -762,9 +762,7 @@ public class SearchService extends AbstractLifecycleComponent implements IndexEv
             context.setTask(task);
 
             // pre process
-            dfsPhase.preProcess(context);
             queryPhase.preProcess(context);
-            fetchPhase.preProcess(context);
         } catch (Exception e) {
             context.close();
             throw e;

+ 1 - 4
server/src/main/java/org/elasticsearch/search/aggregations/AggregationPhase.java

@@ -22,7 +22,6 @@ import org.apache.lucene.search.Collector;
 import org.apache.lucene.search.Query;
 import org.elasticsearch.common.inject.Inject;
 import org.elasticsearch.common.lucene.search.Queries;
-import org.elasticsearch.search.SearchPhase;
 import org.elasticsearch.search.aggregations.bucket.global.GlobalAggregator;
 import org.elasticsearch.search.internal.SearchContext;
 import org.elasticsearch.search.profile.query.CollectorResult;
@@ -37,13 +36,12 @@ import java.util.List;
 /**
  * Aggregation phase of a search request, used to collect aggregations
  */
-public class AggregationPhase implements SearchPhase {
+public class AggregationPhase {
 
     @Inject
     public AggregationPhase() {
     }
 
-    @Override
     public void preProcess(SearchContext context) {
         if (context.aggregations() != null) {
             List<Aggregator> collectors = new ArrayList<>();
@@ -73,7 +71,6 @@ public class AggregationPhase implements SearchPhase {
         }
     }
 
-    @Override
     public void execute(SearchContext context) {
         if (context.aggregations() == null) {
             context.queryResult().aggregations(null);

+ 1 - 7
server/src/main/java/org/elasticsearch/search/dfs/DfsPhase.java

@@ -27,7 +27,6 @@ import org.apache.lucene.search.Query;
 import org.apache.lucene.search.ScoreMode;
 import org.apache.lucene.search.TermStatistics;
 import org.elasticsearch.common.collect.HppcMaps;
-import org.elasticsearch.search.SearchPhase;
 import org.elasticsearch.search.internal.SearchContext;
 import org.elasticsearch.search.rescore.RescoreContext;
 import org.elasticsearch.tasks.TaskCancelledException;
@@ -40,13 +39,8 @@ import java.util.Map;
  * Dfs phase of a search request, used to make scoring 100% accurate by collecting additional info from each shard before the query phase.
  * The additional information is used to better compare the scores coming from all the shards, which depend on local factors (e.g. idf)
  */
-public class DfsPhase implements SearchPhase {
+public class DfsPhase {
 
-    @Override
-    public void preProcess(SearchContext context) {
-    }
-
-    @Override
     public void execute(SearchContext context) {
         try {
             ObjectObjectHashMap<String, CollectionStatistics> fieldStatistics = HppcMaps.newNoNullKeysMap();

+ 2 - 7
server/src/main/java/org/elasticsearch/search/fetch/FetchPhase.java

@@ -45,9 +45,9 @@ import org.elasticsearch.index.mapper.MappedFieldType;
 import org.elasticsearch.index.mapper.MapperService;
 import org.elasticsearch.index.mapper.ObjectMapper;
 import org.elasticsearch.index.mapper.SourceFieldMapper;
+import org.elasticsearch.search.SearchContextSourcePrinter;
 import org.elasticsearch.search.SearchHit;
 import org.elasticsearch.search.SearchHits;
-import org.elasticsearch.search.SearchPhase;
 import org.elasticsearch.search.SearchShardTarget;
 import org.elasticsearch.search.fetch.FetchSubPhase.HitContext;
 import org.elasticsearch.search.fetch.subphase.FetchSourceContext;
@@ -74,7 +74,7 @@ import static java.util.Collections.emptyMap;
  * Fetch phase of a search request, used to fetch the actual top matching documents to be returned to the client, identified
  * after reducing all of the matches returned by the query phase
  */
-public class FetchPhase implements SearchPhase {
+public class FetchPhase {
     private static final Logger LOGGER = LogManager.getLogger(FetchPhase.class);
 
     private final FetchSubPhase[] fetchSubPhases;
@@ -84,11 +84,6 @@ public class FetchPhase implements SearchPhase {
         this.fetchSubPhases[fetchSubPhases.size()] = new InnerHitsPhase(this);
     }
 
-    @Override
-    public void preProcess(SearchContext context) {
-    }
-
-    @Override
     public void execute(SearchContext context) {
         if (LOGGER.isTraceEnabled()) {
             LOGGER.trace("{}", new SearchContextSourcePrinter(context));

+ 2 - 4
server/src/main/java/org/elasticsearch/search/query/QueryPhase.java

@@ -56,7 +56,7 @@ import org.elasticsearch.index.IndexSortConfig;
 import org.elasticsearch.index.mapper.DateFieldMapper.DateFieldType;
 import org.elasticsearch.index.mapper.MappedFieldType;
 import org.elasticsearch.search.DocValueFormat;
-import org.elasticsearch.search.SearchPhase;
+import org.elasticsearch.search.SearchContextSourcePrinter;
 import org.elasticsearch.search.SearchService;
 import org.elasticsearch.search.aggregations.AggregationPhase;
 import org.elasticsearch.search.internal.ContextIndexSearcher;
@@ -92,7 +92,7 @@ import static org.elasticsearch.search.query.TopDocsCollectorContext.shortcutTot
  * Query phase of a search request, used to run the query and get back from each shard information about the matching documents
  * (document ids and score or sort criteria) so that matches can be reduced on the coordinating node
  */
-public class QueryPhase implements SearchPhase {
+public class QueryPhase {
     private static final Logger LOGGER = LogManager.getLogger(QueryPhase.class);
     // TODO: remove this property in 8.0
     public static final boolean SYS_PROP_REWRITE_SORT = Booleans.parseBoolean(System.getProperty("es.search.rewrite_sort", "true"));
@@ -107,7 +107,6 @@ public class QueryPhase implements SearchPhase {
         this.rescorePhase = new RescorePhase();
     }
 
-    @Override
     public void preProcess(SearchContext context) {
         final Runnable cancellation;
         if (context.lowLevelCancellation()) {
@@ -129,7 +128,6 @@ public class QueryPhase implements SearchPhase {
         }
     }
 
-    @Override
     public void execute(SearchContext searchContext) throws QueryPhaseExecutionException {
         if (searchContext.hasOnlySuggest()) {
             suggestPhase.execute(searchContext);

+ 1 - 6
server/src/main/java/org/elasticsearch/search/rescore/RescorePhase.java

@@ -23,7 +23,6 @@ import org.apache.lucene.search.ScoreDoc;
 import org.apache.lucene.search.TopDocs;
 import org.elasticsearch.ElasticsearchException;
 import org.elasticsearch.common.lucene.search.TopDocsAndMaxScore;
-import org.elasticsearch.search.SearchPhase;
 import org.elasticsearch.search.internal.SearchContext;
 
 import java.io.IOException;
@@ -31,12 +30,8 @@ import java.io.IOException;
 /**
  * Rescore phase of a search request, used to run potentially expensive scoring models against the top matching documents.
  */
-public class RescorePhase implements SearchPhase {
-    @Override
-    public void preProcess(SearchContext context) {
-    }
+public class RescorePhase {
 
-    @Override
     public void execute(SearchContext context) {
         TopDocs topDocs = context.queryResult().topDocs().topDocs;
         if (topDocs.scoreDocs.length == 0) {

+ 1 - 9
server/src/main/java/org/elasticsearch/search/suggest/SuggestPhase.java

@@ -20,7 +20,6 @@ package org.elasticsearch.search.suggest;
 
 import org.apache.lucene.util.CharsRefBuilder;
 import org.elasticsearch.ElasticsearchException;
-import org.elasticsearch.search.SearchPhase;
 import org.elasticsearch.search.internal.SearchContext;
 import org.elasticsearch.search.suggest.Suggest.Suggestion;
 import org.elasticsearch.search.suggest.Suggest.Suggestion.Entry;
@@ -35,12 +34,8 @@ import java.util.Map;
 /**
  * Suggest phase of a search request, used to collect suggestions
  */
-public class SuggestPhase implements SearchPhase {
-    @Override
-    public void preProcess(SearchContext context) {
-    }
+public class SuggestPhase {
 
-    @Override
     public void execute(SearchContext context) {
         final SuggestionSearchContext suggest = context.suggest();
         if (suggest == null) {
@@ -66,8 +61,5 @@ public class SuggestPhase implements SearchPhase {
         }
     }
 
-    static class SortedHits {
-        int[] docs;
-    }
 }