Просмотр исходного кода

Add getMinimalSupportedVersion to QueryBuilders (#83208)

Supporting #81809, we changed query builders to implement 'VersionedNamedWriteable' to be able to detect
when new query builders under the search enpoint are introduced and also to force new implementations to overwrite
'getMinimalSupportedVersion' with a current release version.
This change removes the default implementation in the QueryBuilder interface and replaces it with individual
implementations in the currently existing query builders. For builders that have been around for longer than 7.0 (the
earliest verison constant we currently have around) we use Version.V_EMPTY which sorts always before any other declared version.
Christoph Büscher 3 лет назад
Родитель
Сommit
5536884936
68 измененных файлов с 366 добавлено и 122 удалено
  1. 5 0
      modules/mapper-extras/src/main/java/org/elasticsearch/index/mapper/extras/RankFeatureQueryBuilder.java
  2. 6 0
      modules/parent-join/src/main/java/org/elasticsearch/join/query/HasChildQueryBuilder.java
  3. 5 0
      modules/parent-join/src/main/java/org/elasticsearch/join/query/HasParentQueryBuilder.java
  4. 6 0
      modules/parent-join/src/main/java/org/elasticsearch/join/query/ParentIdQueryBuilder.java
  5. 5 0
      modules/percolator/src/main/java/org/elasticsearch/percolator/PercolateQueryBuilder.java
  6. 2 29
      server/src/internalClusterTest/java/org/elasticsearch/search/fieldcaps/FieldCapabilitiesIT.java
  7. 6 0
      server/src/main/java/org/elasticsearch/index/query/BoolQueryBuilder.java
  8. 6 0
      server/src/main/java/org/elasticsearch/index/query/BoostingQueryBuilder.java
  9. 6 0
      server/src/main/java/org/elasticsearch/index/query/CombinedFieldsQueryBuilder.java
  10. 5 0
      server/src/main/java/org/elasticsearch/index/query/CommonTermsQueryBuilder.java
  11. 6 0
      server/src/main/java/org/elasticsearch/index/query/ConstantScoreQueryBuilder.java
  12. 6 0
      server/src/main/java/org/elasticsearch/index/query/DisMaxQueryBuilder.java
  13. 6 0
      server/src/main/java/org/elasticsearch/index/query/DistanceFeatureQueryBuilder.java
  14. 6 0
      server/src/main/java/org/elasticsearch/index/query/ExistsQueryBuilder.java
  15. 6 0
      server/src/main/java/org/elasticsearch/index/query/FieldMaskingSpanQueryBuilder.java
  16. 6 0
      server/src/main/java/org/elasticsearch/index/query/FuzzyQueryBuilder.java
  17. 4 0
      server/src/main/java/org/elasticsearch/index/query/GeoBoundingBoxQueryBuilder.java
  18. 6 0
      server/src/main/java/org/elasticsearch/index/query/GeoDistanceQueryBuilder.java
  19. 6 0
      server/src/main/java/org/elasticsearch/index/query/GeoPolygonQueryBuilder.java
  20. 7 0
      server/src/main/java/org/elasticsearch/index/query/GeoShapeQueryBuilder.java
  21. 5 0
      server/src/main/java/org/elasticsearch/index/query/IdsQueryBuilder.java
  22. 6 0
      server/src/main/java/org/elasticsearch/index/query/IntervalQueryBuilder.java
  23. 6 0
      server/src/main/java/org/elasticsearch/index/query/MatchAllQueryBuilder.java
  24. 6 0
      server/src/main/java/org/elasticsearch/index/query/MatchBoolPrefixQueryBuilder.java
  25. 6 0
      server/src/main/java/org/elasticsearch/index/query/MatchNoneQueryBuilder.java
  26. 5 0
      server/src/main/java/org/elasticsearch/index/query/MatchPhrasePrefixQueryBuilder.java
  27. 6 0
      server/src/main/java/org/elasticsearch/index/query/MatchPhraseQueryBuilder.java
  28. 5 0
      server/src/main/java/org/elasticsearch/index/query/MatchQueryBuilder.java
  29. 5 0
      server/src/main/java/org/elasticsearch/index/query/MoreLikeThisQueryBuilder.java
  30. 5 0
      server/src/main/java/org/elasticsearch/index/query/MultiMatchQueryBuilder.java
  31. 6 0
      server/src/main/java/org/elasticsearch/index/query/NestedQueryBuilder.java
  32. 5 0
      server/src/main/java/org/elasticsearch/index/query/PrefixQueryBuilder.java
  33. 0 6
      server/src/main/java/org/elasticsearch/index/query/QueryBuilder.java
  34. 6 0
      server/src/main/java/org/elasticsearch/index/query/QueryStringQueryBuilder.java
  35. 6 0
      server/src/main/java/org/elasticsearch/index/query/RangeQueryBuilder.java
  36. 5 0
      server/src/main/java/org/elasticsearch/index/query/RegexpQueryBuilder.java
  37. 5 0
      server/src/main/java/org/elasticsearch/index/query/ScriptQueryBuilder.java
  38. 6 0
      server/src/main/java/org/elasticsearch/index/query/SimpleQueryStringBuilder.java
  39. 6 0
      server/src/main/java/org/elasticsearch/index/query/SpanContainingQueryBuilder.java
  40. 6 0
      server/src/main/java/org/elasticsearch/index/query/SpanFirstQueryBuilder.java
  41. 6 0
      server/src/main/java/org/elasticsearch/index/query/SpanMultiTermQueryBuilder.java
  42. 11 0
      server/src/main/java/org/elasticsearch/index/query/SpanNearQueryBuilder.java
  43. 6 0
      server/src/main/java/org/elasticsearch/index/query/SpanNotQueryBuilder.java
  44. 6 0
      server/src/main/java/org/elasticsearch/index/query/SpanOrQueryBuilder.java
  45. 6 0
      server/src/main/java/org/elasticsearch/index/query/SpanTermQueryBuilder.java
  46. 6 0
      server/src/main/java/org/elasticsearch/index/query/SpanWithinQueryBuilder.java
  47. 4 0
      server/src/main/java/org/elasticsearch/index/query/TermQueryBuilder.java
  48. 5 0
      server/src/main/java/org/elasticsearch/index/query/TermsQueryBuilder.java
  49. 5 0
      server/src/main/java/org/elasticsearch/index/query/TermsSetQueryBuilder.java
  50. 6 0
      server/src/main/java/org/elasticsearch/index/query/TypeQueryV7Builder.java
  51. 5 0
      server/src/main/java/org/elasticsearch/index/query/WildcardQueryBuilder.java
  52. 5 0
      server/src/main/java/org/elasticsearch/index/query/WrapperQueryBuilder.java
  53. 6 0
      server/src/main/java/org/elasticsearch/index/query/functionscore/FunctionScoreQueryBuilder.java
  54. 5 0
      server/src/main/java/org/elasticsearch/index/query/functionscore/ScriptScoreQueryBuilder.java
  55. 2 29
      server/src/test/java/org/elasticsearch/index/query/SearchExecutionContextTests.java
  56. 1 28
      server/src/test/java/org/elasticsearch/search/SearchModuleTests.java
  57. 1 30
      server/src/test/java/org/elasticsearch/search/SearchServiceTests.java
  58. 6 0
      test/external-modules/error-query/src/main/java/org/elasticsearch/test/errorquery/ErrorQueryBuilder.java
  59. 6 0
      test/framework/src/main/java/org/elasticsearch/search/DummyQueryBuilder.java
  60. 6 0
      x-pack/plugin/async-search/qa/rest/src/main/java/org/elasticsearch/query/DeprecatedQueryBuilder.java
  61. 6 0
      x-pack/plugin/async-search/src/internalClusterTest/java/org/elasticsearch/xpack/search/BlockingQueryBuilder.java
  62. 6 0
      x-pack/plugin/async-search/src/test/java/org/elasticsearch/xpack/search/ThrowingQueryBuilder.java
  63. 5 0
      x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/index/query/PinnedQueryBuilder.java
  64. 6 0
      x-pack/plugin/core/src/test/java/org/elasticsearch/xpack/core/transform/MockDeprecatedQueryBuilder.java
  65. 5 0
      x-pack/plugin/deprecation/qa/rest/src/main/java/org/elasticsearch/xpack/deprecation/TestDeprecatedQueryBuilder.java
  66. 5 0
      x-pack/plugin/search-business-rules/src/main/java/org/elasticsearch/xpack/searchbusinessrules/PinnedQueryBuilder.java
  67. 6 0
      x-pack/plugin/spatial/src/main/java/org/elasticsearch/xpack/spatial/index/query/ShapeQueryBuilder.java
  68. 6 0
      x-pack/plugin/vectors/src/main/java/org/elasticsearch/xpack/vectors/query/KnnVectorQueryBuilder.java

+ 5 - 0
modules/mapper-extras/src/main/java/org/elasticsearch/index/mapper/extras/RankFeatureQueryBuilder.java

@@ -11,6 +11,7 @@ package org.elasticsearch.index.mapper.extras;
 import org.apache.lucene.document.FeatureField;
 import org.apache.lucene.search.MatchNoDocsQuery;
 import org.apache.lucene.search.Query;
+import org.elasticsearch.Version;
 import org.elasticsearch.common.io.stream.StreamInput;
 import org.elasticsearch.common.io.stream.StreamOutput;
 import org.elasticsearch.index.mapper.MappedFieldType;
@@ -408,4 +409,8 @@ public final class RankFeatureQueryBuilder extends AbstractQueryBuilder<RankFeat
         return Objects.hash(field, scoreFunction);
     }
 
