Browse Source

Misc cleanup in o.e.search (#101976)

Cleaning up a few more spots here.
Armin Braun 1 year ago
parent
commit
343f332c26
60 changed files with 260 additions and 504 deletions
  1. 1 1
      server/src/main/java/org/elasticsearch/index/fielddata/fieldcomparator/BytesRefFieldComparatorSource.java
  2. 1 1
      server/src/main/java/org/elasticsearch/index/fielddata/fieldcomparator/LongValuesComparatorSource.java
  3. 0 5
      server/src/main/java/org/elasticsearch/search/DefaultSearchContext.java
  4. 2 4
      server/src/main/java/org/elasticsearch/search/MultiValueMode.java
  5. 3 3
      server/src/main/java/org/elasticsearch/search/SearchService.java
  6. 1 1
      server/src/main/java/org/elasticsearch/search/aggregations/bucket/histogram/VariableWidthHistogramAggregator.java
  7. 0 4
      server/src/main/java/org/elasticsearch/search/aggregations/metrics/TDigestState.java
  8. 1 1
      server/src/main/java/org/elasticsearch/search/collapse/CollapseBuilder.java
  9. 1 11
      server/src/main/java/org/elasticsearch/search/collapse/CollapseContext.java
  10. 1 1
      server/src/main/java/org/elasticsearch/search/internal/ContextIndexSearcher.java
  11. 24 42
      server/src/main/java/org/elasticsearch/search/internal/ExitableDirectoryReader.java
  12. 1 2
      server/src/main/java/org/elasticsearch/search/internal/FieldUsageTrackingDirectoryReader.java
  13. 0 5
      server/src/main/java/org/elasticsearch/search/internal/FilteredSearchContext.java
  14. 0 5
      server/src/main/java/org/elasticsearch/search/internal/InternalScrollSearchRequest.java
  15. 0 2
      server/src/main/java/org/elasticsearch/search/internal/SearchContext.java
  16. 2 2
      server/src/main/java/org/elasticsearch/search/internal/ShardSearchRequest.java
  17. 0 5
      server/src/main/java/org/elasticsearch/search/internal/SubSearchContext.java
  18. 36 42
      server/src/main/java/org/elasticsearch/search/lookup/LeafDocLookup.java
  19. 0 5
      server/src/main/java/org/elasticsearch/search/rank/RankSearchContext.java
  20. 0 3
      server/src/main/java/org/elasticsearch/search/rescore/QueryRescorer.java
  21. 0 1
      server/src/main/java/org/elasticsearch/search/runtime/GeoPointScriptFieldDistanceFeatureQuery.java
  22. 1 21
      server/src/main/java/org/elasticsearch/search/sort/BucketedSort.java
  23. 8 4
      server/src/main/java/org/elasticsearch/search/sort/ScoreSortBuilder.java
  24. 3 3
      server/src/main/java/org/elasticsearch/search/sort/ScriptSortBuilder.java
  25. 0 11
      server/src/main/java/org/elasticsearch/search/sort/SortBuilders.java
  26. 3 4
      server/src/main/java/org/elasticsearch/search/sort/SortValue.java
  27. 10 10
      server/src/main/java/org/elasticsearch/search/suggest/DirectSpellcheckerSettings.java
  28. 0 5
      server/src/main/java/org/elasticsearch/search/suggest/Suggest.java
  29. 2 2
      server/src/main/java/org/elasticsearch/search/suggest/SuggestionSearchContext.java
  30. 1 1
      server/src/main/java/org/elasticsearch/search/suggest/completion/CompletionSuggestion.java
  31. 0 7
      server/src/main/java/org/elasticsearch/search/suggest/completion/CompletionSuggestionBuilder.java
  32. 6 6
      server/src/main/java/org/elasticsearch/search/suggest/completion/FuzzyOptions.java
  33. 2 2
      server/src/main/java/org/elasticsearch/search/suggest/completion/RegexOptions.java
  34. 1 1
      server/src/main/java/org/elasticsearch/search/suggest/completion/TopSuggestGroupDocsCollector.java
  35. 1 1
      server/src/main/java/org/elasticsearch/search/suggest/completion/context/CategoryQueryContext.java
  36. 1 1
      server/src/main/java/org/elasticsearch/search/suggest/completion/context/ContextBuilder.java
  37. 1 37
      server/src/main/java/org/elasticsearch/search/suggest/completion/context/ContextMapping.java
  38. 6 10
      server/src/main/java/org/elasticsearch/search/suggest/completion/context/ContextMappings.java
  39. 0 13
      server/src/main/java/org/elasticsearch/search/suggest/completion/context/GeoContextMapping.java
  40. 0 7
      server/src/main/java/org/elasticsearch/search/suggest/phrase/CandidateGenerator.java
  41. 8 16
      server/src/main/java/org/elasticsearch/search/suggest/phrase/CandidateScorer.java
  42. 6 20
      server/src/main/java/org/elasticsearch/search/suggest/phrase/DirectCandidateGenerator.java
  43. 14 22
      server/src/main/java/org/elasticsearch/search/suggest/phrase/DirectCandidateGeneratorBuilder.java
  44. 1 1
      server/src/main/java/org/elasticsearch/search/suggest/phrase/Laplace.java
  45. 1 1
      server/src/main/java/org/elasticsearch/search/suggest/phrase/LaplaceScorer.java
  46. 1 6
      server/src/main/java/org/elasticsearch/search/suggest/phrase/MultiCandidateGeneratorWrapper.java
  47. 2 2
      server/src/main/java/org/elasticsearch/search/suggest/phrase/PhraseSuggester.java
  48. 0 7
      server/src/main/java/org/elasticsearch/search/suggest/phrase/PhraseSuggestion.java
  49. 2 7
      server/src/main/java/org/elasticsearch/search/suggest/phrase/PhraseSuggestionBuilder.java
  50. 1 1
      server/src/main/java/org/elasticsearch/search/suggest/phrase/PhraseSuggestionContext.java
  51. 1 1
      server/src/main/java/org/elasticsearch/search/suggest/phrase/StupidBackoff.java
  52. 5 12
      server/src/main/java/org/elasticsearch/search/suggest/phrase/WordScorer.java
  53. 1 13
      server/src/main/java/org/elasticsearch/search/suggest/term/TermSuggestion.java
  54. 1 1
      server/src/main/java/org/elasticsearch/search/suggest/term/TermSuggestionBuilder.java
  55. 0 4
      server/src/main/java/org/elasticsearch/search/vectors/KnnSearchBuilder.java
  56. 0 4
      server/src/main/java/org/elasticsearch/search/vectors/VectorSimilarityQuery.java
  57. 0 2
      server/src/test/java/org/elasticsearch/search/MultiValueModeTests.java
  58. 66 66
      server/src/test/java/org/elasticsearch/search/suggest/completion/CategoryContextMappingTests.java
  59. 30 21
      server/src/test/java/org/elasticsearch/search/suggest/completion/GeoContextMappingTests.java
  60. 0 5
      test/framework/src/main/java/org/elasticsearch/test/TestSearchContext.java

+ 1 - 1
server/src/main/java/org/elasticsearch/index/fielddata/fieldcomparator/BytesRefFieldComparatorSource.java

@@ -112,7 +112,7 @@ public class BytesRefFieldComparatorSource extends IndexFieldData.XFieldComparat
                     final BitSet rootDocs = nested.rootDocs(context);
                     final DocIdSetIterator innerDocs = nested.innerDocs(context);
                     final int maxChildren = nested.getNestedSort() != null ? nested.getNestedSort().getMaxChildren() : Integer.MAX_VALUE;
-                    selectedValues = sortMode.select(values, missingBytes, rootDocs, innerDocs, context.reader().maxDoc(), maxChildren);
+                    selectedValues = sortMode.select(values, missingBytes, rootDocs, innerDocs, maxChildren);
                 }
                 return selectedValues;
             }

+ 1 - 1
server/src/main/java/org/elasticsearch/index/fielddata/fieldcomparator/LongValuesComparatorSource.java

@@ -90,7 +90,7 @@ public class LongValuesComparatorSource extends IndexFieldData.XFieldComparatorS
         final BitSet rootDocs = nested.rootDocs(context);
         final DocIdSetIterator innerDocs = nested.innerDocs(context);
         final int maxChildren = nested.getNestedSort() != null ? nested.getNestedSort().getMaxChildren() : Integer.MAX_VALUE;
-        return sortMode.select(values, missingValue, rootDocs, innerDocs, context.reader().maxDoc(), maxChildren);
+        return sortMode.select(values, missingValue, rootDocs, innerDocs, maxChildren);
     }
 
     @Override

+ 0 - 5
server/src/main/java/org/elasticsearch/search/DefaultSearchContext.java

@@ -468,11 +468,6 @@ final class DefaultSearchContext extends SearchContext {
         return fetchSourceContext != null && fetchSourceContext.fetchSource();
     }
 
