| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 |
- [[breaking-changes query-refactoring]]
- == Breaking changes on the query-refactoring branch
- This section discusses changes that are breaking to the current rest or java-api
- on the query-refactoring feature branch.
- === Plugins
- Plugins implementing custom queries need to implement the `fromXContent(QueryParseContext)` method in their
- `QueryParser` subclass rather than `parse`. This method will take care of parsing the query from `XContent` format
- into an intermediate query representation that can be streamed between the nodes in binary format, effectively the
- query object used in the java api. Also, the query parser needs to implement the `getBuilderPrototype` method that
- returns a prototype of the `NamedWriteable` query, which allows to deserialize an incoming query by calling
- `readFrom(StreamInput)` against it, which will create a new object, see usages of `Writeable`. The `QueryParser`
- also needs to declare the generic type of the query that it supports and it's able to parse.
- The query object can then transform itself into a lucene query through the new `toQuery(QueryShardContext)` method,
- which returns a lucene query to be executed on the data node.
- Similarly, plugins implementing custom score functions need to implement the `fromXContent(QueryParseContext)`
- method in their `ScoreFunctionParser` subclass rather than `parse`. This method will take care of parsing
- the function from `XContent` format into an intermediate function representation that can be streamed between
- the nodes in binary format, effectively the function object used in the java api. Also, the query parser needs
- to implement the `getBuilderPrototype` method that returns a prototype of the `NamedWriteable` function, which
- allows to deserialize an incoming function by calling `readFrom(StreamInput)` against it, which will create a
- new object, see usages of `Writeable`. The `ScoreFunctionParser` also needs to declare the generic type of the
- function that it supports and it's able to parse. The function object can then transform itself into a lucene
- function through the new `toFunction(QueryShardContext)` method, which returns a lucene function to be executed
- on the data node.
- === Java-API
- ==== BoostingQueryBuilder
- Removed setters for mandatory positive/negative query. Both arguments now have
- to be supplied at construction time already and have to be non-null.
- ==== SpanContainingQueryBuilder
- Removed setters for mandatory big/little inner span queries. Both arguments now have
- to be supplied at construction time already and have to be non-null. Updated
- static factory methods in QueryBuilders accordingly.
- ==== SpanOrQueryBuilder
- Making sure that query contains at least one clause by making initial clause mandatory
- in constructor.
- ==== SpanNearQueryBuilder
- Removed setter for mandatory slop parameter, needs to be set in constructor now. Also
- making sure that query contains at least one clause by making initial clause mandatory
- in constructor. Updated the static factory methods in QueryBuilders accordingly.
- ==== SpanNotQueryBuilder
- Removed setter for mandatory include/exclude span query clause, needs to be set in constructor now.
- Updated the static factory methods in QueryBuilders and tests accordingly.
- ==== SpanWithinQueryBuilder
- Removed setters for mandatory big/little inner span queries. Both arguments now have
- to be supplied at construction time already and have to be non-null. Updated
- static factory methods in QueryBuilders accordingly.
- ==== QueryFilterBuilder
- Removed the setter `queryName(String queryName)` since this field is not supported
- in this type of query. Use `FQueryFilterBuilder.queryName(String queryName)` instead
- when in need to wrap a named query as a filter.
- ==== WrapperQueryBuilder
- Removed `wrapperQueryBuilder(byte[] source, int offset, int length)`. Instead simply
- use `wrapperQueryBuilder(byte[] source)`. Updated the static factory methods in
- QueryBuilders accordingly.
- ==== QueryStringQueryBuilder
- Removed ability to pass in boost value using `field(String field)` method in form e.g. `field^2`.
- Use the `field(String, float)` method instead.
- ==== Operator
- Removed the enums called `Operator` from `MatchQueryBuilder`, `QueryStringQueryBuilder`,
- `SimpleQueryStringBuilder`, and `CommonTermsQueryBuilder` in favour of using the enum
- defined in `org.elasticsearch.index.query.Operator` in an effort to consolidate the
- codebase and avoid duplication.
- ==== queryName and boost support
- Support for `queryName` and `boost` has been streamlined to all of the queries. That is
- a breaking change till queries get sent over the network as serialized json rather
- than in `Streamable` format. In fact whenever additional fields are added to the json
- representation of the query, older nodes might throw error when they find unknown fields.
- ==== InnerHitsBuilder
- InnerHitsBuilder now has a dedicated addParentChildInnerHits and addNestedInnerHits methods
- to differentiate between inner hits for nested vs. parent / child documents. This change
- makes the type / path parameter mandatory.
- ==== MatchQueryBuilder
- Moving MatchQueryBuilder.Type and MatchQueryBuilder.ZeroTermsQuery enum to MatchQuery.Type.
- Also reusing new Operator enum.
- ==== MoreLikeThisQueryBuilder
- Removed `MoreLikeThisQueryBuilder.Item#id(String id)`, `Item#doc(BytesReference doc)`,
- `Item#doc(XContentBuilder doc)`. Use provided constructors instead.
- Removed `MoreLikeThisQueryBuilder#addLike` in favor of texts and/or items beeing provided
- at construction time. Using arrays there instead of lists now.
- Removed `MoreLikeThisQueryBuilder#addUnlike` in favor to using the `unlike` methods
- which take arrays as arguments now rather than the lists used before.
- The deprecated `docs(Item... docs)`, `ignoreLike(Item... docs)`,
- `ignoreLike(String... likeText)`, `addItem(Item... likeItems)` have been removed.
- ==== GeoDistanceQueryBuilder
- Removing individual setters for lon() and lat() values, both values should be set together
- using point(lon, lat).
- ==== GeoDistanceRangeQueryBuilder
- Removing setters for to(Object ...) and from(Object ...) in favour of the only two allowed input
- arguments (String, Number). Removing setter for center point (point(), geohash()) because parameter
- is mandatory and should already be set in constructor.
- Also removing setters for lt(), lte(), gt(), gte() since they can all be replaced by equivallent
- calls to to/from() and inludeLower()/includeUpper().
- ==== GeoPolygonQueryBuilder
- Require shell of polygon already to be specified in constructor instead of adding it pointwise.
- This enables validation, but makes it necessary to remove the addPoint() methods.
- ==== MultiMatchQueryBuilder
- Moving MultiMatchQueryBuilder.ZeroTermsQuery enum to MatchQuery.ZeroTermsQuery.
- Also reusing new Operator enum.
- Removed ability to pass in boost value using `field(String field)` method in form e.g. `field^2`.
- Use the `field(String, float)` method instead.
- ==== MissingQueryBuilder
- The two individual setters for existence() and nullValue() were removed in favour of
- optional constructor settings in order to better capture and validate their interdependent
- settings at construction time.
- ==== TermsQueryBuilder
- Remove the setter for `termsLookup()`, making it only possible to either use a TermsLookup object or
- individual values at construction time. Also moving individual settings for the TermsLookup (lookupIndex,
- lookupType, lookupId, lookupPath) to the separate TermsLookup class, using constructor only and moving
- checks for validation there. Removed `TermsLookupQueryBuilder` in favour of `TermsQueryBuilder`.
- ==== FunctionScoreQueryBuilder
- `add` methods have been removed, all filters and functions must be provided as constructor arguments by
- creating an array of `FunctionScoreQueryBuilder.FilterFunctionBuilder` objects, containing one element
- for each filter/function pair.
- `scoreMode` and `boostMode` can only be provided using corresponding enum members instead
- of string values: see `FilterFunctionScoreQuery.ScoreMode` and `CombineFunction`.
- `CombineFunction.MULT` has been renamed to `MULTIPLY`.
|