+    @Override
+    public Version getMinimalSupportedVersion() {
+        return Version.V_EMPTY;
+    }
 }

+ 6 - 0
modules/parent-join/src/main/java/org/elasticsearch/join/query/HasChildQueryBuilder.java

@@ -18,6 +18,7 @@ import org.apache.lucene.search.join.JoinUtil;
 import org.apache.lucene.search.join.ScoreMode;
 import org.apache.lucene.search.similarities.Similarity;
 import org.elasticsearch.ElasticsearchException;
+import org.elasticsearch.Version;
 import org.elasticsearch.common.ParsingException;
 import org.elasticsearch.common.io.stream.StreamInput;
 import org.elasticsearch.common.io.stream.StreamOutput;
@@ -527,4 +528,9 @@ public class HasChildQueryBuilder extends AbstractQueryBuilder<HasChildQueryBuil
             innerHits.put(name, innerHitContextBuilder);
         }
     }
+
+    @Override
+    public Version getMinimalSupportedVersion() {
+        return Version.V_EMPTY;
+    }
 }

+ 5 - 0
modules/parent-join/src/main/java/org/elasticsearch/join/query/HasParentQueryBuilder.java

@@ -11,6 +11,7 @@ import org.apache.lucene.search.MatchNoDocsQuery;
 import org.apache.lucene.search.Query;
 import org.apache.lucene.search.join.ScoreMode;
 import org.elasticsearch.ElasticsearchException;
+import org.elasticsearch.Version;
 import org.elasticsearch.common.ParsingException;
 import org.elasticsearch.common.io.stream.StreamInput;
 import org.elasticsearch.common.io.stream.StreamOutput;
@@ -304,4 +305,8 @@ public class HasParentQueryBuilder extends AbstractQueryBuilder<HasParentQueryBu
         }
     }
 
+    @Override
+    public Version getMinimalSupportedVersion() {
+        return Version.V_EMPTY;
+    }
 }

+ 6 - 0
modules/parent-join/src/main/java/org/elasticsearch/join/query/ParentIdQueryBuilder.java

@@ -15,6 +15,7 @@ import org.apache.lucene.search.MatchNoDocsQuery;
 import org.apache.lucene.search.Query;
 import org.apache.lucene.search.TermQuery;
 import org.elasticsearch.ElasticsearchException;
+import org.elasticsearch.Version;
 import org.elasticsearch.common.ParsingException;
 import org.elasticsearch.common.io.stream.StreamInput;
 import org.elasticsearch.common.io.stream.StreamOutput;
@@ -187,4 +188,9 @@ public final class ParentIdQueryBuilder extends AbstractQueryBuilder<ParentIdQue
     public String getWriteableName() {
         return NAME;
     }
+
+    @Override
+    public Version getMinimalSupportedVersion() {
+        return Version.V_EMPTY;
+    }
 }

+ 5 - 0
modules/percolator/src/main/java/org/elasticsearch/percolator/PercolateQueryBuilder.java

@@ -651,4 +651,9 @@ public class PercolateQueryBuilder extends AbstractQueryBuilder<PercolateQueryBu
             }
         };
     }
+
+    @Override
+    public Version getMinimalSupportedVersion() {
+        return Version.V_EMPTY;
+    }
 }

+ 2 - 29
server/src/internalClusterTest/java/org/elasticsearch/search/fieldcaps/FieldCapabilitiesIT.java

@@ -8,8 +8,6 @@
 
 package org.elasticsearch.search.fieldcaps;
 
-import org.apache.lucene.search.MatchAllDocsQuery;
-import org.apache.lucene.search.Query;
 import org.elasticsearch.ElasticsearchException;
 import org.elasticsearch.action.fieldcaps.FieldCapabilities;
 import org.elasticsearch.action.fieldcaps.FieldCapabilitiesAction;
@@ -25,14 +23,12 @@ import org.elasticsearch.cluster.routing.allocation.command.MoveAllocationComman
 import org.elasticsearch.common.breaker.CircuitBreaker;
 import org.elasticsearch.common.breaker.CircuitBreakingException;
 import org.elasticsearch.common.io.stream.StreamInput;
-import org.elasticsearch.common.io.stream.StreamOutput;
 import org.elasticsearch.common.settings.Settings;
 import org.elasticsearch.index.IndexService;
 import org.elasticsearch.index.mapper.DocumentParserContext;
 import org.elasticsearch.index.mapper.KeywordFieldMapper;
 import org.elasticsearch.index.mapper.MetadataFieldMapper;
 import org.elasticsearch.index.mapper.TimeSeriesParams;
-import org.elasticsearch.index.query.AbstractQueryBuilder;
 import org.elasticsearch.index.query.QueryBuilder;
 import org.elasticsearch.index.query.QueryBuilders;
 import org.elasticsearch.index.query.QueryRewriteContext;
@@ -43,6 +39,7 @@ import org.elasticsearch.indices.IndicesService;
 import org.elasticsearch.plugins.MapperPlugin;
 import org.elasticsearch.plugins.Plugin;
 import org.elasticsearch.plugins.SearchPlugin;
+import org.elasticsearch.search.DummyQueryBuilder;
 import org.elasticsearch.test.ESIntegTestCase;
 import org.elasticsearch.test.transport.MockTransportService;
 import org.elasticsearch.transport.TransportService;
@@ -591,7 +588,7 @@ public class FieldCapabilitiesIT extends ESIntegTestCase {
         }
     }
 
-    static class ExceptionOnRewriteQueryBuilder extends AbstractQueryBuilder<ExceptionOnRewriteQueryBuilder> {
+    static class ExceptionOnRewriteQueryBuilder extends DummyQueryBuilder {
 
         public static final String NAME = "exception";
 
@@ -613,30 +610,6 @@ public class FieldCapabilitiesIT extends ESIntegTestCase {
             return this;
         }
 
-        @Override
-        protected void doWriteTo(StreamOutput out) {}
-
-        @Override
-        protected void doXContent(XContentBuilder builder, Params params) throws IOException {
-            builder.startObject(NAME);
-            builder.endObject();
-        }
-
-        @Override
-        protected Query doToQuery(SearchExecutionContext context) {
-            return new MatchAllDocsQuery();
-        }
-
-        @Override
-        protected boolean doEquals(ExceptionOnRewriteQueryBuilder other) {
-            return false;
-        }
-
-        @Override
-        protected int doHashCode() {
-            return 0;
-        }
-
         @Override
         public String getWriteableName() {
             return NAME;

+ 6 - 0
server/src/main/java/org/elasticsearch/index/query/BoolQueryBuilder.java

@@ -13,6 +13,7 @@ import org.apache.lucene.search.BooleanClause.Occur;
 import org.apache.lucene.search.BooleanQuery;
 import org.apache.lucene.search.MatchAllDocsQuery;
 import org.apache.lucene.search.Query;
+import org.elasticsearch.Version;
 import org.elasticsearch.common.ParsingException;
 import org.elasticsearch.common.io.stream.StreamInput;
 import org.elasticsearch.common.io.stream.StreamOutput;
@@ -427,4 +428,9 @@ public class BoolQueryBuilder extends AbstractQueryBuilder<BoolQueryBuilder> {
         }
         return changed;
     }
+
+    @Override
+    public Version getMinimalSupportedVersion() {
+        return Version.V_EMPTY;
+    }
 }

+ 6 - 0
server/src/main/java/org/elasticsearch/index/query/BoostingQueryBuilder.java

@@ -10,6 +10,7 @@ package org.elasticsearch.index.query;
 
 import org.apache.lucene.queries.function.FunctionScoreQuery;
 import org.apache.lucene.search.Query;
+import org.elasticsearch.Version;
 import org.elasticsearch.common.ParsingException;
 import org.elasticsearch.common.io.stream.StreamInput;
 import org.elasticsearch.common.io.stream.StreamOutput;
@@ -226,4 +227,9 @@ public class BoostingQueryBuilder extends AbstractQueryBuilder<BoostingQueryBuil
         InnerHitContextBuilder.extractInnerHits(positiveQuery, innerHits);
         InnerHitContextBuilder.extractInnerHits(negativeQuery, innerHits);
     }
+
+    @Override
+    public Version getMinimalSupportedVersion() {
+        return Version.V_EMPTY;
+    }
 }