-    @Override
-    public boolean hasFetchSourceContext() {
-        return fetchSourceContext != null;
-    }
-
     @Override
     public FetchSourceContext fetchSourceContext() {
         return this.fetchSourceContext;

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

@@ -543,7 +543,7 @@ public enum MultiValueMode implements Writeable {
                 }
 
                 @Override
-                public long longValue() throws IOException {
+                public long longValue() {
                     return value;
                 }
             };
@@ -571,7 +571,6 @@ public enum MultiValueMode implements Writeable {
         final long missingValue,
         final BitSet parentDocs,
         final DocIdSetIterator childDocs,
-        int maxDoc,
         int maxChildren
     ) throws IOException {
         if (parentDocs == null || childDocs == null) {
@@ -654,7 +653,7 @@ public enum MultiValueMode implements Writeable {
                 }
 
                 @Override
-                public double doubleValue() throws IOException {
+                public double doubleValue() {
                     return this.value;
                 }
             };
@@ -804,7 +803,6 @@ public enum MultiValueMode implements Writeable {
         final BytesRef missingValue,
         final BitSet parentDocs,
         final DocIdSetIterator childDocs,
-        int maxDoc,
         int maxChildren
     ) throws IOException {
         if (parentDocs == null || childDocs == null) {

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

@@ -739,7 +739,7 @@ public class SearchService extends AbstractLifecycleComponent implements IndexEv
                 SearchOperationListenerExecutor executor = new SearchOperationListenerExecutor(searchContext)
             ) {
                 searchContext.searcher().setAggregatedDfs(readerContext.getAggregatedDfs(null));
-                processScroll(request, readerContext, searchContext);
+                processScroll(request, searchContext);
                 QueryPhase.execute(searchContext);
                 executor.success();
                 readerContext.setRescoreDocIds(searchContext.rescoreDocIds());
@@ -830,7 +830,7 @@ public class SearchService extends AbstractLifecycleComponent implements IndexEv
             ) {
                 searchContext.assignRescoreDocIds(readerContext.getRescoreDocIds(null));
                 searchContext.searcher().setAggregatedDfs(readerContext.getAggregatedDfs(null));
-                processScroll(request, readerContext, searchContext);
+                processScroll(request, searchContext);
                 searchContext.addQueryResult();
                 QueryPhase.execute(searchContext);
                 final long afterQueryTime = executor.success();
@@ -1506,7 +1506,7 @@ public class SearchService extends AbstractLifecycleComponent implements IndexEv
         context.docIdsToLoad(docIdsToLoad);
     }
 
-    private static void processScroll(InternalScrollSearchRequest request, ReaderContext reader, SearchContext context) {
+    private static void processScroll(InternalScrollSearchRequest request, SearchContext context) {
         // process scroll
         context.from(context.from() + context.size());
         context.scrollContext().scroll = request.scroll();

+ 1 - 1
server/src/main/java/org/elasticsearch/search/aggregations/bucket/histogram/VariableWidthHistogramAggregator.java

@@ -179,7 +179,7 @@ public class VariableWidthHistogramAggregator extends DeferableBucketAggregator
          * Sorts the <b>indices</b> of <code>values</code> by their underlying value
          * This will produce a merge map whose application will sort <code>values</code>
          */
-        private class ClusterSorter extends InPlaceMergeSorter {
+        private static class ClusterSorter extends InPlaceMergeSorter {
 
             final DoubleArray values;
             final long[] indexes;

+ 0 - 4
server/src/main/java/org/elasticsearch/search/aggregations/metrics/TDigestState.java

@@ -77,9 +77,6 @@ public class TDigestState {
         return switch (executionHint) {
             case HIGH_ACCURACY -> createOptimizedForAccuracy(compression);
             case DEFAULT -> create(compression);
-            default -> throw new IllegalArgumentException(
-                "Unexpected TDigestExecutionHint in TDigestState initialization: " + executionHint
-            );
         };
     }
 
@@ -99,7 +96,6 @@ public class TDigestState {
             case AVL_TREE -> TDigest.createAvlTreeDigest(compression);
             case SORTING -> TDigest.createSortingDigest();
             case MERGING -> TDigest.createMergingDigest(compression);
-            default -> throw new IllegalArgumentException("Unexpected TDigestState type: " + type);
         };
         this.type = type;
         this.compression = compression;

+ 1 - 1
server/src/main/java/org/elasticsearch/search/collapse/CollapseBuilder.java

@@ -204,6 +204,6 @@ public class CollapseBuilder implements Writeable, ToXContentObject {
             );
         }
 
-        return new CollapseContext(field, fieldType, innerHits);
+        return new CollapseContext(field, fieldType);
     }
 }

+ 1 - 11
server/src/main/java/org/elasticsearch/search/collapse/CollapseContext.java

@@ -11,23 +11,18 @@ import org.apache.lucene.search.FieldDoc;
 import org.apache.lucene.search.Sort;
 import org.elasticsearch.index.mapper.MappedFieldType;
 import org.elasticsearch.index.mapper.MappedFieldType.CollapseType;
-import org.elasticsearch.index.query.InnerHitBuilder;
 import org.elasticsearch.lucene.grouping.SinglePassGroupingCollector;
 
-import java.util.List;
-
 /**
  * Context used for field collapsing
  */
 public class CollapseContext {
     private final String fieldName;
     private final MappedFieldType fieldType;
-    private final List<InnerHitBuilder> innerHits;
 
-    public CollapseContext(String fieldName, MappedFieldType fieldType, List<InnerHitBuilder> innerHits) {
+    public CollapseContext(String fieldName, MappedFieldType fieldType) {
         this.fieldName = fieldName;
         this.fieldType = fieldType;
-        this.innerHits = innerHits;
     }
 
     /**
@@ -42,11 +37,6 @@ public class CollapseContext {
         return fieldType;
     }
 
-    /** The inner hit options to expand the collapsed results **/
-    public List<InnerHitBuilder> getInnerHit() {
-        return innerHits;
-    }
-
     public SinglePassGroupingCollector<?> createTopDocs(Sort sort, int topN, FieldDoc after) {
         if (fieldType.collapseType() == CollapseType.KEYWORD) {
             return SinglePassGroupingCollector.createKeyword(fieldName, fieldType, sort, topN, after);

+ 1 - 1
server/src/main/java/org/elasticsearch/search/internal/ContextIndexSearcher.java

@@ -265,7 +265,7 @@ public class ContextIndexSearcher extends IndexSearcher implements Releasable {
         List<LeafReaderContext> sortedLeaves = new ArrayList<>(leaves);
         // Sort by maxDoc, descending:
         final Comparator<LeafReaderContext> leafComparator = Comparator.comparingInt(l -> l.reader().maxDoc());
-        Collections.sort(sortedLeaves, leafComparator.reversed());
+        sortedLeaves.sort(leafComparator.reversed());
         // we add the groups on a priority queue, so we can add orphan leafs to the smallest group
         final Comparator<List<LeafReaderContext>> groupComparator = Comparator.comparingInt(
             l -> l.stream().mapToInt(lr -> lr.reader().maxDoc()).sum()

+ 24 - 42
server/src/main/java/org/elasticsearch/search/internal/ExitableDirectoryReader.java

@@ -142,28 +142,7 @@ class ExitableDirectoryReader extends FilterDirectoryReader {
                 in.searchNearestVectors(field, target, collector, acceptDocs);
                 return;
             }
-            // when acceptDocs is null due to no doc deleted, we will instantiate a new one that would
-            // match all docs to allow timeout checking.
-            final Bits updatedAcceptDocs = acceptDocs == null ? new Bits.MatchAllBits(maxDoc()) : acceptDocs;
-            Bits timeoutCheckingAcceptDocs = new Bits() {
-                private static final int MAX_CALLS_BEFORE_QUERY_TIMEOUT_CHECK = 10;
-                private int calls;
-
-                @Override
-                public boolean get(int index) {
-                    if (calls++ % MAX_CALLS_BEFORE_QUERY_TIMEOUT_CHECK == 0) {
-                        queryCancellation.checkCancelled();
-                    }
-
-                    return updatedAcceptDocs.get(index);
-                }
-
-                @Override
-                public int length() {
-                    return updatedAcceptDocs.length();
-                }
-            };
-            in.searchNearestVectors(field, target, collector, timeoutCheckingAcceptDocs);
+            in.searchNearestVectors(field, target, collector, new TimeOutCheckingBits(acceptDocs));
         }
 
         @Override
@@ -181,29 +160,32 @@ class ExitableDirectoryReader extends FilterDirectoryReader {
                 in.searchNearestVectors(field, target, collector, acceptDocs);
                 return;
             }
-            // when acceptDocs is null due to no doc deleted, we will instantiate a new one that would
-            // match all docs to allow timeout checking.
-            final Bits updatedAcceptDocs = acceptDocs == null ? new Bits.MatchAllBits(maxDoc()) : acceptDocs;
-            Bits timeoutCheckingAcceptDocs = new Bits() {
-                private static final int MAX_CALLS_BEFORE_QUERY_TIMEOUT_CHECK = 10;
-                private int calls;
-
-                @Override
-                public boolean get(int index) {
-                    if (calls++ % MAX_CALLS_BEFORE_QUERY_TIMEOUT_CHECK == 0) {
-                        queryCancellation.checkCancelled();
-                    }
-
-                    return updatedAcceptDocs.get(index);
-                }
+            in.searchNearestVectors(field, target, collector, new TimeOutCheckingBits(acceptDocs));
+        }
+
+        private class TimeOutCheckingBits implements Bits {
+            private static final int MAX_CALLS_BEFORE_QUERY_TIMEOUT_CHECK = 10;
+            private final Bits updatedAcceptDocs;
+            private int calls;
 
-                @Override
-                public int length() {
-                    return updatedAcceptDocs.length();
+            TimeOutCheckingBits(Bits acceptDocs) {
+                // when acceptDocs is null due to no doc deleted, we will instantiate a new one that would
+                // match all docs to allow timeout checking.
+                this.updatedAcceptDocs = acceptDocs == null ? new Bits.MatchAllBits(maxDoc()) : acceptDocs;
+            }
+
+            @Override
+            public boolean get(int index) {
+                if (calls++ % MAX_CALLS_BEFORE_QUERY_TIMEOUT_CHECK == 0) {
+                    queryCancellation.checkCancelled();
                 }
-            };
+                return updatedAcceptDocs.get(index);
+            }
 
-            in.searchNearestVectors(field, target, collector, acceptDocs);
+            @Override
+            public int length() {
+                return updatedAcceptDocs.length();
+            }
         }
     }
 

+ 1 - 2
server/src/main/java/org/elasticsearch/search/internal/FieldUsageTrackingDirectoryReader.java

@@ -251,8 +251,7 @@ public class FieldUsageTrackingDirectoryReader extends FilterDirectoryReader {
 
         @Override
         public String toString() {
-            final StringBuilder sb = new StringBuilder("FieldUsageTrackingLeafReader(reader=");
-            return sb.append(in).append(')').toString();
+            return "FieldUsageTrackingLeafReader(reader=" + in + ')';
         }
 
         @Override

+ 0 - 5
server/src/main/java/org/elasticsearch/search/internal/FilteredSearchContext.java

@@ -174,11 +174,6 @@ public abstract class FilteredSearchContext extends SearchContext {
         return in.sourceRequested();
     }
 
-    @Override
-    public boolean hasFetchSourceContext() {
-        return in.hasFetchSourceContext();
-    }
-
     @Override
     public FetchSourceContext fetchSourceContext() {
         return in.fetchSourceContext();

+ 0 - 5
server/src/main/java/org/elasticsearch/search/internal/InternalScrollSearchRequest.java

@@ -54,11 +54,6 @@ public class InternalScrollSearchRequest extends TransportRequest {
         return scroll;
     }
 
-    public InternalScrollSearchRequest scroll(Scroll scroll) {
-        this.scroll = scroll;
-        return this;
-    }
-
     @Override
     public Task createTask(long id, String type, String action, TaskId parentTaskId, Map<String, String> headers) {
         return new SearchShardTask(id, type, action, getDescription(), parentTaskId, headers);

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

@@ -182,8 +182,6 @@ public abstract class SearchContext implements Releasable {
      */
     public abstract boolean sourceRequested();
 
-    public abstract boolean hasFetchSourceContext();
-
     public abstract FetchSourceContext fetchSourceContext();
 
     public abstract SearchContext fetchSourceContext(FetchSourceContext fetchSourceContext);

+ 2 - 2
server/src/main/java/org/elasticsearch/search/internal/ShardSearchRequest.java

@@ -240,7 +240,7 @@ public class ShardSearchRequest extends TransportRequest implements IndicesReque
         this.originalIndices = originalIndices;
         this.readerId = readerId;
         this.keepAlive = keepAlive;
-        assert keepAlive == null || readerId != null : "readerId: " + readerId + " keepAlive: " + keepAlive;
+        assert keepAlive == null || readerId != null : "readerId: null keepAlive: " + keepAlive;
         this.channelVersion = TransportVersion.current();
         this.waitForCheckpoint = waitForCheckpoint;
         this.waitForCheckpointsTimeout = waitForCheckpointsTimeout;
@@ -334,7 +334,7 @@ public class ShardSearchRequest extends TransportRequest implements IndicesReque
             readerId = null;
             keepAlive = null;
         }
-        assert keepAlive == null || readerId != null : "readerId: " + readerId + " keepAlive: " + keepAlive;
+        assert keepAlive == null || readerId != null : "readerId: null keepAlive: " + keepAlive;
         channelVersion = TransportVersion.min(TransportVersion.readVersion(in), in.getTransportVersion());
         if (in.getTransportVersion().onOrAfter(TransportVersions.V_7_16_0)) {
             waitForCheckpoint = in.readLong();

+ 0 - 5
server/src/main/java/org/elasticsearch/search/internal/SubSearchContext.java

@@ -107,11 +107,6 @@ public class SubSearchContext extends FilteredSearchContext {
         return fetchSourceContext != null && fetchSourceContext.fetchSource();
     }
 
-    @Override
-    public boolean hasFetchSourceContext() {
-        return fetchSourceContext != null;
-    }
-
     @Override
     public FetchSourceContext fetchSourceContext() {
         return fetchSourceContext;

+ 36 - 42
server/src/main/java/org/elasticsearch/search/lookup/LeafDocLookup.java

@@ -102,30 +102,27 @@ public class LeafDocLookup implements Map<String, ScriptDocValues<?>> {
 
         // Load the field data on behalf of the script. Otherwise, it would require
         // additional permissions to deal with pagedbytes/ramusagestimator/etc.
-        return AccessController.doPrivileged(new PrivilegedAction<FieldFactoryWrapper>() {
-            @Override
-            public FieldFactoryWrapper run() {
-                FieldFactoryWrapper fieldFactory = null;
-                IndexFieldData<?> indexFieldData = fieldDataLookup.apply(fieldType, SCRIPT);
+        return AccessController.doPrivileged((PrivilegedAction<FieldFactoryWrapper>) () -> {
+            IndexFieldData<?> indexFieldData = fieldDataLookup.apply(fieldType, SCRIPT);
 
-                FieldFactoryWrapper docFactory = null;
+            FieldFactoryWrapper docFactory = null;
 
-                if (docFactoryCache.isEmpty() == false) {
-                    docFactory = docFactoryCache.get(fieldName);
-                }
+            if (docFactoryCache.isEmpty() == false) {
+                docFactory = docFactoryCache.get(fieldName);
+            }
 
-                // if this field has already been accessed via the doc-access API and the field-access API
-                // uses doc values then we share to avoid double-loading
-                if (docFactory != null && indexFieldData instanceof SourceValueFetcherIndexFieldData == false) {
-                    fieldFactory = docFactory;
-                } else {
-                    fieldFactory = new FieldFactoryWrapper(indexFieldData.load(reader).getScriptFieldFactory(fieldName));
-                }
+            // if this field has already been accessed via the doc-access API and the field-access API
+            // uses doc values then we share to avoid double-loading
+            FieldFactoryWrapper fieldFactory;
+            if (docFactory != null && indexFieldData instanceof SourceValueFetcherIndexFieldData == false) {
+                fieldFactory = docFactory;
+            } else {
+                fieldFactory = new FieldFactoryWrapper(indexFieldData.load(reader).getScriptFieldFactory(fieldName));
+            }
 
-                fieldFactoryCache.put(fieldName, fieldFactory);
+            fieldFactoryCache.put(fieldName, fieldFactory);
 
-                return fieldFactory;
-            }
+            return fieldFactory;
         });
     }
 
@@ -150,35 +147,32 @@ public class LeafDocLookup implements Map<String, ScriptDocValues<?>> {
 
         // Load the field data on behalf of the script. Otherwise, it would require
         // additional permissions to deal with pagedbytes/ramusagestimator/etc.
-        return AccessController.doPrivileged(new PrivilegedAction<FieldFactoryWrapper>() {
-            @Override
-            public FieldFactoryWrapper run() {
-                FieldFactoryWrapper docFactory = null;
-                FieldFactoryWrapper fieldFactory = null;
-
-                if (fieldFactoryCache.isEmpty() == false) {
-                    fieldFactory = fieldFactoryCache.get(fieldName);
-                }
+        return AccessController.doPrivileged((PrivilegedAction<FieldFactoryWrapper>) () -> {
+            FieldFactoryWrapper docFactory = null;
+            FieldFactoryWrapper fieldFactory = null;
 
-                if (fieldFactory != null) {
-                    IndexFieldData<?> fieldIndexFieldData = fieldDataLookup.apply(fieldType, SCRIPT);
+            if (fieldFactoryCache.isEmpty() == false) {
+                fieldFactory = fieldFactoryCache.get(fieldName);
+            }
 
-                    // if this field has already been accessed via the field-access API and the field-access API
-                    // uses doc values then we share to avoid double-loading
-                    if (fieldIndexFieldData instanceof SourceValueFetcherIndexFieldData == false) {
-                        docFactory = fieldFactory;
-                    }
-                }
+            if (fieldFactory != null) {
+                IndexFieldData<?> fieldIndexFieldData = fieldDataLookup.apply(fieldType, SCRIPT);
 
-                if (docFactory == null) {
-                    IndexFieldData<?> indexFieldData = fieldDataLookup.apply(fieldType, SEARCH);
-                    docFactory = new FieldFactoryWrapper(indexFieldData.load(reader).getScriptFieldFactory(fieldName));
+                // if this field has already been accessed via the field-access API and the field-access API
+                // uses doc values then we share to avoid double-loading
+                if (fieldIndexFieldData instanceof SourceValueFetcherIndexFieldData == false) {
+                    docFactory = fieldFactory;
                 }
+            }
 
-                docFactoryCache.put(fieldName, docFactory);
-
-                return docFactory;
+            if (docFactory == null) {
+                IndexFieldData<?> indexFieldData = fieldDataLookup.apply(fieldType, SEARCH);
+                docFactory = new FieldFactoryWrapper(indexFieldData.load(reader).getScriptFieldFactory(fieldName));
             }
+
+            docFactoryCache.put(fieldName, docFactory);
+
+            return docFactory;
         });
     }
 

+ 0 - 5
server/src/main/java/org/elasticsearch/search/rank/RankSearchContext.java

@@ -320,11 +320,6 @@ public class RankSearchContext extends SearchContext {
         throw new UnsupportedOperationException();
     }
 
-    @Override
-    public boolean hasFetchSourceContext() {
-        throw new UnsupportedOperationException();
-    }
-
     @Override
     public FetchSourceContext fetchSourceContext() {
         throw new UnsupportedOperationException();

+ 0 - 3
server/src/main/java/org/elasticsearch/search/rescore/QueryRescorer.java

@@ -197,9 +197,6 @@ public final class QueryRescorer implements Rescorer {
             this.scoreMode = scoreMode;
         }
 
-        public void setScoreMode(String scoreMode) {
-            setScoreMode(QueryRescoreMode.fromString(scoreMode));
-        }
     }
 
 }

+ 0 - 1
server/src/main/java/org/elasticsearch/search/runtime/GeoPointScriptFieldDistanceFeatureQuery.java

@@ -114,7 +114,6 @@ public final class GeoPointScriptFieldDistanceFeatureQuery extends AbstractScrip
         private final TwoPhaseIterator twoPhase;
         private final DocIdSetIterator disi;
         private final float weight;
-        private double maxDistance = GeoUtils.EARTH_MEAN_RADIUS_METERS * Math.PI;
 
         protected DistanceScorer(Weight weight, AbstractLongFieldScript script, int maxDoc, float boost) {
             super(weight);

+ 1 - 21
server/src/main/java/org/elasticsearch/search/sort/BucketedSort.java

@@ -25,7 +25,6 @@ import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Comparator;
 import java.util.List;
-import java.util.Locale;
 
 import static java.util.Collections.emptyList;
 
@@ -110,7 +109,7 @@ public abstract class BucketedSort implements Releasable {
         public void swap(long lhs, long rhs) {}
 
         @Override
-        public Loader loader(LeafReaderContext ctx) throws IOException {
+        public Loader loader(LeafReaderContext ctx) {
             return (index, doc) -> {};
         }
     };
@@ -254,24 +253,6 @@ public abstract class BucketedSort implements Releasable {
      */
     protected abstract void swap(long lhs, long rhs);
 
-    /**
-     * Return a fairly human readable representation of the array backing the sort.
-     * <p>
-     * This is intentionally not a {@link #toString()} implementation because it'll
-     * be quite slow.
-     * </p>
-     */
-    protected final String debugFormat() {
-        StringBuilder b = new StringBuilder();
-        for (long index = 0; index < values().size(); index++) {
-            if (index % bucketSize == 0) {
-                b.append('\n').append(String.format(Locale.ROOT, "%20d", index / bucketSize)).append(":  ");
-            }
-            b.append(String.format(Locale.ROOT, "%20s", getValue(index))).append(' ');
-        }
-        return b.toString();
-    }
-
     /**
      * Initialize the gather offsets after setting up values. Subclasses
      * should call this once, after setting up their {@link #values()}.
@@ -415,7 +396,6 @@ public abstract class BucketedSort implements Releasable {
             } else {
                 setNextGatherOffset(rootIndex, next - 1);
             }
-            return;
         }
 
         /**

+ 8 - 4
server/src/main/java/org/elasticsearch/search/sort/ScoreSortBuilder.java

@@ -100,8 +100,12 @@ public final class ScoreSortBuilder extends SortBuilder<ScoreSortBuilder> {
     }
 
     @Override
-    public BucketedSort buildBucketedSort(SearchExecutionContext context, BigArrays bigArrays, int bucketSize, BucketedSort.ExtraData extra)
-        throws IOException {
+    public BucketedSort buildBucketedSort(
+        SearchExecutionContext context,
+        BigArrays bigArrays,
+        int bucketSize,
+        BucketedSort.ExtraData extra
+    ) {
         return new BucketedSort.ForFloats(bigArrays, order, DocValueFormat.RAW, bucketSize, extra) {
             @Override
             public boolean needsScores() {
@@ -109,7 +113,7 @@ public final class ScoreSortBuilder extends SortBuilder<ScoreSortBuilder> {
             }
 
             @Override
-            public Leaf forLeaf(LeafReaderContext ctx) throws IOException {
+            public Leaf forLeaf(LeafReaderContext ctx) {
                 return new BucketedSort.ForFloats.Leaf(ctx) {
                     private Scorable scorer;
                     private float score;
@@ -165,7 +169,7 @@ public final class ScoreSortBuilder extends SortBuilder<ScoreSortBuilder> {
     }
 
     @Override
-    public ScoreSortBuilder rewrite(QueryRewriteContext ctx) throws IOException {
+    public ScoreSortBuilder rewrite(QueryRewriteContext ctx) {
         return this;
     }
 

+ 3 - 3
server/src/main/java/org/elasticsearch/search/sort/ScriptSortBuilder.java

@@ -295,7 +295,7 @@ public class ScriptSortBuilder extends SortBuilder<ScriptSortBuilder> {
                             final BytesRefBuilder spare = new BytesRefBuilder();
 
                             @Override
-                            public boolean advanceExact(int doc) throws IOException {
+                            public boolean advanceExact(int doc) {
                                 leafScript.setDocument(doc);
                                 return true;
                             }
@@ -343,7 +343,7 @@ public class ScriptSortBuilder extends SortBuilder<ScriptSortBuilder> {
                         leafScript = numberSortScript.newInstance(new DocValuesDocReader(searchLookup, context));
                         final NumericDoubleValues values = new NumericDoubleValues() {
                             @Override
-                            public boolean advanceExact(int doc) throws IOException {
+                            public boolean advanceExact(int doc) {
                                 leafScript.setDocument(doc);
                                 return true;
                             }
@@ -374,7 +374,7 @@ public class ScriptSortBuilder extends SortBuilder<ScriptSortBuilder> {
                         final BinaryDocValues values = new AbstractBinaryDocValues() {
 
                             @Override
-                            public boolean advanceExact(int doc) throws IOException {
+                            public boolean advanceExact(int doc) {
                                 leafScript.setDocument(doc);
                                 return true;
                             }

+ 0 - 11
server/src/main/java/org/elasticsearch/search/sort/SortBuilders.java

@@ -8,7 +8,6 @@
 
 package org.elasticsearch.search.sort;
 
-import org.elasticsearch.common.geo.GeoPoint;
 import org.elasticsearch.script.Script;
 import org.elasticsearch.search.builder.PointInTimeBuilder;
 import org.elasticsearch.search.sort.ScriptSortBuilder.ScriptSortType;
@@ -65,16 +64,6 @@ public class SortBuilders {
         return new GeoDistanceSortBuilder(fieldName, lat, lon);
     }
 
-    /**
-     * Constructs a new distance based sort on a geo point like field.
-     *
-     * @param fieldName The geo point like field name.
-     * @param points The points to create the range distance facets from.
-     */
-    public static GeoDistanceSortBuilder geoDistanceSort(String fieldName, GeoPoint... points) {
-        return new GeoDistanceSortBuilder(fieldName, points);
-    }
-
     /**
      * Constructs a new distance based sort on a geo point like field.
      *

+ 3 - 4
server/src/main/java/org/elasticsearch/search/sort/SortValue.java

@@ -369,7 +369,6 @@ public abstract class SortValue implements NamedWriteable, Comparable<SortValue>
 
         public static final String NAME = "empty";
         private static final String EMPTY_STRING = "";
-        private int sortValue = 0;
 
         private EmptySortValue() {}
 
@@ -381,7 +380,7 @@ public abstract class SortValue implements NamedWriteable, Comparable<SortValue>
         }
 
         @Override
-        public void writeTo(StreamOutput out) throws IOException {}
+        public void writeTo(StreamOutput out) {}
 
         @Override
         public Object getKey() {
@@ -394,7 +393,7 @@ public abstract class SortValue implements NamedWriteable, Comparable<SortValue>
         }
 
         @Override
-        protected XContentBuilder rawToXContent(XContentBuilder builder) throws IOException {
+        protected XContentBuilder rawToXContent(XContentBuilder builder) {
             return builder;
         }
 
@@ -420,7 +419,7 @@ public abstract class SortValue implements NamedWriteable, Comparable<SortValue>
 
         @Override
         public int typeComparisonKey() {
-            return sortValue;
+            return 0;
         }
 
         @Override

+ 10 - 10
server/src/main/java/org/elasticsearch/search/suggest/DirectSpellcheckerSettings.java

@@ -20,17 +20,17 @@ import java.util.Comparator;
 public class DirectSpellcheckerSettings {
 
     // NB: If this changes, make sure to change the default in TermBuilderSuggester
-    public static SuggestMode DEFAULT_SUGGEST_MODE = SuggestMode.SUGGEST_WHEN_NOT_IN_INDEX;
-    public static float DEFAULT_ACCURACY = 0.5f;
-    public static SortBy DEFAULT_SORT = SortBy.SCORE;
+    public static final SuggestMode DEFAULT_SUGGEST_MODE = SuggestMode.SUGGEST_WHEN_NOT_IN_INDEX;
+    public static final float DEFAULT_ACCURACY = 0.5f;
+    public static final SortBy DEFAULT_SORT = SortBy.SCORE;
     // NB: If this changes, make sure to change the default in TermBuilderSuggester
-    public static StringDistance DEFAULT_STRING_DISTANCE = DirectSpellChecker.INTERNAL_LEVENSHTEIN;
-    public static int DEFAULT_MAX_EDITS = LevenshteinAutomata.MAXIMUM_SUPPORTED_DISTANCE;
-    public static int DEFAULT_MAX_INSPECTIONS = 5;
-    public static float DEFAULT_MAX_TERM_FREQ = 0.01f;
-    public static int DEFAULT_PREFIX_LENGTH = 1;
-    public static int DEFAULT_MIN_WORD_LENGTH = 4;
-    public static float DEFAULT_MIN_DOC_FREQ = 0f;
+    public static final StringDistance DEFAULT_STRING_DISTANCE = DirectSpellChecker.INTERNAL_LEVENSHTEIN;
+    public static final int DEFAULT_MAX_EDITS = LevenshteinAutomata.MAXIMUM_SUPPORTED_DISTANCE;
+    public static final int DEFAULT_MAX_INSPECTIONS = 5;
+    public static final float DEFAULT_MAX_TERM_FREQ = 0.01f;
+    public static final int DEFAULT_PREFIX_LENGTH = 1;
+    public static final int DEFAULT_MIN_WORD_LENGTH = 4;
+    public static final float DEFAULT_MIN_DOC_FREQ = 0f;
 
     private SuggestMode suggestMode = DEFAULT_SUGGEST_MODE;
     private float accuracy = DEFAULT_ACCURACY;

+ 0 - 5
server/src/main/java/org/elasticsearch/search/suggest/Suggest.java

@@ -206,7 +206,6 @@ public final class Suggest implements Iterable<Suggest.Suggestion<? extends Entr
     @SuppressWarnings("rawtypes")
     public abstract static class Suggestion<T extends Suggestion.Entry> implements Iterable<T>, NamedWriteable, ToXContentFragment {
 
-        public static final int TYPE = 0;
         protected final String name;
         protected final int size;
         protected final List<T> entries = new ArrayList<>(5);
@@ -635,10 +634,6 @@ public final class Suggest implements Iterable<Suggest.Suggestion<? extends Entr
                     return (collateMatch != null) ? collateMatch : true;
                 }
 
-                protected void setScore(float score) {
-                    this.score = score;
-                }
-
                 @Override
                 public void writeTo(StreamOutput out) throws IOException {
                     out.writeText(text);

+ 2 - 2
server/src/main/java/org/elasticsearch/search/suggest/SuggestionSearchContext.java

@@ -35,8 +35,8 @@ public class SuggestionSearchContext {
         private Analyzer analyzer;
         private int size = 5;
         private int shardSize = -1;
-        private SearchExecutionContext searchExecutionContext;
-        private Suggester<?> suggester;
+        private final SearchExecutionContext searchExecutionContext;
+        private final Suggester<?> suggester;
 
         protected SuggestionContext(Suggester<?> suggester, SearchExecutionContext searchExecutionContext) {
             this.suggester = suggester;

+ 1 - 1
server/src/main/java/org/elasticsearch/search/suggest/completion/CompletionSuggestion.java

@@ -56,7 +56,7 @@ import static org.elasticsearch.search.suggest.Suggest.COMPARATOR;
  */
 public final class CompletionSuggestion extends Suggest.Suggestion<CompletionSuggestion.Entry> {
 
-    private boolean skipDuplicates;
+    private final boolean skipDuplicates;
 
     /**
      * Creates a completion suggestion given its name, size and whether it should skip duplicates

+ 0 - 7
server/src/main/java/org/elasticsearch/search/suggest/completion/CompletionSuggestionBuilder.java

@@ -211,13 +211,6 @@ public class CompletionSuggestionBuilder extends SuggestionBuilder<CompletionSug
         return this;
     }
 
-    /**
-     * Returns whether duplicate suggestions should be filtered out.
-     */
-    public boolean skipDuplicates() {
-        return skipDuplicates;
-    }
-
     /**
      * Should duplicates be filtered or not. Defaults to {@code false}.
      */

+ 6 - 6
server/src/main/java/org/elasticsearch/search/suggest/completion/FuzzyOptions.java

@@ -62,12 +62,12 @@ public class FuzzyOptions implements ToXContentFragment, Writeable {
         return new Builder();
     }
 
-    private int editDistance;
-    private boolean transpositions;
-    private int fuzzyMinLength;
-    private int fuzzyPrefixLength;
-    private boolean unicodeAware;
-    private int maxDeterminizedStates;
+    private final int editDistance;
+    private final boolean transpositions;
+    private final int fuzzyMinLength;
+    private final int fuzzyPrefixLength;
+    private final boolean unicodeAware;
+    private final int maxDeterminizedStates;
 
     private FuzzyOptions(
         int editDistance,

+ 2 - 2
server/src/main/java/org/elasticsearch/search/suggest/completion/RegexOptions.java

@@ -61,8 +61,8 @@ public class RegexOptions implements ToXContentFragment, Writeable {
         return PARSER.parse(parser, null).build();
     }
 
-    private int flagsValue;
-    private int maxDeterminizedStates;
+    private final int flagsValue;
+    private final int maxDeterminizedStates;
 
     private RegexOptions(int flagsValue, int maxDeterminizedStates) {
         this.flagsValue = flagsValue;

+ 1 - 1
server/src/main/java/org/elasticsearch/search/suggest/completion/TopSuggestGroupDocsCollector.java

@@ -25,7 +25,7 @@ import java.util.Map;
  * the best one per document (sorted by weight) is kept.
  **/
 class TopSuggestGroupDocsCollector extends TopSuggestDocsCollector {
-    private Map<Integer, List<CharSequence>> docContexts = new HashMap<>();
+    private final Map<Integer, List<CharSequence>> docContexts = new HashMap<>();
 
     /**
      * Sole constructor

+ 1 - 1
server/src/main/java/org/elasticsearch/search/suggest/completion/context/CategoryQueryContext.java

@@ -72,7 +72,7 @@ public final class CategoryQueryContext implements ToXContentObject {
 
         if (isPrefix != that.isPrefix) return false;
         if (boost != that.boost) return false;
-        return category != null ? category.equals(that.category) : that.category == null;
+        return Objects.equals(category, that.category);
 
     }
 

+ 1 - 1
server/src/main/java/org/elasticsearch/search/suggest/completion/context/ContextBuilder.java

@@ -13,7 +13,7 @@ package org.elasticsearch.search.suggest.completion.context;
  */
 public abstract class ContextBuilder<E extends ContextMapping<?>> {
 
-    protected String name;
+    protected final String name;
 
     /**
      * @param name of the context mapper to build

+ 1 - 37
server/src/main/java/org/elasticsearch/search/suggest/completion/context/ContextMapping.java

@@ -165,41 +165,5 @@ public abstract class ContextMapping<T extends ToXContent> implements ToXContent
         }
     }
 
-    public static class InternalQueryContext {
-        public final String context;
-        public final int boost;
-        public final boolean isPrefix;
-
-        public InternalQueryContext(String context, int boost, boolean isPrefix) {
-            this.context = context;
-            this.boost = boost;
-            this.isPrefix = isPrefix;
-        }
-
-        @Override
-        public boolean equals(Object o) {
-            if (this == o) return true;
-            if (o == null || getClass() != o.getClass()) return false;
-
-            InternalQueryContext that = (InternalQueryContext) o;
-
-            if (boost != that.boost) return false;
-            if (isPrefix != that.isPrefix) return false;
-            return context != null ? context.equals(that.context) : that.context == null;
-
-        }
-
-        @Override
-        public int hashCode() {
-            int result = context != null ? context.hashCode() : 0;
-            result = 31 * result + boost;
-            result = 31 * result + (isPrefix ? 1 : 0);
-            return result;
-        }
-
-        @Override
-        public String toString() {
-            return "QueryContext{" + "context='" + context + '\'' + ", boost=" + boost + ", isPrefix=" + isPrefix + '}';
-        }
-    }
+    public record InternalQueryContext(String context, int boost, boolean isPrefix) {}
 }

+ 6 - 10
server/src/main/java/org/elasticsearch/search/suggest/completion/context/ContextMappings.java

@@ -142,7 +142,7 @@ public class ContextMappings implements ToXContent, Iterable<ContextMapping<?>>
             if (typedContexts.isEmpty()) {
                 throw new IllegalArgumentException("Contexts are mandatory in context enabled completion field [" + name + "]");
             }
-            return new ArrayList<CharSequence>(typedContexts);
+            return new ArrayList<>(typedContexts);
         }
     }
 
@@ -166,8 +166,8 @@ public class ContextMappings implements ToXContent, Iterable<ContextMapping<?>>
                 List<ContextMapping.InternalQueryContext> internalQueryContext = queryContexts.get(mapping.name());
                 if (internalQueryContext != null) {
                     for (ContextMapping.InternalQueryContext context : internalQueryContext) {
-                        scratch.append(context.context);
-                        typedContextQuery.addContext(scratch.toCharsRef(), context.boost, context.isPrefix == false);
+                        scratch.append(context.context());
+                        typedContextQuery.addContext(scratch.toCharsRef(), context.boost(), context.isPrefix() == false);
                         scratch.setLength(1);
                         hasContext = true;
                     }
@@ -193,12 +193,8 @@ public class ContextMappings implements ToXContent, Iterable<ContextMapping<?>>
             int typeId = typedContext.charAt(0);
             assert typeId < contextMappings.size() : "Returned context has invalid type";
             ContextMapping<?> mapping = contextMappings.get(typeId);
-            Set<String> contextEntries = contextMap.get(mapping.name());
-            if (contextEntries == null) {
-                contextEntries = new HashSet<>();
-                contextMap.put(mapping.name(), contextEntries);
-            }
-            contextEntries.add(typedContext.subSequence(1, typedContext.length()).toString());
+            contextMap.computeIfAbsent(mapping.name(), k -> new HashSet<>())
+                .add(typedContext.subSequence(1, typedContext.length()).toString());
         }
         return contextMap;
     }
@@ -273,7 +269,7 @@ public class ContextMappings implements ToXContent, Iterable<ContextMapping<?>>
 
     @Override
     public boolean equals(Object obj) {
-        if (obj == null || (obj instanceof ContextMappings) == false) {
+        if ((obj instanceof ContextMappings) == false) {
             return false;
         }
         ContextMappings other = ((ContextMappings) obj);

+ 0 - 13
server/src/main/java/org/elasticsearch/search/suggest/completion/context/GeoContextMapping.java

@@ -345,19 +345,6 @@ public class GeoContextMapping extends ContextMapping<GeoQueryContext> {
             return precision(DistanceUnit.parse(precision, DistanceUnit.METERS, DistanceUnit.METERS));
         }
 
-        /**
-         * Set the precision use o make suggestions
-         *
-         * @param precision
-         *            precision value
-         * @param unit
-         *            {@link DistanceUnit} to use
-         * @return this
-         */
-        public Builder precision(double precision, DistanceUnit unit) {
-            return precision(unit.toMeters(precision));
-        }
-
         /**
          * Set the precision use o make suggestions
          *

+ 0 - 7
server/src/main/java/org/elasticsearch/search/suggest/phrase/CandidateGenerator.java

@@ -17,15 +17,8 @@ import java.io.IOException;
 //TODO public for tests
 public abstract class CandidateGenerator {
 
-    public abstract boolean isKnownWord(BytesRef term) throws IOException;
-
     public abstract TermStats termStats(BytesRef term) throws IOException;
 
-    public CandidateSet drawCandidates(BytesRef term) throws IOException {
-        CandidateSet set = new CandidateSet(Candidate.EMPTY, createCandidate(term, true));
-        return drawCandidates(set);
-    }
-
     public Candidate createCandidate(BytesRef term, boolean userInput) throws IOException {
         return createCandidate(term, termStats(term), 1.0, userInput);
     }

+ 8 - 16
server/src/main/java/org/elasticsearch/search/suggest/phrase/CandidateScorer.java

@@ -28,13 +28,13 @@ final class CandidateScorer {
         if (sets.length == 0) {
             return Correction.EMPTY;
         }
-        PriorityQueue<Correction> corrections = new PriorityQueue<Correction>(maxNumCorrections) {
+        PriorityQueue<Correction> corrections = new PriorityQueue<>(maxNumCorrections) {
             @Override
             protected boolean lessThan(Correction a, Correction b) {
                 return a.compareTo(b) < 0;
             }
         };
-        int numMissspellings = 1;
+        final int numMissspellings;
         if (errorFraction >= 1.0) {
             numMissspellings = (int) errorFraction;
         } else {
@@ -62,11 +62,11 @@ final class CandidateScorer {
         CandidateSet current = candidates[ord];
         if (ord == candidates.length - 1) {
             path[ord] = current.originalTerm;
-            updateTop(candidates, path, corrections, cutoffScore, pathScore + scorer.score(path, candidates, ord, gramSize));
+            updateTop(candidates, path, corrections, cutoffScore, pathScore + scorer.score(path, ord, gramSize));
             if (numMissspellingsLeft > 0) {
                 for (int i = 0; i < current.candidates.length; i++) {
                     path[ord] = current.candidates[i];
-                    updateTop(candidates, path, corrections, cutoffScore, pathScore + scorer.score(path, candidates, ord, gramSize));
+                    updateTop(candidates, path, corrections, cutoffScore, pathScore + scorer.score(path, ord, gramSize));
                 }
             }
         } else {
@@ -79,7 +79,7 @@ final class CandidateScorer {
                     numMissspellingsLeft,
                     corrections,
                     cutoffScore,
-                    pathScore + scorer.score(path, candidates, ord, gramSize)
+                    pathScore + scorer.score(path, ord, gramSize)
                 );
                 for (int i = 0; i < current.candidates.length; i++) {
                     path[ord] = current.candidates[i];
@@ -90,20 +90,12 @@ final class CandidateScorer {
                         numMissspellingsLeft - 1,
                         corrections,
                         cutoffScore,
-                        pathScore + scorer.score(path, candidates, ord, gramSize)
+                        pathScore + scorer.score(path, ord, gramSize)
                     );
                 }
             } else {
                 path[ord] = current.originalTerm;
-                findCandidates(
-                    candidates,
-                    path,
-                    ord + 1,
-                    0,
-                    corrections,
-                    cutoffScore,
-                    pathScore + scorer.score(path, candidates, ord, gramSize)
-                );
+                findCandidates(candidates, path, ord + 1, 0, corrections, cutoffScore, pathScore + scorer.score(path, ord, gramSize));
             }
         }
 
@@ -135,7 +127,7 @@ final class CandidateScorer {
     public double score(Candidate[] path, CandidateSet[] candidates) throws IOException {
         double score = 0.0d;
         for (int i = 0; i < candidates.length; i++) {
-            score += scorer.score(path, candidates, i, gramSize);
+            score += scorer.score(path, i, gramSize);
         }
         return Math.exp(score);
     }

+ 6 - 20
server/src/main/java/org/elasticsearch/search/suggest/phrase/DirectCandidateGenerator.java

@@ -97,14 +97,6 @@ public final class DirectCandidateGenerator extends CandidateGenerator {
         termsEnum = terms.iterator();
     }
 
-    /* (non-Javadoc)
-     * @see org.elasticsearch.search.suggest.phrase.CandidateGenerator#isKnownWord(org.apache.lucene.util.BytesRef)
-     */
-    @Override
-    public boolean isKnownWord(BytesRef term) throws IOException {
-        return termStats(term).docFreq > 0;
-    }
-
     /* (non-Javadoc)
      * @see org.elasticsearch.search.suggest.phrase.CandidateGenerator#frequency(org.apache.lucene.util.BytesRef)
      */
@@ -128,10 +120,6 @@ public final class DirectCandidateGenerator extends CandidateGenerator {
         return new TermStats(0, 0);
     }
 
-    public String getField() {
-        return field;
-    }
-
     @Override
     public CandidateSet drawCandidates(CandidateSet set) throws IOException {
         Candidate original = set.originalTerm;
@@ -181,15 +169,14 @@ public final class DirectCandidateGenerator extends CandidateGenerator {
         if (preFilter == null) {
             return term;
         }
-        final BytesRefBuilder result = byteSpare;
         analyze(preFilter, term, field, new TokenConsumer() {
 
             @Override
-            public void nextToken() throws IOException {
-                this.fillBytesRef(result);
+            public void nextToken() {
+                this.fillBytesRef(byteSpare);
             }
         }, spare);
-        return result.get();
+        return byteSpare.get();
     }
 
     protected void postFilter(
@@ -344,11 +331,10 @@ public final class DirectCandidateGenerator extends CandidateGenerator {
             if (getClass() != obj.getClass()) return false;
             Candidate other = (Candidate) obj;
             if (term == null) {
-                if (other.term != null) return false;
+                return other.term == null;
             } else {
-                if (term.equals(other.term) == false) return false;
+                return term.equals(other.term) != false;
             }
-            return true;
         }
 
         /** Lower scores sort first; if scores are equal, then later (zzz) terms sort first */
@@ -364,7 +350,7 @@ public final class DirectCandidateGenerator extends CandidateGenerator {
     }
 
     @Override
-    public Candidate createCandidate(BytesRef term, TermStats termStats, double channelScore, boolean userInput) throws IOException {
+    public Candidate createCandidate(BytesRef term, TermStats termStats, double channelScore, boolean userInput) {
         return new Candidate(term, termStats, channelScore, score(termStats, channelScore, sumTotalTermFreq), userInput);
     }
 

+ 14 - 22
server/src/main/java/org/elasticsearch/search/suggest/phrase/DirectCandidateGeneratorBuilder.java

@@ -437,32 +437,24 @@ public final class DirectCandidateGeneratorBuilder implements CandidateGenerator
 
     private static SuggestMode resolveSuggestMode(String suggestMode) {
         suggestMode = suggestMode.toLowerCase(Locale.US);
-        if ("missing".equals(suggestMode)) {
-            return SuggestMode.SUGGEST_WHEN_NOT_IN_INDEX;
-        } else if ("popular".equals(suggestMode)) {
-            return SuggestMode.SUGGEST_MORE_POPULAR;
-        } else if ("always".equals(suggestMode)) {
-            return SuggestMode.SUGGEST_ALWAYS;
-        } else {
-            throw new IllegalArgumentException("Illegal suggest mode " + suggestMode);
-        }
+        return switch (suggestMode) {
+            case "missing" -> SuggestMode.SUGGEST_WHEN_NOT_IN_INDEX;
+            case "popular" -> SuggestMode.SUGGEST_MORE_POPULAR;
+            case "always" -> SuggestMode.SUGGEST_ALWAYS;
+            default -> throw new IllegalArgumentException("Illegal suggest mode " + suggestMode);
+        };
     }
 
     static StringDistance resolveDistance(String distanceVal) {
         distanceVal = distanceVal.toLowerCase(Locale.ROOT);
-        if ("internal".equals(distanceVal)) {
-            return DirectSpellChecker.INTERNAL_LEVENSHTEIN;
-        } else if ("damerau_levenshtein".equals(distanceVal)) {
-            return new LuceneLevenshteinDistance();
-        } else if ("levenshtein".equals(distanceVal)) {
-            return new LevenshteinDistance();
-        } else if ("jaro_winkler".equals(distanceVal)) {
-            return new JaroWinklerDistance();
-        } else if ("ngram".equals(distanceVal)) {
-            return new NGramDistance();
-        } else {
-            throw new IllegalArgumentException("Illegal distance option " + distanceVal);
-        }
+        return switch (distanceVal) {
+            case "internal" -> DirectSpellChecker.INTERNAL_LEVENSHTEIN;
+            case "damerau_levenshtein" -> new LuceneLevenshteinDistance();
+            case "levenshtein" -> new LevenshteinDistance();
+            case "jaro_winkler" -> new JaroWinklerDistance();
+            case "ngram" -> new NGramDistance();
+            default -> throw new IllegalArgumentException("Illegal distance option " + distanceVal);
+        };
     }
 
     private static <T> void transferIfNotNull(T value, Consumer<T> consumer) {

+ 1 - 1
server/src/main/java/org/elasticsearch/search/suggest/phrase/Laplace.java

@@ -42,7 +42,7 @@ public final class Laplace extends SmoothingModel {
      */
     public static final double DEFAULT_LAPLACE_ALPHA = 0.5;
 
-    private double alpha = DEFAULT_LAPLACE_ALPHA;
+    private final double alpha;
 
     /**
      * Creates a Laplace smoothing model.

+ 1 - 1
server/src/main/java/org/elasticsearch/search/suggest/phrase/LaplaceScorer.java

@@ -15,7 +15,7 @@ import org.elasticsearch.search.suggest.phrase.DirectCandidateGenerator.Candidat
 import java.io.IOException;
 
 final class LaplaceScorer extends WordScorer {
-    private double alpha;
+    private final double alpha;
 
     LaplaceScorer(IndexReader reader, Terms terms, String field, double realWordLikelihood, BytesRef separator, double alpha)
         throws IOException {

+ 1 - 6
server/src/main/java/org/elasticsearch/search/suggest/phrase/MultiCandidateGeneratorWrapper.java

@@ -19,18 +19,13 @@ import java.util.Arrays;
 public final class MultiCandidateGeneratorWrapper extends CandidateGenerator {
 
     private final CandidateGenerator[] candidateGenerator;
-    private int numCandidates;
+    private final int numCandidates;
 
     public MultiCandidateGeneratorWrapper(int numCandidates, CandidateGenerator... candidateGenerators) {
         this.candidateGenerator = candidateGenerators;
         this.numCandidates = numCandidates;
     }
 
-    @Override
-    public boolean isKnownWord(BytesRef term) throws IOException {
-        return candidateGenerator[0].isKnownWord(term);
-    }
-
     @Override
     public TermStats termStats(BytesRef term) throws IOException {
         return candidateGenerator[0].termStats(term);

+ 2 - 2
server/src/main/java/org/elasticsearch/search/suggest/phrase/PhraseSuggester.java

@@ -159,7 +159,7 @@ public final class PhraseSuggester extends Suggester<PhraseSuggestionContext> {
         return response;
     }
 
-    private static TokenStream tokenStream(Analyzer analyzer, BytesRef query, CharsRefBuilder spare, String field) throws IOException {
+    private static TokenStream tokenStream(Analyzer analyzer, BytesRef query, CharsRefBuilder spare, String field) {
         spare.copyUTF8Bytes(query);
         return analyzer.tokenStream(field, new CharArrayReader(spare.chars(), 0, spare.length()));
     }
@@ -174,7 +174,7 @@ public final class PhraseSuggester extends Suggester<PhraseSuggestionContext> {
         String name,
         PhraseSuggestionContext suggestion,
         CharsRefBuilder spare
-    ) throws IOException {
+    ) {
         PhraseSuggestion phraseSuggestion = new PhraseSuggestion(name, suggestion.getSize());
         spare.copyUTF8Bytes(suggestion.getText());
         phraseSuggestion.addTerm(new PhraseSuggestion.Entry(new Text(spare.toString()), 0, spare.length()));

+ 0 - 7
server/src/main/java/org/elasticsearch/search/suggest/phrase/PhraseSuggestion.java

@@ -73,13 +73,6 @@ public class PhraseSuggestion extends Suggest.Suggestion<PhraseSuggestion.Entry>
             cutoffScore = in.readDouble();
         }
 
-        /**
-         * @return cutoff score for suggestions.  input term score * confidence for phrase suggest, 0 otherwise
-         */
-        public double getCutoffScore() {
-            return cutoffScore;
-        }
-
         @Override
         protected void merge(Suggestion.Entry<Option> other) {
             super.merge(other);

+ 2 - 7
server/src/main/java/org/elasticsearch/search/suggest/phrase/PhraseSuggestionBuilder.java

@@ -276,12 +276,7 @@ public class PhraseSuggestionBuilder extends SuggestionBuilder<PhraseSuggestionB
      * phrase term before the candidates are scored.
      */
     public PhraseSuggestionBuilder addCandidateGenerator(CandidateGenerator generator) {
-        List<CandidateGenerator> list = this.generators.get(generator.getType());
-        if (list == null) {
-            list = new ArrayList<>();
-            this.generators.put(generator.getType(), list);
-        }
-        list.add(generator);
+        this.generators.computeIfAbsent(generator.getType(), k -> new ArrayList<>()).add(generator);
         return this;
     }
 
@@ -513,7 +508,7 @@ public class PhraseSuggestionBuilder extends SuggestionBuilder<PhraseSuggestionB
             } else if (token == Token.START_ARRAY) {
                 if (DirectCandidateGeneratorBuilder.DIRECT_GENERATOR_FIELD.match(currentFieldName, parser.getDeprecationHandler())) {
                     // for now we only have a single type of generators
-                    while ((token = parser.nextToken()) == Token.START_OBJECT) {
+                    while (parser.nextToken() == Token.START_OBJECT) {
                         tmpSuggestion.addCandidateGenerator(DirectCandidateGeneratorBuilder.PARSER.apply(parser, null));
                     }
                 } else {

+ 1 - 1
server/src/main/java/org/elasticsearch/search/suggest/phrase/PhraseSuggestionContext.java

@@ -48,7 +48,7 @@ class PhraseSuggestionContext extends SuggestionContext {
     private BytesRef postTag;
     private TemplateScript.Factory scriptFactory;
     private boolean prune = DEFAULT_COLLATE_PRUNE;
-    private List<DirectCandidateGenerator> generators = new ArrayList<>();
+    private final List<DirectCandidateGenerator> generators = new ArrayList<>();
     private Map<String, Object> collateScriptParams = Maps.newMapWithExpectedSize(1);
     private WordScorer.WordScorerFactory scorer = DEFAULT_SCORER;
 

+ 1 - 1
server/src/main/java/org/elasticsearch/search/suggest/phrase/StupidBackoff.java

@@ -43,7 +43,7 @@ public final class StupidBackoff extends SmoothingModel {
     private static final ParseField DISCOUNT_FIELD = new ParseField("discount");
     static final ParseField PARSE_FIELD = new ParseField(NAME);
 
-    private double discount = DEFAULT_BACKOFF_DISCOUNT;
+    private final double discount;
 
     /**
      * Creates a Stupid-Backoff smoothing model.

+ 5 - 12
server/src/main/java/org/elasticsearch/search/suggest/phrase/WordScorer.java

@@ -16,15 +16,11 @@ import org.apache.lucene.util.BytesRefBuilder;
 import org.elasticsearch.common.lucene.index.FreqTermsEnum;
 import org.elasticsearch.common.util.BigArrays;
 import org.elasticsearch.search.suggest.phrase.DirectCandidateGenerator.Candidate;
-import org.elasticsearch.search.suggest.phrase.DirectCandidateGenerator.CandidateSet;
 
 import java.io.IOException;
 
 //TODO public for tests
 public abstract class WordScorer {
-    protected final IndexReader reader;
-    protected final String field;
-    protected final Terms terms;
     protected final long vocabluarySize;
     protected final double realWordLikelihood;
     protected final BytesRefBuilder spare = new BytesRefBuilder();
@@ -38,11 +34,9 @@ public abstract class WordScorer {
     }
 
     public WordScorer(IndexReader reader, Terms terms, String field, double realWordLikelihood, BytesRef separator) throws IOException {
-        this.field = field;
         if (terms == null) {
             throw new IllegalArgumentException("Field: [" + field + "] does not exist");
         }
-        this.terms = terms;
         final long vocSize = terms.getSumTotalTermFreq();
         this.vocabluarySize = vocSize == -1 ? reader.maxDoc() : vocSize;
         this.useTotalTermFreq = vocSize != -1;
@@ -60,7 +54,6 @@ public abstract class WordScorer {
             null,
             BigArrays.NON_RECYCLING_INSTANCE
         );
-        this.reader = reader;
         this.realWordLikelihood = realWordLikelihood;
         this.separator = separator;
     }
@@ -72,20 +65,20 @@ public abstract class WordScorer {
         return 0;
     }
 
-    protected double channelScore(Candidate candidate, Candidate original) throws IOException {
+    protected double channelScore(Candidate candidate) {
         if (candidate.stringDistance == 1.0d) {
             return realWordLikelihood;
         }
         return candidate.stringDistance;
     }
 
-    public double score(Candidate[] path, CandidateSet[] candidateSet, int at, int gramSize) throws IOException {
+    public double score(Candidate[] path, int at, int gramSize) throws IOException {
         if (at == 0 || gramSize == 1) {
-            return Math.log10(channelScore(path[at], candidateSet[at].originalTerm) * scoreUnigram(path[at]));
+            return Math.log10(channelScore(path[at]) * scoreUnigram(path[at]));
         } else if (at == 1 || gramSize == 2) {
-            return Math.log10(channelScore(path[at], candidateSet[at].originalTerm) * scoreBigram(path[at], path[at - 1]));
+            return Math.log10(channelScore(path[at]) * scoreBigram(path[at], path[at - 1]));
         } else {
-            return Math.log10(channelScore(path[at], candidateSet[at].originalTerm) * scoreTrigram(path[at], path[at - 1], path[at - 2]));
+            return Math.log10(channelScore(path[at]) * scoreTrigram(path[at], path[at - 1], path[at - 2]));
         }
     }
 

+ 1 - 13
server/src/main/java/org/elasticsearch/search/suggest/term/TermSuggestion.java

@@ -34,7 +34,7 @@ public class TermSuggestion extends Suggestion<TermSuggestion.Entry> {
     public static final Comparator<Suggestion.Entry.Option> SCORE = new Score();
     public static final Comparator<Suggestion.Entry.Option> FREQUENCY = new Frequency();
 
-    private SortBy sort;
+    private final SortBy sort;
 
     public TermSuggestion(String name, int size, SortBy sort) {
         super(name, size);
@@ -85,14 +85,6 @@ public class TermSuggestion extends Suggestion<TermSuggestion.Entry> {
         }
     }
 
-    public void setSort(SortBy sort) {
-        this.sort = sort;
-    }
-
-    public SortBy getSort() {
-        return sort;
-    }
-
     @Override
     protected Comparator<Option> sortComparator() {
         return switch (sort) {
@@ -193,10 +185,6 @@ public class TermSuggestion extends Suggestion<TermSuggestion.Entry> {
                 freq += ((Option) otherOption).freq;
             }
 
-            public void setFreq(int freq) {
-                this.freq = freq;
-            }
-
             /**
              * @return How often this suggested text appears in the index.
              */

+ 1 - 1
server/src/main/java/org/elasticsearch/search/suggest/term/TermSuggestionBuilder.java

@@ -434,7 +434,7 @@ public class TermSuggestionBuilder extends SuggestionBuilder<TermSuggestionBuild
     }
 
     @Override
-    public SuggestionContext build(SearchExecutionContext context) throws IOException {
+    public SuggestionContext build(SearchExecutionContext context) {
         TermSuggestionContext suggestionContext = new TermSuggestionContext(context);
         // copy over common settings to each suggestion builder
         populateCommonFields(context, suggestionContext);

+ 0 - 4
server/src/main/java/org/elasticsearch/search/vectors/KnnSearchBuilder.java

@@ -234,10 +234,6 @@ public class KnnSearchBuilder implements Writeable, ToXContentFragment, Rewritea
         }
     }
 
-    public String getField() {
-        return field;
-    }
-
     public int k() {
         return k;
     }

+ 0 - 4
server/src/main/java/org/elasticsearch/search/vectors/VectorSimilarityQuery.java

@@ -53,10 +53,6 @@ public class VectorSimilarityQuery extends Query {
         return similarity;
     }
 
-    float getDocScore() {
-        return docScore;
-    }
-
     @Override
     public Query rewrite(IndexSearcher searcher) throws IOException {
         Query rewrittenInnerQuery = innerKnnQuery.rewrite(searcher);

+ 0 - 2
server/src/test/java/org/elasticsearch/search/MultiValueModeTests.java

@@ -222,7 +222,6 @@ public class MultiValueModeTests extends ESTestCase {
                     missingValue,
                     rootDocs,
                     new BitSetIterator(innerDocs, 0L),
-                    maxDoc,
                     maxChildren
                 );
                 int prevRoot = -1;
@@ -610,7 +609,6 @@ public class MultiValueModeTests extends ESTestCase {
                     missingValue,
                     rootDocs,
                     new BitSetIterator(innerDocs, 0L),
-                    maxDoc,
                     maxChildren
                 );
                 int prevRoot = -1;

+ 66 - 66
server/src/test/java/org/elasticsearch/search/suggest/completion/CategoryContextMappingTests.java

@@ -459,9 +459,9 @@ public class CategoryContextMappingTests extends MapperServiceTestCase {
             CategoryContextMapping mapping = ContextBuilder.category("cat").build();
             List<ContextMapping.InternalQueryContext> internalQueryContexts = mapping.parseQueryContext(parser);
             assertThat(internalQueryContexts.size(), equalTo(1));
-            assertThat(internalQueryContexts.get(0).context, equalTo("context1"));
-            assertThat(internalQueryContexts.get(0).boost, equalTo(1));
-            assertThat(internalQueryContexts.get(0).isPrefix, equalTo(false));
+            assertThat(internalQueryContexts.get(0).context(), equalTo("context1"));
+            assertThat(internalQueryContexts.get(0).boost(), equalTo(1));
+            assertThat(internalQueryContexts.get(0).isPrefix(), equalTo(false));
         }
     }
 
@@ -471,9 +471,9 @@ public class CategoryContextMappingTests extends MapperServiceTestCase {
             CategoryContextMapping mapping = ContextBuilder.category("cat").build();
             List<ContextMapping.InternalQueryContext> internalQueryContexts = mapping.parseQueryContext(parser);
             assertThat(internalQueryContexts.size(), equalTo(1));
-            assertThat(internalQueryContexts.get(0).context, equalTo("true"));
-            assertThat(internalQueryContexts.get(0).boost, equalTo(1));
-            assertThat(internalQueryContexts.get(0).isPrefix, equalTo(false));
+            assertThat(internalQueryContexts.get(0).context(), equalTo("true"));
+            assertThat(internalQueryContexts.get(0).boost(), equalTo(1));
+            assertThat(internalQueryContexts.get(0).isPrefix(), equalTo(false));
         }
     }
 
@@ -483,9 +483,9 @@ public class CategoryContextMappingTests extends MapperServiceTestCase {
             CategoryContextMapping mapping = ContextBuilder.category("cat").build();
             List<ContextMapping.InternalQueryContext> internalQueryContexts = mapping.parseQueryContext(parser);
             assertThat(internalQueryContexts.size(), equalTo(1));
-            assertThat(internalQueryContexts.get(0).context, equalTo("10"));
-            assertThat(internalQueryContexts.get(0).boost, equalTo(1));
-            assertThat(internalQueryContexts.get(0).isPrefix, equalTo(false));
+            assertThat(internalQueryContexts.get(0).context(), equalTo("10"));
+            assertThat(internalQueryContexts.get(0).boost(), equalTo(1));
+            assertThat(internalQueryContexts.get(0).isPrefix(), equalTo(false));
         }
     }
 
@@ -505,12 +505,12 @@ public class CategoryContextMappingTests extends MapperServiceTestCase {
             CategoryContextMapping mapping = ContextBuilder.category("cat").build();
             List<ContextMapping.InternalQueryContext> internalQueryContexts = mapping.parseQueryContext(parser);
             assertThat(internalQueryContexts.size(), equalTo(2));
-            assertThat(internalQueryContexts.get(0).context, equalTo("context1"));
-            assertThat(internalQueryContexts.get(0).boost, equalTo(1));
-            assertThat(internalQueryContexts.get(0).isPrefix, equalTo(false));
-            assertThat(internalQueryContexts.get(1).context, equalTo("context2"));
-            assertThat(internalQueryContexts.get(1).boost, equalTo(1));
-            assertThat(internalQueryContexts.get(1).isPrefix, equalTo(false));
+            assertThat(internalQueryContexts.get(0).context(), equalTo("context1"));
+            assertThat(internalQueryContexts.get(0).boost(), equalTo(1));
+            assertThat(internalQueryContexts.get(0).isPrefix(), equalTo(false));
+            assertThat(internalQueryContexts.get(1).context(), equalTo("context2"));
+            assertThat(internalQueryContexts.get(1).boost(), equalTo(1));
+            assertThat(internalQueryContexts.get(1).isPrefix(), equalTo(false));
         }
     }
 
@@ -520,18 +520,18 @@ public class CategoryContextMappingTests extends MapperServiceTestCase {
             CategoryContextMapping mapping = ContextBuilder.category("cat").build();
             List<ContextMapping.InternalQueryContext> internalQueryContexts = mapping.parseQueryContext(parser);
             assertThat(internalQueryContexts.size(), equalTo(4));
-            assertThat(internalQueryContexts.get(0).context, equalTo("context1"));
-            assertThat(internalQueryContexts.get(0).boost, equalTo(1));
-            assertThat(internalQueryContexts.get(0).isPrefix, equalTo(false));
-            assertThat(internalQueryContexts.get(1).context, equalTo("context2"));
-            assertThat(internalQueryContexts.get(1).boost, equalTo(1));
-            assertThat(internalQueryContexts.get(1).isPrefix, equalTo(false));
-            assertThat(internalQueryContexts.get(2).context, equalTo("true"));
-            assertThat(internalQueryContexts.get(2).boost, equalTo(1));
-            assertThat(internalQueryContexts.get(2).isPrefix, equalTo(false));
-            assertThat(internalQueryContexts.get(3).context, equalTo("10"));
-            assertThat(internalQueryContexts.get(3).boost, equalTo(1));
-            assertThat(internalQueryContexts.get(3).isPrefix, equalTo(false));
+            assertThat(internalQueryContexts.get(0).context(), equalTo("context1"));
+            assertThat(internalQueryContexts.get(0).boost(), equalTo(1));
+            assertThat(internalQueryContexts.get(0).isPrefix(), equalTo(false));
+            assertThat(internalQueryContexts.get(1).context(), equalTo("context2"));
+            assertThat(internalQueryContexts.get(1).boost(), equalTo(1));
+            assertThat(internalQueryContexts.get(1).isPrefix(), equalTo(false));
+            assertThat(internalQueryContexts.get(2).context(), equalTo("true"));
+            assertThat(internalQueryContexts.get(2).boost(), equalTo(1));
+            assertThat(internalQueryContexts.get(2).isPrefix(), equalTo(false));
+            assertThat(internalQueryContexts.get(3).context(), equalTo("10"));
+            assertThat(internalQueryContexts.get(3).boost(), equalTo(1));
+            assertThat(internalQueryContexts.get(3).isPrefix(), equalTo(false));
         }
     }
 
@@ -561,9 +561,9 @@ public class CategoryContextMappingTests extends MapperServiceTestCase {
             CategoryContextMapping mapping = ContextBuilder.category("cat").build();
             List<ContextMapping.InternalQueryContext> internalQueryContexts = mapping.parseQueryContext(parser);
             assertThat(internalQueryContexts.size(), equalTo(1));
-            assertThat(internalQueryContexts.get(0).context, equalTo("context1"));
-            assertThat(internalQueryContexts.get(0).boost, equalTo(10));
-            assertThat(internalQueryContexts.get(0).isPrefix, equalTo(true));
+            assertThat(internalQueryContexts.get(0).context(), equalTo("context1"));
+            assertThat(internalQueryContexts.get(0).boost(), equalTo(10));
+            assertThat(internalQueryContexts.get(0).isPrefix(), equalTo(true));
         }
     }
 
@@ -573,9 +573,9 @@ public class CategoryContextMappingTests extends MapperServiceTestCase {
             CategoryContextMapping mapping = ContextBuilder.category("cat").build();
             List<ContextMapping.InternalQueryContext> internalQueryContexts = mapping.parseQueryContext(parser);
             assertThat(internalQueryContexts.size(), equalTo(1));
-            assertThat(internalQueryContexts.get(0).context, equalTo("false"));
-            assertThat(internalQueryContexts.get(0).boost, equalTo(10));
-            assertThat(internalQueryContexts.get(0).isPrefix, equalTo(true));
+            assertThat(internalQueryContexts.get(0).context(), equalTo("false"));
+            assertThat(internalQueryContexts.get(0).boost(), equalTo(10));
+            assertThat(internalQueryContexts.get(0).isPrefix(), equalTo(true));
         }
     }
 
@@ -585,9 +585,9 @@ public class CategoryContextMappingTests extends MapperServiceTestCase {
             CategoryContextMapping mapping = ContextBuilder.category("cat").build();
             List<ContextMapping.InternalQueryContext> internalQueryContexts = mapping.parseQueryContext(parser);
             assertThat(internalQueryContexts.size(), equalTo(1));
-            assertThat(internalQueryContexts.get(0).context, equalTo("333"));
-            assertThat(internalQueryContexts.get(0).boost, equalTo(10));
-            assertThat(internalQueryContexts.get(0).isPrefix, equalTo(true));
+            assertThat(internalQueryContexts.get(0).context(), equalTo("333"));
+            assertThat(internalQueryContexts.get(0).boost(), equalTo(10));
+            assertThat(internalQueryContexts.get(0).isPrefix(), equalTo(true));
         }
     }
 
@@ -618,12 +618,12 @@ public class CategoryContextMappingTests extends MapperServiceTestCase {
             CategoryContextMapping mapping = ContextBuilder.category("cat").build();
             List<ContextMapping.InternalQueryContext> internalQueryContexts = mapping.parseQueryContext(parser);
             assertThat(internalQueryContexts.size(), equalTo(2));
-            assertThat(internalQueryContexts.get(0).context, equalTo("context1"));
-            assertThat(internalQueryContexts.get(0).boost, equalTo(2));
-            assertThat(internalQueryContexts.get(0).isPrefix, equalTo(true));
-            assertThat(internalQueryContexts.get(1).context, equalTo("context2"));
-            assertThat(internalQueryContexts.get(1).boost, equalTo(3));
-            assertThat(internalQueryContexts.get(1).isPrefix, equalTo(false));
+            assertThat(internalQueryContexts.get(0).context(), equalTo("context1"));
+            assertThat(internalQueryContexts.get(0).boost(), equalTo(2));
+            assertThat(internalQueryContexts.get(0).isPrefix(), equalTo(true));
+            assertThat(internalQueryContexts.get(1).context(), equalTo("context2"));
+            assertThat(internalQueryContexts.get(1).boost(), equalTo(3));
+            assertThat(internalQueryContexts.get(1).isPrefix(), equalTo(false));
         }
     }
 
@@ -654,18 +654,18 @@ public class CategoryContextMappingTests extends MapperServiceTestCase {
             CategoryContextMapping mapping = ContextBuilder.category("cat").build();
             List<ContextMapping.InternalQueryContext> internalQueryContexts = mapping.parseQueryContext(parser);
             assertThat(internalQueryContexts.size(), equalTo(4));
-            assertThat(internalQueryContexts.get(0).context, equalTo("context1"));
-            assertThat(internalQueryContexts.get(0).boost, equalTo(2));
-            assertThat(internalQueryContexts.get(0).isPrefix, equalTo(true));
-            assertThat(internalQueryContexts.get(1).context, equalTo("context2"));
-            assertThat(internalQueryContexts.get(1).boost, equalTo(3));
-            assertThat(internalQueryContexts.get(1).isPrefix, equalTo(false));
-            assertThat(internalQueryContexts.get(2).context, equalTo("true"));
-            assertThat(internalQueryContexts.get(2).boost, equalTo(3));
-            assertThat(internalQueryContexts.get(2).isPrefix, equalTo(false));
-            assertThat(internalQueryContexts.get(3).context, equalTo("333"));
-            assertThat(internalQueryContexts.get(3).boost, equalTo(3));
-            assertThat(internalQueryContexts.get(3).isPrefix, equalTo(false));
+            assertThat(internalQueryContexts.get(0).context(), equalTo("context1"));
+            assertThat(internalQueryContexts.get(0).boost(), equalTo(2));
+            assertThat(internalQueryContexts.get(0).isPrefix(), equalTo(true));
+            assertThat(internalQueryContexts.get(1).context(), equalTo("context2"));
+            assertThat(internalQueryContexts.get(1).boost(), equalTo(3));
+            assertThat(internalQueryContexts.get(1).isPrefix(), equalTo(false));
+            assertThat(internalQueryContexts.get(2).context(), equalTo("true"));
+            assertThat(internalQueryContexts.get(2).boost(), equalTo(3));
+            assertThat(internalQueryContexts.get(2).isPrefix(), equalTo(false));
+            assertThat(internalQueryContexts.get(3).context(), equalTo("333"));
+            assertThat(internalQueryContexts.get(3).boost(), equalTo(3));
+            assertThat(internalQueryContexts.get(3).isPrefix(), equalTo(false));
         }
     }
 
@@ -724,18 +724,18 @@ public class CategoryContextMappingTests extends MapperServiceTestCase {
             CategoryContextMapping mapping = ContextBuilder.category("cat").build();
             List<ContextMapping.InternalQueryContext> internalQueryContexts = mapping.parseQueryContext(parser);
             assertThat(internalQueryContexts.size(), equalTo(4));
-            assertThat(internalQueryContexts.get(0).context, equalTo("context1"));
-            assertThat(internalQueryContexts.get(0).boost, equalTo(2));
-            assertThat(internalQueryContexts.get(0).isPrefix, equalTo(true));
-            assertThat(internalQueryContexts.get(1).context, equalTo("context2"));
-            assertThat(internalQueryContexts.get(1).boost, equalTo(1));
-            assertThat(internalQueryContexts.get(1).isPrefix, equalTo(false));
-            assertThat(internalQueryContexts.get(2).context, equalTo("false"));
-            assertThat(internalQueryContexts.get(2).boost, equalTo(1));
-            assertThat(internalQueryContexts.get(2).isPrefix, equalTo(false));
-            assertThat(internalQueryContexts.get(3).context, equalTo("333"));
-            assertThat(internalQueryContexts.get(3).boost, equalTo(2));
-            assertThat(internalQueryContexts.get(3).isPrefix, equalTo(true));
+            assertThat(internalQueryContexts.get(0).context(), equalTo("context1"));
+            assertThat(internalQueryContexts.get(0).boost(), equalTo(2));
+            assertThat(internalQueryContexts.get(0).isPrefix(), equalTo(true));
+            assertThat(internalQueryContexts.get(1).context(), equalTo("context2"));
+            assertThat(internalQueryContexts.get(1).boost(), equalTo(1));
+            assertThat(internalQueryContexts.get(1).isPrefix(), equalTo(false));
+            assertThat(internalQueryContexts.get(2).context(), equalTo("false"));
+            assertThat(internalQueryContexts.get(2).boost(), equalTo(1));
+            assertThat(internalQueryContexts.get(2).isPrefix(), equalTo(false));
+            assertThat(internalQueryContexts.get(3).context(), equalTo("333"));
+            assertThat(internalQueryContexts.get(3).boost(), equalTo(2));
+            assertThat(internalQueryContexts.get(3).isPrefix(), equalTo(true));
         }
     }
 

+ 30 - 21
server/src/test/java/org/elasticsearch/search/suggest/completion/GeoContextMappingTests.java

@@ -313,9 +313,9 @@ public class GeoContextMappingTests extends MapperServiceTestCase {
         locations.add("ezs42e");
         addNeighborsAtLevel("ezs42e", GeoContextMapping.DEFAULT_PRECISION, locations);
         for (ContextMapping.InternalQueryContext internalQueryContext : internalQueryContexts) {
-            assertThat(internalQueryContext.context, is(in(locations)));
-            assertThat(internalQueryContext.boost, equalTo(1));
-            assertThat(internalQueryContext.isPrefix, equalTo(false));
+            assertThat(internalQueryContext.context(), is(in(locations)));
+            assertThat(internalQueryContext.boost(), equalTo(1));
+            assertThat(internalQueryContext.isPrefix(), equalTo(false));
         }
     }
 
@@ -329,9 +329,9 @@ public class GeoContextMappingTests extends MapperServiceTestCase {
         locations.add("wh0n94");
         addNeighborsAtLevel("wh0n94", GeoContextMapping.DEFAULT_PRECISION, locations);
         for (ContextMapping.InternalQueryContext internalQueryContext : internalQueryContexts) {
-            assertThat(internalQueryContext.context, is(in(locations)));
-            assertThat(internalQueryContext.boost, equalTo(1));
-            assertThat(internalQueryContext.isPrefix, equalTo(false));
+            assertThat(internalQueryContext.context(), is(in(locations)));
+            assertThat(internalQueryContext.boost(), equalTo(1));
+            assertThat(internalQueryContext.isPrefix(), equalTo(false));
         }
     }
 
@@ -357,9 +357,12 @@ public class GeoContextMappingTests extends MapperServiceTestCase {
         locations.add("wh0");
         addNeighborsAtLevel("wh0", 3, locations);
         for (ContextMapping.InternalQueryContext internalQueryContext : internalQueryContexts) {
-            assertThat(internalQueryContext.context, is(in(locations)));
-            assertThat(internalQueryContext.boost, equalTo(10));
-            assertThat(internalQueryContext.isPrefix, equalTo(internalQueryContext.context.length() < GeoContextMapping.DEFAULT_PRECISION));
+            assertThat(internalQueryContext.context(), is(in(locations)));
+            assertThat(internalQueryContext.boost(), equalTo(10));
+            assertThat(
+                internalQueryContext.isPrefix(),
+                equalTo(internalQueryContext.context().length() < GeoContextMapping.DEFAULT_PRECISION)
+            );
         }
     }
 
@@ -399,14 +402,17 @@ public class GeoContextMappingTests extends MapperServiceTestCase {
         secondLocations.add("w5cx0");
         addNeighborsAtLevel("w5cx0", 5, secondLocations);
         for (ContextMapping.InternalQueryContext internalQueryContext : internalQueryContexts) {
-            if (firstLocations.contains(internalQueryContext.context)) {
-                assertThat(internalQueryContext.boost, equalTo(10));
-            } else if (secondLocations.contains(internalQueryContext.context)) {
-                assertThat(internalQueryContext.boost, equalTo(2));
+            if (firstLocations.contains(internalQueryContext.context())) {
+                assertThat(internalQueryContext.boost(), equalTo(10));
+            } else if (secondLocations.contains(internalQueryContext.context())) {
+                assertThat(internalQueryContext.boost(), equalTo(2));
             } else {
-                fail(internalQueryContext.context + " was not expected");
+                fail(internalQueryContext.context() + " was not expected");
             }
-            assertThat(internalQueryContext.isPrefix, equalTo(internalQueryContext.context.length() < GeoContextMapping.DEFAULT_PRECISION));
+            assertThat(
+                internalQueryContext.isPrefix(),
+                equalTo(internalQueryContext.context().length() < GeoContextMapping.DEFAULT_PRECISION)
+            );
         }
     }
 
@@ -439,14 +445,17 @@ public class GeoContextMappingTests extends MapperServiceTestCase {
         secondLocations.add("w5cx04");
         addNeighborsAtLevel("w5cx04", 6, secondLocations);
         for (ContextMapping.InternalQueryContext internalQueryContext : internalQueryContexts) {
-            if (firstLocations.contains(internalQueryContext.context)) {
-                assertThat(internalQueryContext.boost, equalTo(10));
-            } else if (secondLocations.contains(internalQueryContext.context)) {
-                assertThat(internalQueryContext.boost, equalTo(1));
+            if (firstLocations.contains(internalQueryContext.context())) {
+                assertThat(internalQueryContext.boost(), equalTo(10));
+            } else if (secondLocations.contains(internalQueryContext.context())) {
+                assertThat(internalQueryContext.boost(), equalTo(1));
             } else {
-                fail(internalQueryContext.context + " was not expected");
+                fail(internalQueryContext.context() + " was not expected");
             }
-            assertThat(internalQueryContext.isPrefix, equalTo(internalQueryContext.context.length() < GeoContextMapping.DEFAULT_PRECISION));
+            assertThat(
+                internalQueryContext.isPrefix(),
+                equalTo(internalQueryContext.context().length() < GeoContextMapping.DEFAULT_PRECISION)
+            );
         }
     }
 }

+ 0 - 5
test/framework/src/main/java/org/elasticsearch/test/TestSearchContext.java

@@ -217,11 +217,6 @@ public class TestSearchContext extends SearchContext {
         return false;
     }
 
-    @Override
-    public boolean hasFetchSourceContext() {
-        return false;
-    }
-
     @Override
     public FetchSourceContext fetchSourceContext() {
         return null;