migrate_3_0.asciidoc 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547
  1. [[breaking-changes-3.0]]
  2. == Breaking changes in 3.0
  3. This section discusses the changes that you need to be aware of when migrating
  4. your application to Elasticsearch 3.0.
  5. * <<breaking_30_search_changes>>
  6. * <<breaking_30_rest_api_changes>>
  7. * <<breaking_30_parent_child_changes>>
  8. * <<breaking_30_settings_changes>>
  9. * <<breaking_30_mapping_changes>>
  10. * <<breaking_30_plugins>>
  11. * <<breaking_30_java_api_changes>>
  12. * <<breaking_30_cache_concurrency>>
  13. * <<breaking_30_non_loopback>>
  14. * <<breaking_30_thread_pool>>
  15. * <<breaking_30_allocation>>
  16. [[breaking_30_search_changes]]
  17. === Search changes
  18. ==== `search_type=count` removed
  19. The `count` search type was deprecated since version 2.0.0 and is now removed.
  20. In order to get the same benefits, you just need to set the value of the `size`
  21. parameter to `0`.
  22. For instance, the following request:
  23. [source,sh]
  24. ---------------
  25. GET /my_index/_search?search_type=count
  26. {
  27. "aggs": {
  28. "my_terms": {
  29. "terms": {
  30. "field": "foo"
  31. }
  32. }
  33. }
  34. }
  35. ---------------
  36. can be replaced with:
  37. [source,sh]
  38. ---------------
  39. GET /my_index/_search
  40. {
  41. "size": 0,
  42. "aggs": {
  43. "my_terms": {
  44. "terms": {
  45. "field": "foo"
  46. }
  47. }
  48. }
  49. }
  50. ---------------
  51. ==== `search_type=scan` removed
  52. The `scan` search type was deprecated since version 2.1.0 and is now removed.
  53. All benefits from this search type can now be achieved by doing a scroll
  54. request that sorts documents in `_doc` order, for instance:
  55. [source,sh]
  56. ---------------
  57. GET /my_index/_search?scroll=2m
  58. {
  59. "sort": [
  60. "_doc"
  61. ]
  62. }
  63. ---------------
  64. Scroll requests sorted by `_doc` have been optimized to more efficiently resume
  65. from where the previous request stopped, so this will have the same performance
  66. characteristics as the former `scan` search type.
  67. [[breaking_30_rest_api_changes]]
  68. === REST API changes
  69. ==== search exists api removed
  70. The search exists api has been removed in favour of using the search api with
  71. `size` set to `0` and `terminate_after` set to `1`.
  72. ==== `/_optimize` endpoint removed
  73. The deprecated `/_optimize` endpoint has been removed. The `/_forcemerge`
  74. endpoint should be used in lieu of optimize.
  75. The `GET` HTTP verb for `/_forcemerge` is no longer supported, please use the
  76. `POST` HTTP verb.
  77. ==== Deprecated queries removed
  78. The following deprecated queries have been removed:
  79. * `filtered`: use `bool` query instead, which supports `filter` clauses too
  80. * `and`: use `must` clauses in a `bool` query instead
  81. * `or`: use should clauses in a `bool` query instead
  82. * `limit`: use `terminate_after` parameter instead
  83. * `fquery`: obsolete after filters and queries have been merged
  84. * `query`: obsolete after filters and queries have been merged
  85. ==== Unified fuzziness parameter
  86. * Removed support for the deprecated `min_similarity` parameter in `fuzzy query`, in favour of `similarity`.
  87. * Removed support for the deprecated `fuzzy_min_sim` parameter in `query_string` query, in favour of `similarity`.
  88. * Removed support for the deprecated `edit_distance` parameter in completion suggester, in favour of `similarity`.
  89. ==== indices query
  90. Removed support for the deprecated `filter` and `no_match_filter` fields in `indices` query,
  91. in favour of `query` and `no_match_query`.
  92. ==== nested query
  93. Removed support for the deprecated `filter` fields in `nested` query, in favour of `query`.
  94. ==== terms query
  95. Removed support for the deprecated `minimum_should_match` and `disable_coord` in `terms` query, use `bool` query instead.
  96. Removed also support for the deprecated `execution` parameter.
  97. ==== function_score query
  98. Removed support for the top level `filter` element in `function_score` query, replaced by `query`.
  99. ==== highlighters
  100. Removed support for multiple highlighter names, the only supported ones are: `plain`, `fvh` and `postings`.
  101. ==== top level filter
  102. Removed support for the deprecated top level `filter` in the search api, replaced by `post_filter`.
  103. ==== `query_binary` and `filter_binary` removed
  104. Removed support for the undocumented `query_binary` and `filter_binary` sections of a search request.
  105. [[breaking_30_parent_child_changes]]
  106. === Parent/Child changes
  107. The `children` aggregation, parent child inner hits and `has_child` and `has_parent` queries will not work on indices
  108. with `_parent` field mapping created before version `2.0.0`. The data of these indices need to be re-indexed into a new index.
  109. The format of the join between parent and child documents have changed with the `2.0.0` release. The old
  110. format can't read from version `3.0.0` and onwards. The new format allows for a much more efficient and
  111. scalable join between parent and child documents and the join data structures are stored on on disk
  112. data structures as opposed as before the join data structures were stored in the jvm heap space.
  113. ==== `score_type` has been removed
  114. The `score_type` option has been removed from the `has_child` and `has_parent` queries in favour of the `score_mode` option
  115. which does the exact same thing.
  116. ==== `sum` score mode removed
  117. The `sum` score mode has been removed in favour of the `total` mode which does the same and is already available in
  118. previous versions.
  119. ==== `max_children` option
  120. When `max_children` was set to `0` on the `has_child` query then there was no upper limit on how many children documents
  121. are allowed to match. This has changed and `0` now really means to zero child documents are allowed. If no upper limit
  122. is needed then the `max_children` option shouldn't be defined at all on the `has_child` query.
  123. [[breaking_30_settings_changes]]
  124. === Settings changes
  125. ==== Analysis settings
  126. The `index.analysis.analyzer.default_index` analyzer is not supported anymore.
  127. If you wish to change the analyzer to use for indexing, change the
  128. `index.analysis.analyzer.default` analyzer instead.
  129. ==== Ping timeout settings
  130. Previously, there were three settings for the ping timeout: `discovery.zen.initial_ping_timeout`,
  131. `discovery.zen.ping.timeout` and `discovery.zen.ping_timeout`. The former two have been removed and
  132. the only setting key for the ping timeout is now `discovery.zen.ping_timeout`. The default value for
  133. ping timeouts remains at three seconds.
  134. ==== Recovery settings
  135. Recovery settings deprecated in 1.x have been removed:
  136. * `index.shard.recovery.translog_size` is superseded by `indices.recovery.translog_size`
  137. * `index.shard.recovery.translog_ops` is superseded by `indices.recovery.translog_ops`
  138. * `index.shard.recovery.file_chunk_size` is superseded by `indices.recovery.file_chunk_size`
  139. * `index.shard.recovery.concurrent_streams` is superseded by `indices.recovery.concurrent_streams`
  140. * `index.shard.recovery.concurrent_small_file_streams` is superseded by `indices.recovery.concurrent_small_file_streams`
  141. * `indices.recovery.max_size_per_sec` is superseded by `indices.recovery.max_bytes_per_sec`
  142. If you are using any of these settings please take the time and review their purpose. All of the settings above are considered
  143. _expert settings_ and should only be used if absolutely necessary. If you have set any of the above setting as persistent
  144. cluster settings please use the settings update API and set their superseded keys accordingly.
  145. ==== Translog settings
  146. The `index.translog.flush_threshold_ops` setting is not supported anymore. In order to control flushes based on the transaction log
  147. growth use `index.translog.flush_threshold_size` instead.
  148. ==== Similarity settings
  149. The 'default' similarity has been renamed to 'classic'.
  150. [[breaking_30_mapping_changes]]
  151. === Mapping changes
  152. ==== Transform removed
  153. The `transform` feature from mappings has been removed. It made issues very hard to debug.
  154. ==== Default number mappings
  155. When a floating-point number is encountered, it is now dynamically mapped as a
  156. float by default instead of a double. The reasoning is that floats should be
  157. more than enough for most cases but would decrease storage requirements
  158. significantly.
  159. ==== `_source`'s `format` option
  160. The `_source` mapping does not support the `format` option anymore. This option
  161. will still be accepted for indices created before the upgrade to 3.0 for backward
  162. compatibility, but it will have no effect. Indices created on or after 3.0 will
  163. reject this option.
  164. [[breaking_30_plugins]]
  165. === Plugin changes
  166. Plugins implementing custom queries need to implement the `fromXContent(QueryParseContext)` method in their
  167. `QueryParser` subclass rather than `parse`. This method will take care of parsing the query from `XContent` format
  168. into an intermediate query representation that can be streamed between the nodes in binary format, effectively the
  169. query object used in the java api. Also, the query parser needs to implement the `getBuilderPrototype` method that
  170. returns a prototype of the `NamedWriteable` query, which allows to deserialize an incoming query by calling
  171. `readFrom(StreamInput)` against it, which will create a new object, see usages of `Writeable`. The `QueryParser`
  172. also needs to declare the generic type of the query that it supports and it's able to parse.
  173. The query object can then transform itself into a lucene query through the new `toQuery(QueryShardContext)` method,
  174. which returns a lucene query to be executed on the data node.
  175. Similarly, plugins implementing custom score functions need to implement the `fromXContent(QueryParseContext)`
  176. method in their `ScoreFunctionParser` subclass rather than `parse`. This method will take care of parsing
  177. the function from `XContent` format into an intermediate function representation that can be streamed between
  178. the nodes in binary format, effectively the function object used in the java api. Also, the query parser needs
  179. to implement the `getBuilderPrototype` method that returns a prototype of the `NamedWriteable` function, which
  180. allows to deserialize an incoming function by calling `readFrom(StreamInput)` against it, which will create a
  181. new object, see usages of `Writeable`. The `ScoreFunctionParser` also needs to declare the generic type of the
  182. function that it supports and it's able to parse. The function object can then transform itself into a lucene
  183. function through the new `toFunction(QueryShardContext)` method, which returns a lucene function to be executed
  184. on the data node.
  185. ==== Cloud AWS plugin changes
  186. Cloud AWS plugin has been split in two plugins:
  187. * {plugins}/discovery-ec2.html[Discovery EC2 plugin]
  188. * {plugins}/repository-s3.html[Repository S3 plugin]
  189. Proxy settings for both plugins have been renamed:
  190. * from `cloud.aws.proxy_host` to `cloud.aws.proxy.host`
  191. * from `cloud.aws.ec2.proxy_host` to `cloud.aws.ec2.proxy.host`
  192. * from `cloud.aws.s3.proxy_host` to `cloud.aws.s3.proxy.host`
  193. * from `cloud.aws.proxy_port` to `cloud.aws.proxy.port`
  194. * from `cloud.aws.ec2.proxy_port` to `cloud.aws.ec2.proxy.port`
  195. * from `cloud.aws.s3.proxy_port` to `cloud.aws.s3.proxy.port`
  196. ==== Cloud Azure plugin changes
  197. Cloud Azure plugin has been split in three plugins:
  198. * {plugins}/discovery-azure.html[Discovery Azure plugin]
  199. * {plugins}/repository-azure.html[Repository Azure plugin]
  200. * {plugins}/store-smb.html[Store SMB plugin]
  201. If you were using the `cloud-azure` plugin for snapshot and restore, you had in `elasticsearch.yml`:
  202. [source,yaml]
  203. -----
  204. cloud:
  205. azure:
  206. storage:
  207. account: your_azure_storage_account
  208. key: your_azure_storage_key
  209. -----
  210. You need to give a unique id to the storage details now as you can define multiple storage accounts:
  211. [source,yaml]
  212. -----
  213. cloud:
  214. azure:
  215. storage:
  216. my_account:
  217. account: your_azure_storage_account
  218. key: your_azure_storage_key
  219. -----
  220. ==== Cloud GCE plugin changes
  221. Cloud GCE plugin has been renamed to {plugins}/discovery-gce.html[Discovery GCE plugin].
  222. [[breaking_30_java_api_changes]]
  223. === Java API changes
  224. ==== Count api has been removed
  225. The deprecated count api has been removed from the Java api, use the search api instead and set size to 0.
  226. The following call
  227. [source,java]
  228. -----
  229. client.prepareCount(indices).setQuery(query).get();
  230. -----
  231. can be replaced with
  232. [source,java]
  233. -----
  234. client.prepareSearch(indices).setSource(new SearchSourceBuilder().size(0).query(query)).get();
  235. -----
  236. ==== BoostingQueryBuilder
  237. Removed setters for mandatory positive/negative query. Both arguments now have
  238. to be supplied at construction time already and have to be non-null.
  239. ==== SpanContainingQueryBuilder
  240. Removed setters for mandatory big/little inner span queries. Both arguments now have
  241. to be supplied at construction time already and have to be non-null. Updated
  242. static factory methods in QueryBuilders accordingly.
  243. ==== SpanOrQueryBuilder
  244. Making sure that query contains at least one clause by making initial clause mandatory
  245. in constructor.
  246. ==== SpanNearQueryBuilder
  247. Removed setter for mandatory slop parameter, needs to be set in constructor now. Also
  248. making sure that query contains at least one clause by making initial clause mandatory
  249. in constructor. Updated the static factory methods in QueryBuilders accordingly.
  250. ==== SpanNotQueryBuilder
  251. Removed setter for mandatory include/exclude span query clause, needs to be set in constructor now.
  252. Updated the static factory methods in QueryBuilders and tests accordingly.
  253. ==== SpanWithinQueryBuilder
  254. Removed setters for mandatory big/little inner span queries. Both arguments now have
  255. to be supplied at construction time already and have to be non-null. Updated
  256. static factory methods in QueryBuilders accordingly.
  257. ==== QueryFilterBuilder
  258. Removed the setter `queryName(String queryName)` since this field is not supported
  259. in this type of query. Use `FQueryFilterBuilder.queryName(String queryName)` instead
  260. when in need to wrap a named query as a filter.
  261. ==== WrapperQueryBuilder
  262. Removed `wrapperQueryBuilder(byte[] source, int offset, int length)`. Instead simply
  263. use `wrapperQueryBuilder(byte[] source)`. Updated the static factory methods in
  264. QueryBuilders accordingly.
  265. ==== QueryStringQueryBuilder
  266. Removed ability to pass in boost value using `field(String field)` method in form e.g. `field^2`.
  267. Use the `field(String, float)` method instead.
  268. ==== Operator
  269. Removed the enums called `Operator` from `MatchQueryBuilder`, `QueryStringQueryBuilder`,
  270. `SimpleQueryStringBuilder`, and `CommonTermsQueryBuilder` in favour of using the enum
  271. defined in `org.elasticsearch.index.query.Operator` in an effort to consolidate the
  272. codebase and avoid duplication.
  273. ==== queryName and boost support
  274. Support for `queryName` and `boost` has been streamlined to all of the queries. That is
  275. a breaking change till queries get sent over the network as serialized json rather
  276. than in `Streamable` format. In fact whenever additional fields are added to the json
  277. representation of the query, older nodes might throw error when they find unknown fields.
  278. ==== InnerHitsBuilder
  279. InnerHitsBuilder now has a dedicated addParentChildInnerHits and addNestedInnerHits methods
  280. to differentiate between inner hits for nested vs. parent / child documents. This change
  281. makes the type / path parameter mandatory.
  282. ==== MatchQueryBuilder
  283. Moving MatchQueryBuilder.Type and MatchQueryBuilder.ZeroTermsQuery enum to MatchQuery.Type.
  284. Also reusing new Operator enum.
  285. ==== MoreLikeThisQueryBuilder
  286. Removed `MoreLikeThisQueryBuilder.Item#id(String id)`, `Item#doc(BytesReference doc)`,
  287. `Item#doc(XContentBuilder doc)`. Use provided constructors instead.
  288. Removed `MoreLikeThisQueryBuilder#addLike` in favor of texts and/or items being provided
  289. at construction time. Using arrays there instead of lists now.
  290. Removed `MoreLikeThisQueryBuilder#addUnlike` in favor to using the `unlike` methods
  291. which take arrays as arguments now rather than the lists used before.
  292. The deprecated `docs(Item... docs)`, `ignoreLike(Item... docs)`,
  293. `ignoreLike(String... likeText)`, `addItem(Item... likeItems)` have been removed.
  294. ==== GeoDistanceQueryBuilder
  295. Removing individual setters for lon() and lat() values, both values should be set together
  296. using point(lon, lat).
  297. ==== GeoDistanceRangeQueryBuilder
  298. Removing setters for to(Object ...) and from(Object ...) in favour of the only two allowed input
  299. arguments (String, Number). Removing setter for center point (point(), geohash()) because parameter
  300. is mandatory and should already be set in constructor.
  301. Also removing setters for lt(), lte(), gt(), gte() since they can all be replaced by equivallent
  302. calls to to/from() and inludeLower()/includeUpper().
  303. ==== GeoPolygonQueryBuilder
  304. Require shell of polygon already to be specified in constructor instead of adding it pointwise.
  305. This enables validation, but makes it necessary to remove the addPoint() methods.
  306. ==== MultiMatchQueryBuilder
  307. Moving MultiMatchQueryBuilder.ZeroTermsQuery enum to MatchQuery.ZeroTermsQuery.
  308. Also reusing new Operator enum.
  309. Removed ability to pass in boost value using `field(String field)` method in form e.g. `field^2`.
  310. Use the `field(String, float)` method instead.
  311. ==== MissingQueryBuilder
  312. The MissingQueryBuilder which was deprecated in 2.2.0 is removed. As a replacement use ExistsQueryBuilder
  313. inside a mustNot() clause. So instead of using `new ExistsQueryBuilder(name)` now use
  314. `new BoolQueryBuilder().mustNot(new ExistsQueryBuilder(name))`.
  315. ==== NotQueryBuilder
  316. The NotQueryBuilder which was deprecated in 2.1.0 is removed. As a replacement use BoolQueryBuilder
  317. with added mustNot() clause. So instead of using `new NotQueryBuilder(filter)` now use
  318. `new BoolQueryBuilder().mustNot(filter)`.
  319. ==== TermsQueryBuilder
  320. Remove the setter for `termsLookup()`, making it only possible to either use a TermsLookup object or
  321. individual values at construction time. Also moving individual settings for the TermsLookup (lookupIndex,
  322. lookupType, lookupId, lookupPath) to the separate TermsLookup class, using constructor only and moving
  323. checks for validation there. Removed `TermsLookupQueryBuilder` in favour of `TermsQueryBuilder`.
  324. ==== FunctionScoreQueryBuilder
  325. `add` methods have been removed, all filters and functions must be provided as constructor arguments by
  326. creating an array of `FunctionScoreQueryBuilder.FilterFunctionBuilder` objects, containing one element
  327. for each filter/function pair.
  328. `scoreMode` and `boostMode` can only be provided using corresponding enum members instead
  329. of string values: see `FilterFunctionScoreQuery.ScoreMode` and `CombineFunction`.
  330. `CombineFunction.MULT` has been renamed to `MULTIPLY`.
  331. ==== IdsQueryBuilder
  332. For simplicity, only one way of adding the ids to the existing list (empty by default) is left: `addIds(String...)`
  333. ==== DocumentAlreadyExistsException removed
  334. `DocumentAlreadyExistsException` is removed and a `VersionConflictException` is thrown instead (with a better
  335. error description). This will influence code that use the `IndexRequest.opType()` or `IndexRequest.create()`
  336. to index a document only if it doesn't already exist.
  337. ==== ShapeBuilders
  338. `InternalLineStringBuilder` is removed in favour of `LineStringBuilder`, `InternalPolygonBuilder` in favour of PolygonBuilder` and `Ring` has been replaced with `LineStringBuilder`. Also the abstract base classes `BaseLineStringBuilder` and `BasePolygonBuilder` haven been merged with their corresponding implementations.
  339. [[breaking_30_cache_concurrency]]
  340. === Cache concurrency level settings removed
  341. Two cache concurrency level settings `indices.requests.cache.concurrency_level` and
  342. `indices.fielddata.cache.concurrency_level` because they no longer apply to the cache implementation used for the
  343. request cache and the field data cache.
  344. [[breaking_30_non_loopback]]
  345. === Remove bind option of `non_loopback`
  346. This setting would arbitrarily pick the first interface not marked as loopback. Instead, specify by address
  347. scope (e.g. `_local_,_site_` for all loopback and private network addresses) or by explicit interface names,
  348. hostnames, or addresses.
  349. [[breaking_30_thread_pool]]
  350. === Forbid changing of thread pool types
  351. Previously, <<modules-threadpool,thread pool types>> could be dynamically adjusted. The thread pool type effectively
  352. controls the backing queue for the thread pool and modifying this is an expert setting with minimal practical benefits
  353. and high risk of being misused. The ability to change the thread pool type for any thread pool has been removed; do note
  354. that it is still possible to adjust relevant thread pool parameters for each of the thread pools (e.g., depending on
  355. the thread pool type, `keep_alive`, `queue_size`, etc.).
  356. === Adding system CPU percent to OS stats
  357. The recent CPU usage (as a percent) has been added to the OS stats reported under the node stats API and the cat nodes
  358. API. The breaking change here is that there is a new object in the "os" object in the node stats response. This object
  359. is called "cpu" and includes "percent" and "load_average" as fields. This moves the "load_average" field that was
  360. previously a top-level field in the "os" object to the "cpu" object. Additionally, the "cpu" field in the cat nodes API
  361. response is output by default.
  362. Finally, the API for org.elasticsearch.monitor.os.OsStats has changed. The `getLoadAverage` method has been removed. The
  363. value for this can now be obtained from `OsStats.Cpu#getLoadAverage`. Additionally, the recent CPU usage can be obtained
  364. from `OsStats.Cpu#getPercent`.
  365. === Fields option
  366. Only stored fields are retrievable with this option.
  367. The fields option won't be able to load non stored fields from _source anymore.
  368. [[breaking_30_allocation]]
  369. === Primary shard allocation
  370. Previously, primary shards were only assigned if a quorum of shard copies were found (configurable using
  371. `index.recovery.initial_shards`, now deprecated). In case where a primary had only a single replica, quorum was defined
  372. to be a single shard. This meant that any shard copy of an index with replication factor 1 could become primary, even it
  373. was a stale copy of the data on disk. This is now fixed by using allocation IDs.
  374. Allocation IDs assign unique identifiers to shard copies. This allows the cluster to differentiate between multiple
  375. copies of the same data and track which shards have been active, so that after a cluster restart, shard copies
  376. containing only the most recent data can become primaries.
  377. ==== `index.shared_filesystem.recover_on_any_node` changes
  378. The behavior of `index.shared_filesystem.recover_on_any_node = true` has been changed. Previously, in the case where no
  379. shard copies could be found, an arbitrary node was chosen by potentially ignoring allocation deciders. Now, we take
  380. balancing into account but don't assign the shard if the allocation deciders are not satisfied. The behavior has also changed
  381. in the case where shard copies can be found. Previously, a node not holding the shard copy was chosen if none of the nodes
  382. holding shard copies were satisfying the allocation deciders. Now, the shard will be assigned to a node having a shard copy,
  383. even if none of the nodes holding a shard copy satisfy the allocation deciders.