+ 6 - 0
server/src/main/java/org/elasticsearch/index/query/CombinedFieldsQueryBuilder.java

@@ -21,6 +21,7 @@ import org.apache.lucene.search.similarities.BM25Similarity;
 import org.apache.lucene.search.similarities.Similarity;
 import org.apache.lucene.util.BytesRef;
 import org.apache.lucene.util.QueryBuilder;
+import org.elasticsearch.Version;
 import org.elasticsearch.common.Strings;
 import org.elasticsearch.common.io.stream.StreamInput;
 import org.elasticsearch.common.io.stream.StreamOutput;
@@ -445,4 +446,9 @@ public class CombinedFieldsQueryBuilder extends AbstractQueryBuilder<CombinedFie
             && Objects.equals(zeroTermsQuery, other.zeroTermsQuery)
             && Objects.equals(autoGenerateSynonymsPhraseQuery, other.autoGenerateSynonymsPhraseQuery);
     }
+
+    @Override
+    public Version getMinimalSupportedVersion() {
+        return Version.V_7_13_0;
+    }
 }

+ 5 - 0
server/src/main/java/org/elasticsearch/index/query/CommonTermsQueryBuilder.java

@@ -9,6 +9,7 @@
 package org.elasticsearch.index.query;
 
 import org.apache.lucene.search.Query;
+import org.elasticsearch.Version;
 import org.elasticsearch.common.ParsingException;
 import org.elasticsearch.common.io.stream.StreamOutput;
 import org.elasticsearch.common.logging.DeprecationLogger;
@@ -60,4 +61,8 @@ public class CommonTermsQueryBuilder extends AbstractQueryBuilder<CommonTermsQue
         throw new ParsingException(parser.getTokenLocation(), COMMON_TERMS_QUERY_DEPRECATION_MSG);
     }
 
+    @Override
+    public Version getMinimalSupportedVersion() {
+        return Version.V_EMPTY;
+    }
 }

+ 6 - 0
server/src/main/java/org/elasticsearch/index/query/ConstantScoreQueryBuilder.java

@@ -10,6 +10,7 @@ package org.elasticsearch.index.query;
 
 import org.apache.lucene.search.ConstantScoreQuery;
 import org.apache.lucene.search.Query;
+import org.elasticsearch.Version;
 import org.elasticsearch.common.ParsingException;
 import org.elasticsearch.common.io.stream.StreamInput;
 import org.elasticsearch.common.io.stream.StreamOutput;
@@ -157,4 +158,9 @@ public class ConstantScoreQueryBuilder extends AbstractQueryBuilder<ConstantScor
     protected void extractInnerHitBuilders(Map<String, InnerHitContextBuilder> innerHits) {
         InnerHitContextBuilder.extractInnerHits(filterBuilder, innerHits);
     }
+
+    @Override
+    public Version getMinimalSupportedVersion() {
+        return Version.V_EMPTY;
+    }
 }

+ 6 - 0
server/src/main/java/org/elasticsearch/index/query/DisMaxQueryBuilder.java

@@ -10,6 +10,7 @@ package org.elasticsearch.index.query;
 
 import org.apache.lucene.search.DisjunctionMaxQuery;
 import org.apache.lucene.search.Query;
+import org.elasticsearch.Version;
 import org.elasticsearch.common.ParsingException;
 import org.elasticsearch.common.io.stream.StreamInput;
 import org.elasticsearch.common.io.stream.StreamOutput;
@@ -220,4 +221,9 @@ public class DisMaxQueryBuilder extends AbstractQueryBuilder<DisMaxQueryBuilder>
             InnerHitContextBuilder.extractInnerHits(query, innerHits);
         }
     }
+
+    @Override
+    public Version getMinimalSupportedVersion() {
+        return Version.V_EMPTY;
+    }
 }

+ 6 - 0
server/src/main/java/org/elasticsearch/index/query/DistanceFeatureQueryBuilder.java

@@ -9,6 +9,7 @@
 package org.elasticsearch.index.query;
 
 import org.apache.lucene.search.Query;
+import org.elasticsearch.Version;
 import org.elasticsearch.common.ParsingException;
 import org.elasticsearch.common.geo.GeoPoint;
 import org.elasticsearch.common.geo.GeoUtils;
@@ -195,4 +196,9 @@ public class DistanceFeatureQueryBuilder extends AbstractQueryBuilder<DistanceFe
             return origin.toString();
         }
     }
+
+    @Override
+    public Version getMinimalSupportedVersion() {
+        return Version.V_7_2_0;
+    }
 }

+ 6 - 0
server/src/main/java/org/elasticsearch/index/query/ExistsQueryBuilder.java

@@ -13,6 +13,7 @@ import org.apache.lucene.search.BooleanQuery;
 import org.apache.lucene.search.ConstantScoreQuery;
 import org.apache.lucene.search.MatchNoDocsQuery;
 import org.apache.lucene.search.Query;
+import org.elasticsearch.Version;
 import org.elasticsearch.common.ParsingException;
 import org.elasticsearch.common.Strings;
 import org.elasticsearch.common.io.stream.StreamInput;
@@ -178,4 +179,9 @@ public class ExistsQueryBuilder extends AbstractQueryBuilder<ExistsQueryBuilder>
     public String getWriteableName() {
         return NAME;
     }
+
+    @Override
+    public Version getMinimalSupportedVersion() {
+        return Version.V_EMPTY;
+    }
 }

+ 6 - 0
server/src/main/java/org/elasticsearch/index/query/FieldMaskingSpanQueryBuilder.java

@@ -11,6 +11,7 @@ package org.elasticsearch.index.query;
 import org.apache.lucene.queries.spans.FieldMaskingSpanQuery;
 import org.apache.lucene.queries.spans.SpanQuery;
 import org.apache.lucene.search.Query;
+import org.elasticsearch.Version;
 import org.elasticsearch.common.ParsingException;
 import org.elasticsearch.common.Strings;
 import org.elasticsearch.common.io.stream.StreamInput;
@@ -173,4 +174,9 @@ public class FieldMaskingSpanQueryBuilder extends AbstractQueryBuilder<FieldMask
     public String getWriteableName() {
         return NAME.getPreferredName();
     }
+
+    @Override
+    public Version getMinimalSupportedVersion() {
+        return Version.V_EMPTY;
+    }
 }

+ 6 - 0
server/src/main/java/org/elasticsearch/index/query/FuzzyQueryBuilder.java

@@ -11,6 +11,7 @@ package org.elasticsearch.index.query;
 import org.apache.lucene.search.FuzzyQuery;
 import org.apache.lucene.search.MultiTermQuery;
 import org.apache.lucene.search.Query;
+import org.elasticsearch.Version;
 import org.elasticsearch.common.ParsingException;
 import org.elasticsearch.common.Strings;
 import org.elasticsearch.common.io.stream.StreamInput;
@@ -354,4 +355,9 @@ public class FuzzyQueryBuilder extends AbstractQueryBuilder<FuzzyQueryBuilder> i
             && Objects.equals(transpositions, other.transpositions)
             && Objects.equals(rewrite, other.rewrite);
     }
+
+    @Override
+    public Version getMinimalSupportedVersion() {
+        return Version.V_EMPTY;
+    }
 }

+ 4 - 0
server/src/main/java/org/elasticsearch/index/query/GeoBoundingBoxQueryBuilder.java

@@ -398,4 +398,8 @@ public class GeoBoundingBoxQueryBuilder extends AbstractQueryBuilder<GeoBounding
         return NAME;
     }
 
+    @Override
+    public Version getMinimalSupportedVersion() {
+        return Version.V_EMPTY;
+    }
 }

+ 6 - 0
server/src/main/java/org/elasticsearch/index/query/GeoDistanceQueryBuilder.java

@@ -10,6 +10,7 @@ package org.elasticsearch.index.query;
 
 import org.apache.lucene.search.MatchNoDocsQuery;
 import org.apache.lucene.search.Query;
+import org.elasticsearch.Version;
 import org.elasticsearch.common.ParsingException;
 import org.elasticsearch.common.Strings;
 import org.elasticsearch.common.geo.GeoDistance;
@@ -398,4 +399,9 @@ public class GeoDistanceQueryBuilder extends AbstractQueryBuilder<GeoDistanceQue
     public String getWriteableName() {
         return NAME;
     }
+
+    @Override
+    public Version getMinimalSupportedVersion() {
+        return Version.V_EMPTY;
+    }
 }

+ 6 - 0
server/src/main/java/org/elasticsearch/index/query/GeoPolygonQueryBuilder.java

@@ -14,6 +14,7 @@ import org.apache.lucene.geo.Polygon;
 import org.apache.lucene.search.IndexOrDocValuesQuery;
 import org.apache.lucene.search.MatchNoDocsQuery;
 import org.apache.lucene.search.Query;
+import org.elasticsearch.Version;
 import org.elasticsearch.common.ParsingException;
 import org.elasticsearch.common.Strings;
 import org.elasticsearch.common.geo.GeoPoint;
@@ -328,4 +329,9 @@ public class GeoPolygonQueryBuilder extends AbstractQueryBuilder<GeoPolygonQuery
     public String getWriteableName() {
         return NAME;
     }
+
+    @Override
+    public Version getMinimalSupportedVersion() {
+        return Version.V_EMPTY;
+    }
 }

+ 7 - 0
server/src/main/java/org/elasticsearch/index/query/GeoShapeQueryBuilder.java

@@ -10,6 +10,7 @@ package org.elasticsearch.index.query;
 
 import org.apache.lucene.search.ConstantScoreQuery;
 import org.apache.lucene.search.Query;
+import org.elasticsearch.Version;
 import org.elasticsearch.common.ParsingException;
 import org.elasticsearch.common.geo.GeometryParser;
 import org.elasticsearch.common.geo.ShapeRelation;
@@ -99,6 +100,7 @@ public class GeoShapeQueryBuilder extends AbstractGeometryQueryBuilder<GeoShapeQ
      * @param relation relation of the shapes
      * @return this
      */
+    @Override
     public GeoShapeQueryBuilder relation(ShapeRelation relation) {
         if (relation == null) {
             throw new IllegalArgumentException("No Shape Relation defined");
@@ -266,4 +268,9 @@ public class GeoShapeQueryBuilder extends AbstractGeometryQueryBuilder<GeoShapeQ
         builder.ignoreUnmapped(pgsqp.ignoreUnmapped);
         return builder;
     }
+
+    @Override
+    public Version getMinimalSupportedVersion() {
+        return Version.V_EMPTY;
+    }
 }

+ 5 - 0
server/src/main/java/org/elasticsearch/index/query/IdsQueryBuilder.java

@@ -153,4 +153,9 @@ public class IdsQueryBuilder extends AbstractQueryBuilder<IdsQueryBuilder> {
     protected boolean doEquals(IdsQueryBuilder other) {
         return Objects.equals(ids, other.ids);
     }
+
+    @Override
+    public Version getMinimalSupportedVersion() {
+        return Version.V_EMPTY;
+    }
 }

+ 6 - 0
server/src/main/java/org/elasticsearch/index/query/IntervalQueryBuilder.java

@@ -11,6 +11,7 @@ package org.elasticsearch.index.query;
 import org.apache.lucene.queries.intervals.IntervalQuery;
 import org.apache.lucene.search.MatchNoDocsQuery;
 import org.apache.lucene.search.Query;
+import org.elasticsearch.Version;
 import org.elasticsearch.common.ParsingException;
 import org.elasticsearch.common.io.stream.StreamInput;
 import org.elasticsearch.common.io.stream.StreamOutput;
@@ -152,4 +153,9 @@ public class IntervalQueryBuilder extends AbstractQueryBuilder<IntervalQueryBuil
     public String getWriteableName() {
         return NAME;
     }
+
+    @Override
+    public Version getMinimalSupportedVersion() {
+        return Version.V_EMPTY;
+    }
 }

+ 6 - 0
server/src/main/java/org/elasticsearch/index/query/MatchAllQueryBuilder.java

@@ -9,6 +9,7 @@
 package org.elasticsearch.index.query;
 
 import org.apache.lucene.search.Query;
+import org.elasticsearch.Version;
 import org.elasticsearch.common.ParsingException;
 import org.elasticsearch.common.io.stream.StreamInput;
 import org.elasticsearch.common.io.stream.StreamOutput;
@@ -79,4 +80,9 @@ public class MatchAllQueryBuilder extends AbstractQueryBuilder<MatchAllQueryBuil
     public String getWriteableName() {
         return NAME;
     }
+
+    @Override
+    public Version getMinimalSupportedVersion() {
+        return Version.V_EMPTY;
+    }
 }

+ 6 - 0
server/src/main/java/org/elasticsearch/index/query/MatchBoolPrefixQueryBuilder.java

@@ -10,6 +10,7 @@ package org.elasticsearch.index.query;
 
 import org.apache.lucene.search.FuzzyQuery;
 import org.apache.lucene.search.Query;
+import org.elasticsearch.Version;
 import org.elasticsearch.common.ParsingException;
 import org.elasticsearch.common.Strings;
 import org.elasticsearch.common.io.stream.StreamInput;
@@ -393,4 +394,9 @@ public class MatchBoolPrefixQueryBuilder extends AbstractQueryBuilder<MatchBoolP
     public String getWriteableName() {
         return NAME;
     }
+
+    @Override
+    public Version getMinimalSupportedVersion() {
+        return Version.V_7_2_0;
+    }
 }

+ 6 - 0
server/src/main/java/org/elasticsearch/index/query/MatchNoneQueryBuilder.java

@@ -9,6 +9,7 @@
 package org.elasticsearch.index.query;
 
 import org.apache.lucene.search.Query;
+import org.elasticsearch.Version;
 import org.elasticsearch.common.ParsingException;
 import org.elasticsearch.common.io.stream.StreamInput;
 import org.elasticsearch.common.io.stream.StreamOutput;
@@ -97,4 +98,9 @@ public class MatchNoneQueryBuilder extends AbstractQueryBuilder<MatchNoneQueryBu
     public String getWriteableName() {
         return NAME;
     }
+
+    @Override
+    public Version getMinimalSupportedVersion() {
+        return Version.V_EMPTY;
+    }
 }

+ 5 - 0
server/src/main/java/org/elasticsearch/index/query/MatchPhrasePrefixQueryBuilder.java

@@ -284,4 +284,9 @@ public class MatchPhrasePrefixQueryBuilder extends AbstractQueryBuilder<MatchPhr
         matchQuery.zeroTermsQuery(zeroTermsQuery);
         return matchQuery;
     }
+
+    @Override
+    public Version getMinimalSupportedVersion() {
+        return Version.V_EMPTY;
+    }
 }

+ 6 - 0
server/src/main/java/org/elasticsearch/index/query/MatchPhraseQueryBuilder.java

@@ -10,6 +10,7 @@ package org.elasticsearch.index.query;
 
 import org.apache.lucene.analysis.core.KeywordAnalyzer;
 import org.apache.lucene.search.Query;
+import org.elasticsearch.Version;
 import org.elasticsearch.common.ParsingException;
 import org.elasticsearch.common.Strings;
 import org.elasticsearch.common.io.stream.StreamInput;
@@ -281,4 +282,9 @@ public class MatchPhraseQueryBuilder extends AbstractQueryBuilder<MatchPhraseQue
         matchQuery.boost(boost);
         return matchQuery;
     }
+
+    @Override
+    public Version getMinimalSupportedVersion() {
+        return Version.V_EMPTY;
+    }
 }

+ 5 - 0
server/src/main/java/org/elasticsearch/index/query/MatchQueryBuilder.java

@@ -561,4 +561,9 @@ public class MatchQueryBuilder extends AbstractQueryBuilder<MatchQueryBuilder> {
         matchQuery.boost(boost);
         return matchQuery;
     }
+
+    @Override
+    public Version getMinimalSupportedVersion() {
+        return Version.V_EMPTY;
+    }
 }

+ 5 - 0
server/src/main/java/org/elasticsearch/index/query/MoreLikeThisQueryBuilder.java

@@ -1191,4 +1191,9 @@ public class MoreLikeThisQueryBuilder extends AbstractQueryBuilder<MoreLikeThisQ
         // TODO this needs heavy cleanups before we can rewrite it
         return this;
     }
+
+    @Override
+    public Version getMinimalSupportedVersion() {
+        return Version.V_EMPTY;
+    }
 }

+ 5 - 0
server/src/main/java/org/elasticsearch/index/query/MultiMatchQueryBuilder.java

@@ -812,4 +812,9 @@ public class MultiMatchQueryBuilder extends AbstractQueryBuilder<MultiMatchQuery
             && Objects.equals(autoGenerateSynonymsPhraseQuery, other.autoGenerateSynonymsPhraseQuery)
             && Objects.equals(fuzzyTranspositions, other.fuzzyTranspositions);
     }
+
+    @Override
+    public Version getMinimalSupportedVersion() {
+        return Version.V_EMPTY;
+    }
 }

+ 6 - 0
server/src/main/java/org/elasticsearch/index/query/NestedQueryBuilder.java

@@ -24,6 +24,7 @@ import org.apache.lucene.search.join.BitSetProducer;
 import org.apache.lucene.search.join.ParentChildrenBlockJoinQuery;
 import org.apache.lucene.search.join.ScoreMode;
 import org.elasticsearch.ElasticsearchException;
+import org.elasticsearch.Version;
 import org.elasticsearch.action.search.MaxScoreCollector;
 import org.elasticsearch.common.ParsingException;
 import org.elasticsearch.common.io.stream.StreamInput;
@@ -435,4 +436,9 @@ public class NestedQueryBuilder extends AbstractQueryBuilder<NestedQueryBuilder>
             }
         }
     }
+
+    @Override
+    public Version getMinimalSupportedVersion() {
+        return Version.V_EMPTY;
+    }
 }

+ 5 - 0
server/src/main/java/org/elasticsearch/index/query/PrefixQueryBuilder.java

@@ -233,4 +233,9 @@ public class PrefixQueryBuilder extends AbstractQueryBuilder<PrefixQueryBuilder>
             && Objects.equals(rewrite, other.rewrite)
             && Objects.equals(caseInsensitive, other.caseInsensitive);
     }
+
+    @Override
+    public Version getMinimalSupportedVersion() {
+        return Version.V_EMPTY;
+    }
 }

+ 0 - 6
server/src/main/java/org/elasticsearch/index/query/QueryBuilder.java

@@ -9,7 +9,6 @@
 package org.elasticsearch.index.query;
 
 import org.apache.lucene.search.Query;
-import org.elasticsearch.Version;
 import org.elasticsearch.common.io.stream.VersionedNamedWriteable;
 import org.elasticsearch.xcontent.ToXContentObject;
 
@@ -67,9 +66,4 @@ public interface QueryBuilder extends VersionedNamedWriteable, ToXContentObject,
     default QueryBuilder rewrite(QueryRewriteContext queryRewriteContext) throws IOException {
         return this;
     }
-
-    @Override
-    default Version getMinimalSupportedVersion() {
-        return Version.V_EMPTY;
-    }
 }

+ 6 - 0
server/src/main/java/org/elasticsearch/index/query/QueryStringQueryBuilder.java

@@ -12,6 +12,7 @@ import org.apache.lucene.search.BoostQuery;
 import org.apache.lucene.search.FuzzyQuery;
 import org.apache.lucene.search.Query;
 import org.apache.lucene.util.automaton.Operations;
+import org.elasticsearch.Version;
 import org.elasticsearch.common.ParsingException;
 import org.elasticsearch.common.io.stream.StreamInput;
 import org.elasticsearch.common.io.stream.StreamOutput;
@@ -948,4 +949,9 @@ public class QueryStringQueryBuilder extends AbstractQueryBuilder<QueryStringQue
 
         return query;
     }
+
+    @Override
+    public Version getMinimalSupportedVersion() {
+        return Version.V_EMPTY;
+    }
 }

+ 6 - 0
server/src/main/java/org/elasticsearch/index/query/RangeQueryBuilder.java

@@ -11,6 +11,7 @@ package org.elasticsearch.index.query;
 import org.apache.lucene.search.MatchNoDocsQuery;
 import org.apache.lucene.search.Query;
 import org.apache.lucene.util.BytesRef;
+import org.elasticsearch.Version;
 import org.elasticsearch.common.ParsingException;
 import org.elasticsearch.common.Strings;
 import org.elasticsearch.common.geo.ShapeRelation;
@@ -548,4 +549,9 @@ public class RangeQueryBuilder extends AbstractQueryBuilder<RangeQueryBuilder> i
             && Objects.equals(includeUpper, other.includeUpper)
             && Objects.equals(format, other.format);
     }
+
+    @Override
+    public Version getMinimalSupportedVersion() {
+        return Version.V_EMPTY;
+    }
 }

+ 5 - 0
server/src/main/java/org/elasticsearch/index/query/RegexpQueryBuilder.java

@@ -313,4 +313,9 @@ public class RegexpQueryBuilder extends AbstractQueryBuilder<RegexpQueryBuilder>
             && Objects.equals(maxDeterminizedStates, other.maxDeterminizedStates)
             && Objects.equals(rewrite, other.rewrite);
     }
+
+    @Override
+    public Version getMinimalSupportedVersion() {
+        return Version.V_EMPTY;
+    }
 }

+ 5 - 0
server/src/main/java/org/elasticsearch/index/query/ScriptQueryBuilder.java

@@ -20,6 +20,7 @@ import org.apache.lucene.search.Scorer;
 import org.apache.lucene.search.TwoPhaseIterator;
 import org.apache.lucene.search.Weight;
 import org.elasticsearch.ElasticsearchException;
+import org.elasticsearch.Version;
 import org.elasticsearch.common.ParsingException;
 import org.elasticsearch.common.io.stream.StreamInput;
 import org.elasticsearch.common.io.stream.StreamOutput;
@@ -222,4 +223,8 @@ public class ScriptQueryBuilder extends AbstractQueryBuilder<ScriptQueryBuilder>
         return Objects.equals(script, other.script);
     }
 
+    @Override
+    public Version getMinimalSupportedVersion() {
+        return Version.V_EMPTY;
+    }
 }

+ 6 - 0
server/src/main/java/org/elasticsearch/index/query/SimpleQueryStringBuilder.java

@@ -11,6 +11,7 @@ package org.elasticsearch.index.query;
 import org.apache.lucene.analysis.Analyzer;
 import org.apache.lucene.search.FuzzyQuery;
 import org.apache.lucene.search.Query;
+import org.elasticsearch.Version;
 import org.elasticsearch.common.ParsingException;
 import org.elasticsearch.common.Strings;
 import org.elasticsearch.common.io.stream.StreamInput;
@@ -582,4 +583,9 @@ public class SimpleQueryStringBuilder extends AbstractQueryBuilder<SimpleQuerySt
             && Objects.equals(settings, other.settings)
             && (flags == other.flags);
     }
+
+    @Override
+    public Version getMinimalSupportedVersion() {
+        return Version.V_EMPTY;
+    }
 }

+ 6 - 0
server/src/main/java/org/elasticsearch/index/query/SpanContainingQueryBuilder.java

@@ -11,6 +11,7 @@ package org.elasticsearch.index.query;
 import org.apache.lucene.queries.spans.SpanContainingQuery;
 import org.apache.lucene.queries.spans.SpanQuery;
 import org.apache.lucene.search.Query;
+import org.elasticsearch.Version;
 import org.elasticsearch.common.ParsingException;
 import org.elasticsearch.common.io.stream.StreamInput;
 import org.elasticsearch.common.io.stream.StreamOutput;
@@ -162,4 +163,9 @@ public class SpanContainingQueryBuilder extends AbstractQueryBuilder<SpanContain
     public String getWriteableName() {
         return NAME;
     }
+
+    @Override
+    public Version getMinimalSupportedVersion() {
+        return Version.V_EMPTY;
+    }
 }

+ 6 - 0
server/src/main/java/org/elasticsearch/index/query/SpanFirstQueryBuilder.java

@@ -11,6 +11,7 @@ package org.elasticsearch.index.query;
 import org.apache.lucene.queries.spans.SpanFirstQuery;
 import org.apache.lucene.queries.spans.SpanQuery;
 import org.apache.lucene.search.Query;
+import org.elasticsearch.Version;
 import org.elasticsearch.common.ParsingException;
 import org.elasticsearch.common.io.stream.StreamInput;
 import org.elasticsearch.common.io.stream.StreamOutput;
@@ -157,4 +158,9 @@ public class SpanFirstQueryBuilder extends AbstractQueryBuilder<SpanFirstQueryBu
     public String getWriteableName() {
         return NAME;
     }
+
+    @Override
+    public Version getMinimalSupportedVersion() {
+        return Version.V_EMPTY;
+    }
 }

+ 6 - 0
server/src/main/java/org/elasticsearch/index/query/SpanMultiTermQueryBuilder.java

@@ -14,6 +14,7 @@ import org.apache.lucene.search.MatchNoDocsQuery;
 import org.apache.lucene.search.MultiTermQuery;
 import org.apache.lucene.search.Query;
 import org.apache.lucene.search.TopTermsRewrite;
+import org.elasticsearch.Version;
 import org.elasticsearch.common.ParsingException;
 import org.elasticsearch.common.io.stream.StreamInput;
 import org.elasticsearch.common.io.stream.StreamOutput;
@@ -184,4 +185,9 @@ public class SpanMultiTermQueryBuilder extends AbstractQueryBuilder<SpanMultiTer
     public String getWriteableName() {
         return NAME;
     }
+
+    @Override
+    public Version getMinimalSupportedVersion() {
+        return Version.V_EMPTY;
+    }
 }

+ 11 - 0
server/src/main/java/org/elasticsearch/index/query/SpanNearQueryBuilder.java

@@ -11,6 +11,7 @@ package org.elasticsearch.index.query;
 import org.apache.lucene.queries.spans.SpanNearQuery;
 import org.apache.lucene.queries.spans.SpanQuery;
 import org.apache.lucene.search.Query;
+import org.elasticsearch.Version;
 import org.elasticsearch.common.ParsingException;
 import org.elasticsearch.common.Strings;
 import org.elasticsearch.common.io.stream.StreamInput;
@@ -272,6 +273,11 @@ public class SpanNearQueryBuilder extends AbstractQueryBuilder<SpanNearQueryBuil
         return NAME;
     }
 
+    @Override
+    public Version getMinimalSupportedVersion() {
+        return Version.V_EMPTY;
+    }
+
     /**
      * SpanGapQueryBuilder enables gaps in a SpanNearQuery.
      * Since, SpanGapQuery is private to SpanNearQuery, SpanGapQueryBuilder cannot
@@ -363,6 +369,11 @@ public class SpanNearQueryBuilder extends AbstractQueryBuilder<SpanNearQueryBuil
             return NAME;
         }
 
+        @Override
+        public Version getMinimalSupportedVersion() {
+            return Version.V_EMPTY;
+        }
+
         @Override
         public final void writeTo(StreamOutput out) throws IOException {
             out.writeString(fieldName);

+ 6 - 0
server/src/main/java/org/elasticsearch/index/query/SpanNotQueryBuilder.java

@@ -11,6 +11,7 @@ package org.elasticsearch.index.query;
 import org.apache.lucene.queries.spans.SpanNotQuery;
 import org.apache.lucene.queries.spans.SpanQuery;
 import org.apache.lucene.search.Query;
+import org.elasticsearch.Version;
 import org.elasticsearch.common.ParsingException;
 import org.elasticsearch.common.io.stream.StreamInput;
 import org.elasticsearch.common.io.stream.StreamOutput;
@@ -255,4 +256,9 @@ public class SpanNotQueryBuilder extends AbstractQueryBuilder<SpanNotQueryBuilde
     public String getWriteableName() {
         return NAME;
     }
+
+    @Override
+    public Version getMinimalSupportedVersion() {
+        return Version.V_EMPTY;
+    }
 }

+ 6 - 0
server/src/main/java/org/elasticsearch/index/query/SpanOrQueryBuilder.java

@@ -11,6 +11,7 @@ package org.elasticsearch.index.query;
 import org.apache.lucene.queries.spans.SpanOrQuery;
 import org.apache.lucene.queries.spans.SpanQuery;
 import org.apache.lucene.search.Query;
+import org.elasticsearch.Version;
 import org.elasticsearch.common.ParsingException;
 import org.elasticsearch.common.io.stream.StreamInput;
 import org.elasticsearch.common.io.stream.StreamOutput;
@@ -162,4 +163,9 @@ public class SpanOrQueryBuilder extends AbstractQueryBuilder<SpanOrQueryBuilder>
     public String getWriteableName() {
         return NAME;
     }
+
+    @Override
+    public Version getMinimalSupportedVersion() {
+        return Version.V_EMPTY;
+    }
 }

+ 6 - 0
server/src/main/java/org/elasticsearch/index/query/SpanTermQueryBuilder.java

@@ -12,6 +12,7 @@ import org.apache.lucene.index.Term;
 import org.apache.lucene.queries.spans.SpanQuery;
 import org.apache.lucene.queries.spans.SpanTermQuery;
 import org.apache.lucene.search.Query;
+import org.elasticsearch.Version;
 import org.elasticsearch.common.ParsingException;
 import org.elasticsearch.common.io.stream.StreamInput;
 import org.elasticsearch.common.lucene.BytesRefs;
@@ -129,4 +130,9 @@ public class SpanTermQueryBuilder extends BaseTermQueryBuilder<SpanTermQueryBuil
     public String getWriteableName() {
         return NAME;
     }
+
+    @Override
+    public Version getMinimalSupportedVersion() {
+        return Version.V_EMPTY;
+    }
 }

+ 6 - 0
server/src/main/java/org/elasticsearch/index/query/SpanWithinQueryBuilder.java

@@ -11,6 +11,7 @@ package org.elasticsearch.index.query;
 import org.apache.lucene.queries.spans.SpanQuery;
 import org.apache.lucene.queries.spans.SpanWithinQuery;
 import org.apache.lucene.search.Query;
+import org.elasticsearch.Version;
 import org.elasticsearch.common.ParsingException;
 import org.elasticsearch.common.io.stream.StreamInput;
 import org.elasticsearch.common.io.stream.StreamOutput;
@@ -171,4 +172,9 @@ public class SpanWithinQueryBuilder extends AbstractQueryBuilder<SpanWithinQuery
     public String getWriteableName() {
         return NAME;
     }
+
+    @Override
+    public Version getMinimalSupportedVersion() {
+        return Version.V_EMPTY;
+    }
 }

+ 4 - 0
server/src/main/java/org/elasticsearch/index/query/TermQueryBuilder.java

@@ -224,4 +224,8 @@ public class TermQueryBuilder extends BaseTermQueryBuilder<TermQueryBuilder> {
         return super.doEquals(other) && Objects.equals(caseInsensitive, other.caseInsensitive);
     }
 
+    @Override
+    public Version getMinimalSupportedVersion() {
+        return Version.V_EMPTY;
+    }
 }

+ 5 - 0
server/src/main/java/org/elasticsearch/index/query/TermsQueryBuilder.java

@@ -667,4 +667,9 @@ public class TermsQueryBuilder extends AbstractQueryBuilder<TermsQueryBuilder> {
             return Objects.hash(values);
         }
     }
+
+    @Override
+    public Version getMinimalSupportedVersion() {
+        return Version.V_EMPTY;
+    }
 }

+ 5 - 0
server/src/main/java/org/elasticsearch/index/query/TermsSetQueryBuilder.java

@@ -18,6 +18,7 @@ import org.apache.lucene.search.LongValues;
 import org.apache.lucene.search.LongValuesSource;
 import org.apache.lucene.search.Query;
 import org.apache.lucene.search.TermQuery;
+import org.elasticsearch.Version;
 import org.elasticsearch.common.ParsingException;
 import org.elasticsearch.common.io.stream.StreamInput;
 import org.elasticsearch.common.io.stream.StreamOutput;
@@ -437,4 +438,8 @@ public final class TermsSetQueryBuilder extends AbstractQueryBuilder<TermsSetQue
         }
     }
 
+    @Override
+    public Version getMinimalSupportedVersion() {
+        return Version.V_EMPTY;
+    }
 }

+ 6 - 0
server/src/main/java/org/elasticsearch/index/query/TypeQueryV7Builder.java

@@ -10,6 +10,7 @@ package org.elasticsearch.index.query;
 
 import org.apache.lucene.search.MatchNoDocsQuery;
 import org.apache.lucene.search.Query;
+import org.elasticsearch.Version;
 import org.elasticsearch.common.ParsingException;
 import org.elasticsearch.common.io.stream.StreamInput;
 import org.elasticsearch.common.io.stream.StreamOutput;
@@ -95,4 +96,9 @@ public class TypeQueryV7Builder extends AbstractQueryBuilder<TypeQueryV7Builder>
     public void setValue(String value) {
         this.value = value;
     }
+
+    @Override
+    public Version getMinimalSupportedVersion() {
+        return Version.V_EMPTY;
+    }
 }

+ 5 - 0
server/src/main/java/org/elasticsearch/index/query/WildcardQueryBuilder.java

@@ -246,4 +246,9 @@ public class WildcardQueryBuilder extends AbstractQueryBuilder<WildcardQueryBuil
             && Objects.equals(rewrite, other.rewrite)
             && Objects.equals(caseInsensitive, other.caseInsensitive);
     }
+
+    @Override
+    public Version getMinimalSupportedVersion() {
+        return Version.V_EMPTY;
+    }
 }

+ 5 - 0
server/src/main/java/org/elasticsearch/index/query/WrapperQueryBuilder.java

@@ -10,6 +10,7 @@ package org.elasticsearch.index.query;
 
 import org.apache.lucene.search.Query;
 import org.apache.lucene.util.BytesRef;
+import org.elasticsearch.Version;
 import org.elasticsearch.common.ParsingException;
 import org.elasticsearch.common.Strings;
 import org.elasticsearch.common.bytes.BytesReference;
@@ -159,4 +160,8 @@ public class WrapperQueryBuilder extends AbstractQueryBuilder<WrapperQueryBuilde
         }
     }
 
+    @Override
+    public Version getMinimalSupportedVersion() {
+        return Version.V_EMPTY;
+    }
 }

+ 6 - 0
server/src/main/java/org/elasticsearch/index/query/functionscore/FunctionScoreQueryBuilder.java

@@ -10,6 +10,7 @@ package org.elasticsearch.index.query.functionscore;
 
 import org.apache.lucene.search.MatchAllDocsQuery;
 import org.apache.lucene.search.Query;
+import org.elasticsearch.Version;
 import org.elasticsearch.common.ParsingException;
 import org.elasticsearch.common.io.stream.StreamInput;
 import org.elasticsearch.common.io.stream.StreamOutput;
@@ -643,4 +644,9 @@ public class FunctionScoreQueryBuilder extends AbstractQueryBuilder<FunctionScor
         }
         return currentFieldName;
     }
+
+    @Override
+    public Version getMinimalSupportedVersion() {
+        return Version.V_EMPTY;
+    }
 }

+ 5 - 0
server/src/main/java/org/elasticsearch/index/query/functionscore/ScriptScoreQueryBuilder.java

@@ -10,6 +10,7 @@ package org.elasticsearch.index.query.functionscore;
 
 import org.apache.lucene.search.Query;
 import org.elasticsearch.ElasticsearchException;
+import org.elasticsearch.Version;
 import org.elasticsearch.common.io.stream.StreamInput;
 import org.elasticsearch.common.io.stream.StreamOutput;
 import org.elasticsearch.common.lucene.search.function.ScriptScoreQuery;
@@ -199,4 +200,8 @@ public class ScriptScoreQueryBuilder extends AbstractQueryBuilder<ScriptScoreQue
         InnerHitContextBuilder.extractInnerHits(query(), innerHits);
     }
 
+    @Override
+    public Version getMinimalSupportedVersion() {
+        return Version.V_EMPTY;
+    }
 }

+ 2 - 29
server/src/test/java/org/elasticsearch/index/query/SearchExecutionContextTests.java

@@ -26,7 +26,6 @@ import org.apache.lucene.store.Directory;
 import org.elasticsearch.Version;
 import org.elasticsearch.cluster.metadata.IndexMetadata;
 import org.elasticsearch.common.io.stream.NamedWriteableRegistry;
-import org.elasticsearch.common.io.stream.StreamOutput;
 import org.elasticsearch.common.settings.Settings;
 import org.elasticsearch.common.util.BigArrays;
 import org.elasticsearch.index.IndexSettings;
@@ -64,6 +63,7 @@ import org.elasticsearch.script.ScriptCompiler;
 import org.elasticsearch.script.field.DelegateDocValuesField;
 import org.elasticsearch.script.field.DocValuesField;
 import org.elasticsearch.search.DocValueFormat;
+import org.elasticsearch.search.DummyQueryBuilder;
 import org.elasticsearch.search.MultiValueMode;
 import org.elasticsearch.search.aggregations.support.ValuesSourceType;
 import org.elasticsearch.search.lookup.LeafDocLookup;
@@ -72,7 +72,6 @@ import org.elasticsearch.search.lookup.SearchLookup;
 import org.elasticsearch.search.sort.BucketedSort;
 import org.elasticsearch.search.sort.SortOrder;
 import org.elasticsearch.test.ESTestCase;
-import org.elasticsearch.xcontent.XContentBuilder;
 import org.elasticsearch.xcontent.XContentParserConfiguration;
 
 import java.io.IOException;
@@ -131,39 +130,13 @@ public class SearchExecutionContextTests extends ESTestCase {
         assertThat(context.buildAnonymousFieldType("long"), instanceOf(NumberFieldMapper.NumberFieldType.class));
     }
 
-    @SuppressWarnings("rawtypes")
     public void testToQueryFails() {
         SearchExecutionContext context = createSearchExecutionContext(IndexMetadata.INDEX_UUID_NA_VALUE, null);
-        Exception exc = expectThrows(Exception.class, () -> context.toQuery(new AbstractQueryBuilder() {
-            @Override
-            public String getWriteableName() {
-                return null;
-            }
-
-            @Override
-            protected void doWriteTo(StreamOutput out) throws IOException {
-
-            }
-
-            @Override
-            protected void doXContent(XContentBuilder builder, Params params) throws IOException {
-
-            }
-
+        Exception exc = expectThrows(Exception.class, () -> context.toQuery(new DummyQueryBuilder() {
             @Override
             protected Query doToQuery(SearchExecutionContext context) throws IOException {
                 throw new RuntimeException("boom");
             }
-
-            @Override
-            protected boolean doEquals(AbstractQueryBuilder other) {
-                return false;
-            }
-
-            @Override
-            protected int doHashCode() {
-                return 0;
-            }
         }));
         assertThat(exc.getMessage(), equalTo("failed to create query: boom"));
     }

+ 1 - 28
server/src/test/java/org/elasticsearch/search/SearchModuleTests.java

@@ -8,7 +8,6 @@
 package org.elasticsearch.search;
 
 import org.apache.lucene.search.IndexSearcher;
-import org.apache.lucene.search.Query;
 import org.apache.lucene.util.CharsRefBuilder;
 import org.elasticsearch.Version;
 import org.elasticsearch.common.CheckedBiConsumer;
@@ -17,7 +16,6 @@ import org.elasticsearch.common.io.stream.StreamOutput;
 import org.elasticsearch.common.settings.Settings;
 import org.elasticsearch.common.xcontent.LoggingDeprecationHandler;
 import org.elasticsearch.core.RestApiVersion;
-import org.elasticsearch.index.query.AbstractQueryBuilder;
 import org.elasticsearch.index.query.CommonTermsQueryBuilder;
 import org.elasticsearch.index.query.QueryBuilder;
 import org.elasticsearch.index.query.QueryRewriteContext;
@@ -718,41 +716,16 @@ public class SearchModuleTests extends ESTestCase {
         }
     }
 
-    static class CompatQueryBuilder extends AbstractQueryBuilder<CompatQueryBuilder> {
+    static class CompatQueryBuilder extends DummyQueryBuilder {
         public static final String NAME = "compat_name";
         public static final ParseField NAME_OLD = new ParseField(NAME).forRestApiVersion(
             RestApiVersion.equalTo(RestApiVersion.minimumSupported())
         );
 
-        public static CompatQueryBuilder fromXContent(XContentParser parser) throws IOException {
-            return null;
-        }
-
         @Override
         public String getWriteableName() {
             return NAME;
         }
-
-        @Override
-        protected void doWriteTo(StreamOutput out) throws IOException {}
-
-        @Override
-        protected void doXContent(XContentBuilder builder, Params params) throws IOException {}
-
-        @Override
-        protected Query doToQuery(SearchExecutionContext context) throws IOException {
-            return null;
-        }
-
-        @Override
-        protected boolean doEquals(CompatQueryBuilder other) {
-            return false;
-        }
-
-        @Override
-        protected int doHashCode() {
-            return 0;
-        }
     }
 
     public void testRegisterRestApiCompatibleQuery() {

+ 1 - 30
server/src/test/java/org/elasticsearch/search/SearchServiceTests.java

@@ -14,7 +14,6 @@ import org.apache.lucene.index.FilterDirectoryReader;
 import org.apache.lucene.index.LeafReader;
 import org.apache.lucene.search.ConstantScoreQuery;
 import org.apache.lucene.search.MatchAllDocsQuery;
-import org.apache.lucene.search.Query;
 import org.apache.lucene.store.AlreadyClosedException;
 import org.elasticsearch.ElasticsearchException;
 import org.elasticsearch.ElasticsearchTimeoutException;
@@ -43,7 +42,6 @@ import org.elasticsearch.cluster.routing.TestShardRouting;
 import org.elasticsearch.common.Strings;
 import org.elasticsearch.common.UUIDs;
 import org.elasticsearch.common.io.stream.StreamInput;
-import org.elasticsearch.common.io.stream.StreamOutput;
 import org.elasticsearch.common.lucene.search.Queries;
 import org.elasticsearch.common.settings.Settings;
 import org.elasticsearch.core.AbstractRefCounted;
@@ -54,7 +52,6 @@ import org.elasticsearch.index.IndexNotFoundException;
 import org.elasticsearch.index.IndexService;
 import org.elasticsearch.index.IndexSettings;
 import org.elasticsearch.index.engine.Engine;
-import org.elasticsearch.index.query.AbstractQueryBuilder;
 import org.elasticsearch.index.query.MatchAllQueryBuilder;
 import org.elasticsearch.index.query.MatchNoneQueryBuilder;
 import org.elasticsearch.index.query.QueryBuilder;
@@ -807,7 +804,7 @@ public class SearchServiceTests extends ESSingleNodeTestCase {
         }
     }
 
-    public static class FailOnRewriteQueryBuilder extends AbstractQueryBuilder<FailOnRewriteQueryBuilder> {
+    public static class FailOnRewriteQueryBuilder extends DummyQueryBuilder {
 
         public FailOnRewriteQueryBuilder(StreamInput in) throws IOException {
             super(in);
@@ -822,32 +819,6 @@ public class SearchServiceTests extends ESSingleNodeTestCase {
             }
             return this;
         }
-
-        @Override
-        protected void doWriteTo(StreamOutput out) {}
-
-        @Override
-        protected void doXContent(XContentBuilder builder, Params params) {}
-
-        @Override
-        protected Query doToQuery(SearchExecutionContext context) {
-            return null;
-        }
-
-        @Override
-        protected boolean doEquals(FailOnRewriteQueryBuilder other) {
-            return false;
-        }
-
-        @Override
-        protected int doHashCode() {
-            return 0;
-        }
-
-        @Override
-        public String getWriteableName() {
-            return null;
-        }
     }
 
     private static class ShardScrollRequestTest extends ShardSearchRequest {

+ 6 - 0
test/external-modules/error-query/src/main/java/org/elasticsearch/test/errorquery/ErrorQueryBuilder.java

@@ -10,6 +10,7 @@ package org.elasticsearch.test.errorquery;
 
 import org.apache.lucene.search.MatchAllDocsQuery;
 import org.apache.lucene.search.Query;
+import org.elasticsearch.Version;
 import org.elasticsearch.common.io.stream.StreamInput;
 import org.elasticsearch.common.io.stream.StreamOutput;
 import org.elasticsearch.common.logging.HeaderWarning;
@@ -127,4 +128,9 @@ public class ErrorQueryBuilder extends AbstractQueryBuilder<ErrorQueryBuilder> {
     protected int doHashCode() {
         return Objects.hash(indices);
     }
+
+    @Override
+    public Version getMinimalSupportedVersion() {
+        return Version.V_EMPTY;
+    }
 }

+ 6 - 0
test/framework/src/main/java/org/elasticsearch/search/DummyQueryBuilder.java

@@ -9,6 +9,7 @@
 package org.elasticsearch.search;
 
 import org.apache.lucene.search.Query;
+import org.elasticsearch.Version;
 import org.elasticsearch.common.io.stream.StreamInput;
 import org.elasticsearch.common.io.stream.StreamOutput;
 import org.elasticsearch.index.query.AbstractQueryBuilder;
@@ -63,4 +64,9 @@ public class DummyQueryBuilder extends AbstractQueryBuilder<DummyQueryBuilder> {
     public String getWriteableName() {
         return NAME;
     }
+
+    @Override
+    public Version getMinimalSupportedVersion() {
+        return Version.V_EMPTY;
+    }
 }

+ 6 - 0
x-pack/plugin/async-search/qa/rest/src/main/java/org/elasticsearch/query/DeprecatedQueryBuilder.java

@@ -9,6 +9,7 @@ package org.elasticsearch.query;
 
 import org.apache.lucene.search.MatchAllDocsQuery;
 import org.apache.lucene.search.Query;
+import org.elasticsearch.Version;
 import org.elasticsearch.common.ParsingException;
 import org.elasticsearch.common.io.stream.StreamInput;
 import org.elasticsearch.common.io.stream.StreamOutput;
@@ -73,4 +74,9 @@ public class DeprecatedQueryBuilder extends AbstractQueryBuilder<DeprecatedQuery
     public String getWriteableName() {
         return NAME;
     }
+
+    @Override
+    public Version getMinimalSupportedVersion() {
+        return Version.V_EMPTY;
+    }
 }

+ 6 - 0
x-pack/plugin/async-search/src/internalClusterTest/java/org/elasticsearch/xpack/search/BlockingQueryBuilder.java

@@ -11,6 +11,7 @@ import org.apache.lucene.search.Query;
 import org.apache.lucene.search.QueryVisitor;
 import org.apache.lucene.search.ScoreMode;
 import org.apache.lucene.search.Weight;
+import org.elasticsearch.Version;
 import org.elasticsearch.common.io.stream.StreamInput;
 import org.elasticsearch.common.io.stream.StreamOutput;
 import org.elasticsearch.common.lucene.search.Queries;
@@ -127,6 +128,11 @@ class BlockingQueryBuilder extends AbstractQueryBuilder<BlockingQueryBuilder> {
         return NAME;
     }
 
+    @Override
+    public Version getMinimalSupportedVersion() {
+        return Version.V_EMPTY;
+    }
+
     /**
      *  A synchronization aid that is used by {@link BlockingQueryBuilder} to block shards executions until
      *  the consumer calls {@link QueryLatch#countDownAndReset()}.

+ 6 - 0
x-pack/plugin/async-search/src/test/java/org/elasticsearch/xpack/search/ThrowingQueryBuilder.java

@@ -11,6 +11,7 @@ import org.apache.lucene.search.Query;
 import org.apache.lucene.search.QueryVisitor;
 import org.apache.lucene.search.ScoreMode;
 import org.apache.lucene.search.Weight;
+import org.elasticsearch.Version;
 import org.elasticsearch.common.io.stream.StreamInput;
 import org.elasticsearch.common.io.stream.StreamOutput;
 import org.elasticsearch.common.lucene.search.Queries;
@@ -105,4 +106,9 @@ class ThrowingQueryBuilder extends AbstractQueryBuilder<ThrowingQueryBuilder> {
     public String getWriteableName() {
         return NAME;
     }
+
+    @Override
+    public Version getMinimalSupportedVersion() {
+        return Version.V_EMPTY;
+    }
 }

+ 5 - 0
x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/index/query/PinnedQueryBuilder.java

@@ -7,6 +7,7 @@
 package org.elasticsearch.xpack.core.index.query;
 
 import org.apache.lucene.search.Query;
+import org.elasticsearch.Version;
 import org.elasticsearch.common.io.stream.StreamOutput;
 import org.elasticsearch.common.io.stream.Writeable;
 import org.elasticsearch.common.regex.Regex;
@@ -189,4 +190,8 @@ public class PinnedQueryBuilder extends AbstractQueryBuilder<PinnedQueryBuilder>
             && boost == other.boost;
     }
 
+    @Override
+    public Version getMinimalSupportedVersion() {
+        return Version.V_7_4_0;
+    }
 }

+ 6 - 0
x-pack/plugin/core/src/test/java/org/elasticsearch/xpack/core/transform/MockDeprecatedQueryBuilder.java

@@ -8,6 +8,7 @@
 package org.elasticsearch.xpack.core.transform;
 
 import org.apache.lucene.search.Query;
+import org.elasticsearch.Version;
 import org.elasticsearch.common.ParsingException;
 import org.elasticsearch.common.io.stream.StreamInput;
 import org.elasticsearch.common.io.stream.StreamOutput;
@@ -83,4 +84,9 @@ public class MockDeprecatedQueryBuilder extends AbstractQueryBuilder<MockDepreca
     protected int doHashCode() {
         return 0;
     }
+
+    @Override
+    public Version getMinimalSupportedVersion() {
+        return Version.V_EMPTY;
+    }
 }

+ 5 - 0
x-pack/plugin/deprecation/qa/rest/src/main/java/org/elasticsearch/xpack/deprecation/TestDeprecatedQueryBuilder.java

@@ -8,6 +8,7 @@
 package org.elasticsearch.xpack.deprecation;
 
 import org.apache.lucene.search.Query;
+import org.elasticsearch.Version;
 import org.elasticsearch.common.ParsingException;
 import org.elasticsearch.common.io.stream.StreamInput;
 import org.elasticsearch.common.io.stream.StreamOutput;
@@ -88,4 +89,8 @@ public class TestDeprecatedQueryBuilder extends AbstractQueryBuilder<TestDepreca
         return true;
     }
 
+    @Override
+    public Version getMinimalSupportedVersion() {
+        return Version.V_EMPTY;
+    }
 }

+ 5 - 0
x-pack/plugin/search-business-rules/src/main/java/org/elasticsearch/xpack/searchbusinessrules/PinnedQueryBuilder.java

@@ -396,4 +396,9 @@ public class PinnedQueryBuilder extends AbstractQueryBuilder<PinnedQueryBuilder>
             && Objects.equals(organicQuery, other.organicQuery)
             && boost == other.boost;
     }
+
+    @Override
+    public Version getMinimalSupportedVersion() {
+        return Version.V_7_4_0;
+    }
 }

+ 6 - 0
x-pack/plugin/spatial/src/main/java/org/elasticsearch/xpack/spatial/index/query/ShapeQueryBuilder.java

@@ -8,6 +8,7 @@ package org.elasticsearch.xpack.spatial.index.query;
 
 import org.apache.lucene.search.ConstantScoreQuery;
 import org.apache.lucene.search.Query;
+import org.elasticsearch.Version;
 import org.elasticsearch.common.geo.GeometryParser;
 import org.elasticsearch.common.io.stream.StreamInput;
 import org.elasticsearch.common.io.stream.StreamOutput;
@@ -171,4 +172,9 @@ public class ShapeQueryBuilder extends AbstractGeometryQueryBuilder<ShapeQueryBu
         builder.ignoreUnmapped(pgsqb.ignoreUnmapped);
         return builder;
     }
+
+    @Override
+    public Version getMinimalSupportedVersion() {
+        return Version.V_7_4_0;
+    }
 }

+ 6 - 0
x-pack/plugin/vectors/src/main/java/org/elasticsearch/xpack/vectors/query/KnnVectorQueryBuilder.java

@@ -8,6 +8,7 @@
 package org.elasticsearch.xpack.vectors.query;
 
 import org.apache.lucene.search.Query;
+import org.elasticsearch.Version;
 import org.elasticsearch.common.io.stream.StreamInput;
 import org.elasticsearch.common.io.stream.StreamOutput;
 import org.elasticsearch.index.mapper.MappedFieldType;
@@ -97,4 +98,9 @@ public class KnnVectorQueryBuilder extends AbstractQueryBuilder<KnnVectorQueryBu
     protected boolean doEquals(KnnVectorQueryBuilder other) {
         return Objects.equals(fieldName, other.fieldName) && Arrays.equals(queryVector, other.queryVector) && numCands == other.numCands;
     }
+
+    @Override
+    public Version getMinimalSupportedVersion() {
+        return Version.V_8_0_0;
+    }
 }