Reworked 5.0 breaking changes docs
This commit is contained in:
parent
25531b7299
commit
5c845f8bb5
|
@ -4,877 +4,52 @@
|
||||||
This section discusses the changes that you need to be aware of when migrating
|
This section discusses the changes that you need to be aware of when migrating
|
||||||
your application to Elasticsearch 5.0.
|
your application to Elasticsearch 5.0.
|
||||||
|
|
||||||
|
[IMPORTANT]
|
||||||
|
.Reindex indices from Elasticseach 1.x or before
|
||||||
|
=========================================
|
||||||
|
|
||||||
|
Indices created in Elasticsearch 1.x or before will need to be reindexed with
|
||||||
|
Elasticsearch 2.x in order to be readable by Elasticsearch 5.x. The easiest
|
||||||
|
way to do this is to upgrade to Elasticsearch 2.3 or later and to use the
|
||||||
|
`reindex` API.
|
||||||
|
|
||||||
|
=========================================
|
||||||
|
|
||||||
|
[float]
|
||||||
|
=== Also see:
|
||||||
|
|
||||||
* <<breaking_50_search_changes>>
|
* <<breaking_50_search_changes>>
|
||||||
|
* <<breaking_50_mapping_changes>>
|
||||||
|
* <<breaking_50_percolator>>
|
||||||
|
* <<breaking_50_index_apis>>
|
||||||
|
* <<breaking_50_settings_changes>>
|
||||||
|
* <<breaking_50_allocation>>
|
||||||
* <<breaking_50_rest_api_changes>>
|
* <<breaking_50_rest_api_changes>>
|
||||||
* <<breaking_50_cat_api>>
|
* <<breaking_50_cat_api>>
|
||||||
* <<breaking_50_parent_child_changes>>
|
|
||||||
* <<breaking_50_settings_changes>>
|
|
||||||
* <<breaking_50_mapping_changes>>
|
|
||||||
* <<breaking_50_plugins>>
|
|
||||||
* <<breaking_50_java_api_changes>>
|
* <<breaking_50_java_api_changes>>
|
||||||
* <<breaking_50_cache_concurrency>>
|
|
||||||
* <<breaking_50_non_loopback>>
|
|
||||||
* <<breaking_50_thread_pool>>
|
|
||||||
* <<breaking_50_allocation>>
|
|
||||||
* <<breaking_50_percolator>>
|
|
||||||
* <<breaking_50_packaging>>
|
* <<breaking_50_packaging>>
|
||||||
* <<breaking_50_scripting>>
|
* <<breaking_50_plugins>>
|
||||||
* <<breaking_50_term_vectors>>
|
|
||||||
* <<breaking_50_security>>
|
|
||||||
* <<breaking_50_snapshot_restore>>
|
|
||||||
|
|
||||||
[[breaking_50_search_changes]]
|
include::migrate_5_0/search.asciidoc[]
|
||||||
=== Warmers
|
|
||||||
|
|
||||||
Thanks to several changes like doc values by default or disk-based norms,
|
include::migrate_5_0/mapping.asciidoc[]
|
||||||
warmers have become quite useless. As a consequence, warmers and the warmer
|
|
||||||
API have been removed: it is not possible anymore to register queries that
|
|
||||||
will run before a new IndexSearcher is published.
|
|
||||||
|
|
||||||
Don't worry if you have warmers defined on your indices, they will simply be
|
include::migrate_5_0/percolator.asciidoc[]
|
||||||
ignored when upgrading to 5.0.
|
|
||||||
|
|
||||||
=== Search changes
|
include::migrate_5_0/index-apis.asciidoc[]
|
||||||
|
|
||||||
==== `search_type=count` removed
|
include::migrate_5_0/settings.asciidoc[]
|
||||||
|
|
||||||
The `count` search type was deprecated since version 2.0.0 and is now removed.
|
include::migrate_5_0/allocation.asciidoc[]
|
||||||
In order to get the same benefits, you just need to set the value of the `size`
|
|
||||||
parameter to `0`.
|
|
||||||
|
|
||||||
For instance, the following request:
|
include::migrate_5_0/rest.asciidoc[]
|
||||||
|
|
||||||
[source,sh]
|
include::migrate_5_0/cat.asciidoc[]
|
||||||
---------------
|
|
||||||
GET /my_index/_search?search_type=count
|
|
||||||
{
|
|
||||||
"aggs": {
|
|
||||||
"my_terms": {
|
|
||||||
"terms": {
|
|
||||||
"field": "foo"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
---------------
|
|
||||||
|
|
||||||
can be replaced with:
|
include::migrate_5_0/java.asciidoc[]
|
||||||
|
|
||||||
[source,sh]
|
include::migrate_5_0/packaging.asciidoc[]
|
||||||
---------------
|
|
||||||
GET /my_index/_search
|
|
||||||
{
|
|
||||||
"size": 0,
|
|
||||||
"aggs": {
|
|
||||||
"my_terms": {
|
|
||||||
"terms": {
|
|
||||||
"field": "foo"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
---------------
|
|
||||||
|
|
||||||
==== `search_type=scan` removed
|
include::migrate_5_0/plugins.asciidoc[]
|
||||||
|
|
||||||
The `scan` search type was deprecated since version 2.1.0 and is now removed.
|
|
||||||
All benefits from this search type can now be achieved by doing a scroll
|
|
||||||
request that sorts documents in `_doc` order, for instance:
|
|
||||||
|
|
||||||
[source,sh]
|
|
||||||
---------------
|
|
||||||
GET /my_index/_search?scroll=2m
|
|
||||||
{
|
|
||||||
"sort": [
|
|
||||||
"_doc"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
---------------
|
|
||||||
|
|
||||||
Scroll requests sorted by `_doc` have been optimized to more efficiently resume
|
|
||||||
from where the previous request stopped, so this will have the same performance
|
|
||||||
characteristics as the former `scan` search type.
|
|
||||||
|
|
||||||
==== Boost accuracy for queries on `_all`
|
|
||||||
|
|
||||||
Per-field boosts on the `_all` are now compressed on a single byte instead of
|
|
||||||
4 bytes previously. While this will make the index more space-efficient, this
|
|
||||||
also means that the boosts will be less accurately encoded.
|
|
||||||
|
|
||||||
[[breaking_50_rest_api_changes]]
|
|
||||||
=== REST API changes
|
|
||||||
|
|
||||||
==== id values longer than 512 bytes are rejected
|
|
||||||
|
|
||||||
When specifying an `_id` value longer than 512 bytes, the request will be
|
|
||||||
rejected.
|
|
||||||
|
|
||||||
==== search exists api removed
|
|
||||||
|
|
||||||
The search exists api has been removed in favour of using the search api with
|
|
||||||
`size` set to `0` and `terminate_after` set to `1`.
|
|
||||||
|
|
||||||
==== `/_optimize` endpoint removed
|
|
||||||
|
|
||||||
The deprecated `/_optimize` endpoint has been removed. The `/_forcemerge`
|
|
||||||
endpoint should be used in lieu of optimize.
|
|
||||||
|
|
||||||
The `GET` HTTP verb for `/_forcemerge` is no longer supported, please use the
|
|
||||||
`POST` HTTP verb.
|
|
||||||
|
|
||||||
==== Deprecated queries removed
|
|
||||||
|
|
||||||
The following deprecated queries have been removed:
|
|
||||||
|
|
||||||
* `filtered`: use `bool` query instead, which supports `filter` clauses too
|
|
||||||
* `and`: use `must` clauses in a `bool` query instead
|
|
||||||
* `or`: use should clauses in a `bool` query instead
|
|
||||||
* `limit`: use `terminate_after` parameter instead
|
|
||||||
* `fquery`: obsolete after filters and queries have been merged
|
|
||||||
* `query`: obsolete after filters and queries have been merged
|
|
||||||
|
|
||||||
==== Unified fuzziness parameter
|
|
||||||
|
|
||||||
* Removed support for the deprecated `min_similarity` parameter in `fuzzy query`, in favour of `similarity`.
|
|
||||||
* Removed support for the deprecated `fuzzy_min_sim` parameter in `query_string` query, in favour of `similarity`.
|
|
||||||
* Removed support for the deprecated `edit_distance` parameter in completion suggester, in favour of `similarity`.
|
|
||||||
|
|
||||||
==== indices query
|
|
||||||
|
|
||||||
Removed support for the deprecated `filter` and `no_match_filter` fields in `indices` query,
|
|
||||||
in favour of `query` and `no_match_query`.
|
|
||||||
|
|
||||||
==== nested query
|
|
||||||
|
|
||||||
Removed support for the deprecated `filter` fields in `nested` query, in favour of `query`.
|
|
||||||
|
|
||||||
==== terms query
|
|
||||||
|
|
||||||
Removed support for the deprecated `minimum_should_match` and `disable_coord` in `terms` query, use `bool` query instead.
|
|
||||||
Removed also support for the deprecated `execution` parameter.
|
|
||||||
|
|
||||||
==== function_score query
|
|
||||||
|
|
||||||
Removed support for the top level `filter` element in `function_score` query, replaced by `query`.
|
|
||||||
|
|
||||||
==== highlighters
|
|
||||||
|
|
||||||
Removed support for multiple highlighter names, the only supported ones are: `plain`, `fvh` and `postings`.
|
|
||||||
|
|
||||||
==== top level filter
|
|
||||||
|
|
||||||
Removed support for the deprecated top level `filter` in the search api, replaced by `post_filter`.
|
|
||||||
|
|
||||||
==== `query_binary` and `filter_binary` removed
|
|
||||||
|
|
||||||
Removed support for the undocumented `query_binary` and `filter_binary` sections of a search request.
|
|
||||||
|
|
||||||
==== `span_near`'s' `collect_payloads` deprecated
|
|
||||||
|
|
||||||
Payloads are now loaded when needed.
|
|
||||||
|
|
||||||
[[breaking_50_cat_api]]
|
|
||||||
=== CAT API changes
|
|
||||||
|
|
||||||
==== Use Accept header for specifying response media type
|
|
||||||
|
|
||||||
Previous versions of Elasticsearch accepted the Content-type header
|
|
||||||
field for controlling the media type of the response in the cat API.
|
|
||||||
This is in opposition to the HTTP spec which specifies the Accept
|
|
||||||
header field for this purpose. Elasticsearch now uses the Accept header
|
|
||||||
field and support for using the Content-Type header field for this
|
|
||||||
purpose has been removed.
|
|
||||||
|
|
||||||
==== Host field removed from the cat nodes API
|
|
||||||
|
|
||||||
The `host` field has been removed from the cat nodes API as its value
|
|
||||||
is always equal to the `ip` field. The `name` field is available in the
|
|
||||||
cat nodes API and should be used instead of the `host` field.
|
|
||||||
|
|
||||||
==== Changes to cat recovery API
|
|
||||||
|
|
||||||
The fields `bytes_recovered` and `files_recovered` have been added to
|
|
||||||
the cat recovery API. These fields, respectively, indicate the total
|
|
||||||
number of bytes and files that have been recovered.
|
|
||||||
|
|
||||||
The fields `total_files` and `total_bytes` have been renamed to
|
|
||||||
`files_total` and `bytes_total`, respectively.
|
|
||||||
|
|
||||||
Additionally, the field `translog` has been renamed to
|
|
||||||
`translog_ops_recovered`, the field `translog_total` to
|
|
||||||
`translog_ops` and the field `translog_percent` to
|
|
||||||
`translog_ops_percent`. The short aliases for these fields are `tor`,
|
|
||||||
`to`, and `top`, respectively.
|
|
||||||
|
|
||||||
[[breaking_50_parent_child_changes]]
|
|
||||||
=== Parent/Child changes
|
|
||||||
|
|
||||||
The `children` aggregation, parent child inner hits and `has_child` and `has_parent` queries will not work on indices
|
|
||||||
with `_parent` field mapping created before version `2.0.0`. The data of these indices need to be re-indexed into a new index.
|
|
||||||
|
|
||||||
The format of the join between parent and child documents have changed with the `2.0.0` release. The old
|
|
||||||
format can't read from version `5.0.0` and onwards. The new format allows for a much more efficient and
|
|
||||||
scalable join between parent and child documents and the join data structures are stored on disk
|
|
||||||
data structures as opposed as before the join data structures were stored in the jvm heap space.
|
|
||||||
|
|
||||||
==== `score_type` has been removed
|
|
||||||
|
|
||||||
The `score_type` option has been removed from the `has_child` and `has_parent` queries in favour of the `score_mode` option
|
|
||||||
which does the exact same thing.
|
|
||||||
|
|
||||||
==== `sum` score mode removed
|
|
||||||
|
|
||||||
The `sum` score mode has been removed in favour of the `total` mode which does the same and is already available in
|
|
||||||
previous versions.
|
|
||||||
|
|
||||||
==== `max_children` option
|
|
||||||
|
|
||||||
When `max_children` was set to `0` on the `has_child` query then there was no upper limit on how many children documents
|
|
||||||
are allowed to match. This has changed and `0` now really means to zero child documents are allowed. If no upper limit
|
|
||||||
is needed then the `max_children` option shouldn't be defined at all on the `has_child` query.
|
|
||||||
|
|
||||||
==== `_parent` field no longer indexed
|
|
||||||
|
|
||||||
The join between parent and child documents no longer relies on indexed fields and therefor from `5.0.0` onwards
|
|
||||||
the `_parent` indexed field won't be indexed. In order to find documents that referrer to a specific parent id
|
|
||||||
the new `parent_id` query can be used. The get response and hits inside the search response remain to include
|
|
||||||
the parent id under the `_parent` key.
|
|
||||||
|
|
||||||
[[breaking_50_settings_changes]]
|
|
||||||
=== Settings changes
|
|
||||||
|
|
||||||
From Elasticsearch 5.0 on all settings are validated before they are applied. Node level and default index
|
|
||||||
level settings are validated on node startup, dynamic cluster and index setting are validated before they are updated/added
|
|
||||||
to the cluster state. Every setting must be a _known_ setting or in other words all settings must be registered with the
|
|
||||||
node or transport client they are used with. This implies that plugins that define custom settings must register all of their
|
|
||||||
settings during pluging loading using the `SettingsModule#registerSettings(Setting)` method.
|
|
||||||
|
|
||||||
==== Node settings
|
|
||||||
|
|
||||||
The `name` setting has been removed and is replaced by `node.name`. Usage of `-Dname=some_node_name` is not supported
|
|
||||||
anymore.
|
|
||||||
|
|
||||||
==== Transport Settings
|
|
||||||
|
|
||||||
All settings with a `netty` infix have been replaced by their already existing `transport` synonyms. For instance `transport.netty.bind_host` is
|
|
||||||
no longer supported and should be replaced by the superseding setting `transport.bind_host`.
|
|
||||||
|
|
||||||
==== Analysis settings
|
|
||||||
|
|
||||||
The `index.analysis.analyzer.default_index` analyzer is not supported anymore.
|
|
||||||
If you wish to change the analyzer to use for indexing, change the
|
|
||||||
`index.analysis.analyzer.default` analyzer instead.
|
|
||||||
|
|
||||||
==== Ping timeout settings
|
|
||||||
|
|
||||||
Previously, there were three settings for the ping timeout: `discovery.zen.initial_ping_timeout`,
|
|
||||||
`discovery.zen.ping.timeout` and `discovery.zen.ping_timeout`. The former two have been removed and
|
|
||||||
the only setting key for the ping timeout is now `discovery.zen.ping_timeout`. The default value for
|
|
||||||
ping timeouts remains at three seconds.
|
|
||||||
|
|
||||||
==== Recovery settings
|
|
||||||
|
|
||||||
Recovery settings deprecated in 1.x have been removed:
|
|
||||||
|
|
||||||
* `index.shard.recovery.translog_size` is superseded by `indices.recovery.translog_size`
|
|
||||||
* `index.shard.recovery.translog_ops` is superseded by `indices.recovery.translog_ops`
|
|
||||||
* `index.shard.recovery.file_chunk_size` is superseded by `indices.recovery.file_chunk_size`
|
|
||||||
* `index.shard.recovery.concurrent_streams` is superseded by `indices.recovery.concurrent_streams`
|
|
||||||
* `index.shard.recovery.concurrent_small_file_streams` is superseded by `indices.recovery.concurrent_small_file_streams`
|
|
||||||
* `indices.recovery.max_size_per_sec` is superseded by `indices.recovery.max_bytes_per_sec`
|
|
||||||
|
|
||||||
If you are using any of these settings please take the time and review their purpose. All of the settings above are considered
|
|
||||||
_expert settings_ and should only be used if absolutely necessary. If you have set any of the above setting as persistent
|
|
||||||
cluster settings please use the settings update API and set their superseded keys accordingly.
|
|
||||||
|
|
||||||
The following settings have been removed without replacement
|
|
||||||
|
|
||||||
* `indices.recovery.concurrent_small_file_streams` - recoveries are now single threaded. The number of concurrent outgoing recoveries are throttled via allocation deciders
|
|
||||||
* `indices.recovery.concurrent_file_streams` - recoveries are now single threaded. The number of concurrent outgoing recoveries are throttled via allocation deciders
|
|
||||||
|
|
||||||
==== Translog settings
|
|
||||||
|
|
||||||
The `index.translog.flush_threshold_ops` setting is not supported anymore. In order to control flushes based on the transaction log
|
|
||||||
growth use `index.translog.flush_threshold_size` instead. Changing the translog type with `index.translog.fs.type` is not supported
|
|
||||||
anymore, the `buffered` implementation is now the only available option and uses a fixed `8kb` buffer.
|
|
||||||
|
|
||||||
The translog by default is fsynced on a request basis such that the ability to fsync on every operation is not necessary anymore. In-fact it can
|
|
||||||
be a performance bottleneck and it's trappy since it enabled by a special value set on `index.translog.sync_interval`. `index.translog.sync_interval`
|
|
||||||
now doesn't accept a value less than `100ms` which prevents fsyncing too often if async durability is enabled. The special value `0` is not supported anymore.
|
|
||||||
|
|
||||||
==== Request Cache Settings
|
|
||||||
|
|
||||||
The deprecated settings `index.cache.query.enable` and `indices.cache.query.size` have been removed and are replaced with
|
|
||||||
`index.requests.cache.enable` and `indices.requests.cache.size` respectively.
|
|
||||||
|
|
||||||
`indices.requests.cache.clean_interval` has been replaced with `indices.cache.clean_interval` and is no longer supported.
|
|
||||||
|
|
||||||
==== Field Data Cache Settings
|
|
||||||
|
|
||||||
`indices.fielddata.cache.clean_interval` has been replaced with `indices.cache.clean_interval` and is no longer supported.
|
|
||||||
|
|
||||||
==== Allocation settings
|
|
||||||
|
|
||||||
Allocation settings deprecated in 1.x have been removed:
|
|
||||||
|
|
||||||
* `cluster.routing.allocation.concurrent_recoveries` is superseded by `cluster.routing.allocation.node_concurrent_recoveries`
|
|
||||||
|
|
||||||
Please change the setting in your configuration files or in the clusterstate to use the new settings instead.
|
|
||||||
|
|
||||||
==== Similarity settings
|
|
||||||
|
|
||||||
The 'default' similarity has been renamed to 'classic'.
|
|
||||||
|
|
||||||
==== Indexing settings
|
|
||||||
|
|
||||||
`indices.memory.min_shard_index_buffer_size` and `indices.memory.max_shard_index_buffer_size` are removed since Elasticsearch now allows any one shard to any
|
|
||||||
amount of heap as long as the total indexing buffer heap used across all shards is below the node's `indices.memory.index_buffer_size` (default: 10% of the JVM heap)
|
|
||||||
|
|
||||||
==== Removed es.max-open-files
|
|
||||||
|
|
||||||
Setting the system property es.max-open-files to true to get
|
|
||||||
Elasticsearch to print the number of maximum open files for the
|
|
||||||
Elasticsearch process has been removed. This same information can be
|
|
||||||
obtained from the <<cluster-nodes-info>> API, and a warning is logged
|
|
||||||
on startup if it is set too low.
|
|
||||||
|
|
||||||
==== Removed es.netty.gathering
|
|
||||||
|
|
||||||
Disabling Netty from using NIO gathering could be done via the escape
|
|
||||||
hatch of setting the system property "es.netty.gathering" to "false".
|
|
||||||
Time has proven enabling gathering by default is a non-issue and this
|
|
||||||
non-documented setting has been removed.
|
|
||||||
|
|
||||||
==== Removed es.useLinkedTransferQueue
|
|
||||||
|
|
||||||
The system property `es.useLinkedTransferQueue` could be used to
|
|
||||||
control the queue implementation used in the cluster service and the
|
|
||||||
handling of ping responses during discovery. This was an undocumented
|
|
||||||
setting and has been removed.
|
|
||||||
|
|
||||||
[[breaking_50_mapping_changes]]
|
|
||||||
=== Mapping changes
|
|
||||||
|
|
||||||
==== Default doc values settings
|
|
||||||
|
|
||||||
Doc values are now also on by default on numeric and boolean fields that are
|
|
||||||
not indexed.
|
|
||||||
|
|
||||||
==== Transform removed
|
|
||||||
|
|
||||||
The `transform` feature from mappings has been removed. It made issues very hard to debug.
|
|
||||||
|
|
||||||
==== Default number mappings
|
|
||||||
|
|
||||||
When a floating-point number is encountered, it is now dynamically mapped as a
|
|
||||||
float by default instead of a double. The reasoning is that floats should be
|
|
||||||
more than enough for most cases but would decrease storage requirements
|
|
||||||
significantly.
|
|
||||||
|
|
||||||
==== `index` property
|
|
||||||
|
|
||||||
On all types but `string`, the `index` property now only accepts `true`/`false`
|
|
||||||
instead of `not_analyzed`/`no`. The `string` field still accepts
|
|
||||||
`analyzed`/`not_analyzed`/`no`.
|
|
||||||
|
|
||||||
==== ++_source++'s `format` option
|
|
||||||
|
|
||||||
The `_source` mapping does not support the `format` option anymore. This option
|
|
||||||
will still be accepted for indices created before the upgrade to 5.0 for backward
|
|
||||||
compatibility, but it will have no effect. Indices created on or after 5.0 will
|
|
||||||
reject this option.
|
|
||||||
|
|
||||||
==== Object notation
|
|
||||||
|
|
||||||
Core types don't support the object notation anymore, which allowed to provide
|
|
||||||
values as follows:
|
|
||||||
|
|
||||||
[source,json]
|
|
||||||
---------------
|
|
||||||
{
|
|
||||||
"value": "field_value",
|
|
||||||
"boost": 42
|
|
||||||
}
|
|
||||||
---------------
|
|
||||||
|
|
||||||
==== `fielddata.format`
|
|
||||||
|
|
||||||
Setting `fielddata.format: doc_values` in the mappings used to implicitly
|
|
||||||
enable doc values on a field. This no longer works: the only way to enable or
|
|
||||||
disable doc values is by using the `doc_values` property of mappings.
|
|
||||||
|
|
||||||
|
|
||||||
[[breaking_50_plugins]]
|
|
||||||
=== Plugin changes
|
|
||||||
|
|
||||||
The command `bin/plugin` has been renamed to `bin/elasticsearch-plugin`.
|
|
||||||
The structure of the plugin has changed. All the plugin files must be contained in a directory called `elasticsearch`.
|
|
||||||
If you use the gradle build, this structure is automatically generated.
|
|
||||||
|
|
||||||
==== Site plugins removed
|
|
||||||
|
|
||||||
Site plugins have been removed. It is recommended to migrate site plugins to Kibana plugins.
|
|
||||||
|
|
||||||
==== Multicast plugin removed
|
|
||||||
|
|
||||||
Multicast has been removed. Use unicast discovery, or one of the cloud discovery plugins.
|
|
||||||
|
|
||||||
==== Plugins with custom query implementations
|
|
||||||
|
|
||||||
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.
|
|
||||||
|
|
||||||
==== Cloud AWS plugin changes
|
|
||||||
|
|
||||||
Cloud AWS plugin has been split in two plugins:
|
|
||||||
|
|
||||||
* {plugins}/discovery-ec2.html[Discovery EC2 plugin]
|
|
||||||
* {plugins}/repository-s3.html[Repository S3 plugin]
|
|
||||||
|
|
||||||
Proxy settings for both plugins have been renamed:
|
|
||||||
|
|
||||||
* from `cloud.aws.proxy_host` to `cloud.aws.proxy.host`
|
|
||||||
* from `cloud.aws.ec2.proxy_host` to `cloud.aws.ec2.proxy.host`
|
|
||||||
* from `cloud.aws.s3.proxy_host` to `cloud.aws.s3.proxy.host`
|
|
||||||
* from `cloud.aws.proxy_port` to `cloud.aws.proxy.port`
|
|
||||||
* from `cloud.aws.ec2.proxy_port` to `cloud.aws.ec2.proxy.port`
|
|
||||||
* from `cloud.aws.s3.proxy_port` to `cloud.aws.s3.proxy.port`
|
|
||||||
|
|
||||||
==== Cloud Azure plugin changes
|
|
||||||
|
|
||||||
Cloud Azure plugin has been split in three plugins:
|
|
||||||
|
|
||||||
* {plugins}/discovery-azure.html[Discovery Azure plugin]
|
|
||||||
* {plugins}/repository-azure.html[Repository Azure plugin]
|
|
||||||
* {plugins}/store-smb.html[Store SMB plugin]
|
|
||||||
|
|
||||||
If you were using the `cloud-azure` plugin for snapshot and restore, you had in `elasticsearch.yml`:
|
|
||||||
|
|
||||||
[source,yaml]
|
|
||||||
-----
|
|
||||||
cloud:
|
|
||||||
azure:
|
|
||||||
storage:
|
|
||||||
account: your_azure_storage_account
|
|
||||||
key: your_azure_storage_key
|
|
||||||
-----
|
|
||||||
|
|
||||||
You need to give a unique id to the storage details now as you can define multiple storage accounts:
|
|
||||||
|
|
||||||
[source,yaml]
|
|
||||||
-----
|
|
||||||
cloud:
|
|
||||||
azure:
|
|
||||||
storage:
|
|
||||||
my_account:
|
|
||||||
account: your_azure_storage_account
|
|
||||||
key: your_azure_storage_key
|
|
||||||
-----
|
|
||||||
|
|
||||||
|
|
||||||
==== Cloud GCE plugin changes
|
|
||||||
|
|
||||||
Cloud GCE plugin has been renamed to {plugins}/discovery-gce.html[Discovery GCE plugin].
|
|
||||||
|
|
||||||
|
|
||||||
==== Mapper Attachments plugin deprecated
|
|
||||||
|
|
||||||
Mapper attachments has been deprecated. Users should use now the {plugins}/ingest-attachment.html[`ingest-attachment`]
|
|
||||||
plugin.
|
|
||||||
|
|
||||||
|
|
||||||
[[breaking_50_java_api_changes]]
|
|
||||||
=== Java API changes
|
|
||||||
|
|
||||||
==== Count api has been removed
|
|
||||||
|
|
||||||
The deprecated count api has been removed from the Java api, use the search api instead and set size to 0.
|
|
||||||
|
|
||||||
The following call
|
|
||||||
|
|
||||||
[source,java]
|
|
||||||
-----
|
|
||||||
client.prepareCount(indices).setQuery(query).get();
|
|
||||||
-----
|
|
||||||
|
|
||||||
can be replaced with
|
|
||||||
|
|
||||||
[source,java]
|
|
||||||
-----
|
|
||||||
client.prepareSearch(indices).setSource(new SearchSourceBuilder().size(0).query(query)).get();
|
|
||||||
-----
|
|
||||||
|
|
||||||
==== 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 being 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 equivalent
|
|
||||||
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 MissingQueryBuilder which was deprecated in 2.2.0 is removed. As a replacement use ExistsQueryBuilder
|
|
||||||
inside a mustNot() clause. So instead of using `new ExistsQueryBuilder(name)` now use
|
|
||||||
`new BoolQueryBuilder().mustNot(new ExistsQueryBuilder(name))`.
|
|
||||||
|
|
||||||
==== NotQueryBuilder
|
|
||||||
|
|
||||||
The NotQueryBuilder which was deprecated in 2.1.0 is removed. As a replacement use BoolQueryBuilder
|
|
||||||
with added mustNot() clause. So instead of using `new NotQueryBuilder(filter)` now use
|
|
||||||
`new BoolQueryBuilder().mustNot(filter)`.
|
|
||||||
|
|
||||||
==== 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`.
|
|
||||||
|
|
||||||
==== IdsQueryBuilder
|
|
||||||
|
|
||||||
For simplicity, only one way of adding the ids to the existing list (empty by default) is left: `addIds(String...)`
|
|
||||||
|
|
||||||
==== DocumentAlreadyExistsException removed
|
|
||||||
|
|
||||||
`DocumentAlreadyExistsException` is removed and a `VersionConflictException` is thrown instead (with a better
|
|
||||||
error description). This will influence code that use the `IndexRequest.opType()` or `IndexRequest.create()`
|
|
||||||
to index a document only if it doesn't already exist.
|
|
||||||
|
|
||||||
==== ShapeBuilders
|
|
||||||
|
|
||||||
`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.
|
|
||||||
|
|
||||||
==== RescoreBuilder
|
|
||||||
|
|
||||||
`RecoreBuilder.Rescorer` was merged with `RescoreBuilder`, which now is an abstract superclass. QueryRescoreBuilder currently is its only implementation.
|
|
||||||
|
|
||||||
==== PhraseSuggestionBuilder
|
|
||||||
|
|
||||||
The inner DirectCandidateGenerator class has been moved out to its own class called DirectCandidateGeneratorBuilder.
|
|
||||||
|
|
||||||
==== Elasticsearch will no longer detect logging implementations
|
|
||||||
|
|
||||||
Elasticsearch now logs only to log4j 1.2. Previously if log4j wasn't on the classpath it made some effort to degrade to
|
|
||||||
slf4j or java.util.logging. Now it'll fail to work without the log4j 1.2 api. The log4j-over-slf4j bridge ought to work
|
|
||||||
when using the java client. As should log4j 2's log4j-1.2-api. The Elasticsearch server now only supports log4j as
|
|
||||||
configured by logging.yml and it no longer makes any effort to work if log4j isn't present.
|
|
||||||
|
|
||||||
[[breaking_50_cache_concurrency]]
|
|
||||||
=== Cache concurrency level settings removed
|
|
||||||
|
|
||||||
Two cache concurrency level settings `indices.requests.cache.concurrency_level` and
|
|
||||||
`indices.fielddata.cache.concurrency_level` because they no longer apply to the cache implementation used for the
|
|
||||||
request cache and the field data cache.
|
|
||||||
|
|
||||||
[[breaking_50_non_loopback]]
|
|
||||||
=== Remove bind option of `non_loopback`
|
|
||||||
|
|
||||||
This setting would arbitrarily pick the first interface not marked as loopback. Instead, specify by address
|
|
||||||
scope (e.g. `_local_,_site_` for all loopback and private network addresses) or by explicit interface names,
|
|
||||||
hostnames, or addresses.
|
|
||||||
|
|
||||||
[[breaking_50_thread_pool]]
|
|
||||||
=== Forbid changing of thread pool types
|
|
||||||
|
|
||||||
Previously, <<modules-threadpool,thread pool types>> could be dynamically adjusted. The thread pool type effectively
|
|
||||||
controls the backing queue for the thread pool and modifying this is an expert setting with minimal practical benefits
|
|
||||||
and high risk of being misused. The ability to change the thread pool type for any thread pool has been removed; do note
|
|
||||||
that it is still possible to adjust relevant thread pool parameters for each of the thread pools (e.g., depending on
|
|
||||||
the thread pool type, `keep_alive`, `queue_size`, etc.).
|
|
||||||
|
|
||||||
[[breaking_50_cpu_stats]]
|
|
||||||
=== System CPU stats
|
|
||||||
|
|
||||||
The recent CPU usage (as a percent) has been added to the OS stats
|
|
||||||
reported under the node stats API and the cat nodes API. The breaking
|
|
||||||
change here is that there is a new object in the `os` object in the node
|
|
||||||
stats response. This object is called `cpu` and includes "percent" and
|
|
||||||
`load_average` as fields. This moves the `load_average` field that was
|
|
||||||
previously a top-level field in the `os` object to the `cpu` object. The
|
|
||||||
format of the `load_average` field has changed to an object with fields
|
|
||||||
`1m`, `5m`, and `15m` representing the one-minute, five-minute and
|
|
||||||
fifteen-minute loads respectively. If any of these fields are not present,
|
|
||||||
it indicates that the corresponding value is not available.
|
|
||||||
|
|
||||||
In the cat nodes API response, the `cpu` field is output by default. The
|
|
||||||
previous `load` field has been removed and is replaced by `load_1m`,
|
|
||||||
`load_5m`, and `load_15m` which represent the one-minute, five-minute
|
|
||||||
and fifteen-minute loads respectively. The field will be null if the
|
|
||||||
corresponding value is not available.
|
|
||||||
|
|
||||||
Finally, the API for `org.elasticsearch.monitor.os.OsStats` has
|
|
||||||
changed. The `getLoadAverage` method has been removed. The value for
|
|
||||||
this can now be obtained from `OsStats.Cpu#getLoadAverage` but it is no
|
|
||||||
longer a double and is instead an object encapsulating the one-minute,
|
|
||||||
five-minute and fifteen-minute load averages. Additionally, the recent
|
|
||||||
CPU usage can be obtained from `OsStats.Cpu#getPercent`.
|
|
||||||
|
|
||||||
=== Fields option
|
|
||||||
Only stored fields are retrievable with this option.
|
|
||||||
The fields option won't be able to load non stored fields from _source anymore.
|
|
||||||
|
|
||||||
[[breaking_50_allocation]]
|
|
||||||
=== Primary shard allocation
|
|
||||||
|
|
||||||
Previously, primary shards were only assigned if a quorum of shard copies were found (configurable using
|
|
||||||
`index.recovery.initial_shards`, now deprecated). In case where a primary had only a single replica, quorum was defined
|
|
||||||
to be a single shard. This meant that any shard copy of an index with replication factor 1 could become primary, even it
|
|
||||||
was a stale copy of the data on disk. This is now fixed by using allocation IDs.
|
|
||||||
|
|
||||||
Allocation IDs assign unique identifiers to shard copies. This allows the cluster to differentiate between multiple
|
|
||||||
copies of the same data and track which shards have been active, so that after a cluster restart, shard copies
|
|
||||||
containing only the most recent data can become primaries.
|
|
||||||
|
|
||||||
=== Indices Shard Stores command
|
|
||||||
|
|
||||||
By using allocation IDs instead of version numbers to identify shard copies for primary shard allocation, the former versioning scheme
|
|
||||||
has become obsolete. This is reflected in the indices-shards-stores.html[Indices Shard Stores API]. A new field `allocation_id` replaces the
|
|
||||||
former `version` field in the result of the Indices Shard Stores command. This field is available for all shard copies that have been either
|
|
||||||
created with the current version of Elasticsearch or have been active in a cluster running a current version of Elasticsearch. For legacy
|
|
||||||
shard copies that have not been active in a current version of Elasticsearch, a `legacy_version` field is available instead (equivalent to
|
|
||||||
the former `version` field).
|
|
||||||
|
|
||||||
=== Reroute commands
|
|
||||||
|
|
||||||
The reroute command `allocate` has been split into two distinct commands `allocate_replica` and `allocate_empty_primary`.
|
|
||||||
This was done as we introduced a new `allocate_stale_primary` command. The new `allocate_replica` command corresponds to the
|
|
||||||
old `allocate` command with `allow_primary` set to false. The new `allocate_empty_primary` command corresponds to the old
|
|
||||||
`allocate` command with `allow_primary` set to true.
|
|
||||||
|
|
||||||
==== `index.shared_filesystem.recover_on_any_node` changes
|
|
||||||
|
|
||||||
The behavior of `index.shared_filesystem.recover_on_any_node = true` has been changed. Previously, in the case where no
|
|
||||||
shard copies could be found, an arbitrary node was chosen by potentially ignoring allocation deciders. Now, we take
|
|
||||||
balancing into account but don't assign the shard if the allocation deciders are not satisfied. The behavior has also changed
|
|
||||||
in the case where shard copies can be found. Previously, a node not holding the shard copy was chosen if none of the nodes
|
|
||||||
holding shard copies were satisfying the allocation deciders. Now, the shard will be assigned to a node having a shard copy,
|
|
||||||
even if none of the nodes holding a shard copy satisfy the allocation deciders.
|
|
||||||
|
|
||||||
[[breaking_50_percolator]]
|
|
||||||
=== Percolator
|
|
||||||
|
|
||||||
Adding percolator queries and modifications to existing percolator queries are no longer visible in immediately
|
|
||||||
to the percolator. A refresh is required to run before the changes are visible to the percolator.
|
|
||||||
|
|
||||||
The reason that this has changed is that on newly created indices the percolator automatically indexes the query terms
|
|
||||||
and these query terms are used at percolate time to reduce the amount of queries the percolate API needs evaluate.
|
|
||||||
This optimization didn't work in the percolate API mode where modifications to queries are immediately visible.
|
|
||||||
|
|
||||||
The percolator by defaults sets the `size` option to `10` whereas before this was set to unlimited.
|
|
||||||
|
|
||||||
The percolate api can no longer accept documents that have fields that don't exist in the mapping.
|
|
||||||
|
|
||||||
When percolating an existing document then specifying a document in the source of the percolate request is not allowed
|
|
||||||
any more.
|
|
||||||
|
|
||||||
The percolate api no longer modifies the mappings. Before the percolate api could be used to dynamically introduce new
|
|
||||||
fields to the mappings based on the fields in the document being percolated. This no longer works, because these
|
|
||||||
unmapped fields are not persisted in the mapping.
|
|
||||||
|
|
||||||
Percolator documents are no longer excluded from the search response.
|
|
||||||
|
|
||||||
[[breaking_50_packaging]]
|
|
||||||
=== Packaging
|
|
||||||
|
|
||||||
==== Default logging using systemd (since Elasticsearch 2.2.0)
|
|
||||||
|
|
||||||
In previous versions of Elasticsearch, the default logging
|
|
||||||
configuration routed standard output to /dev/null and standard error to
|
|
||||||
the journal. However, there are often critical error messages at
|
|
||||||
startup that are logged to standard output rather than standard error
|
|
||||||
and these error messages would be lost to the nether. The default has
|
|
||||||
changed to now route standard output to the journal and standard error
|
|
||||||
to inherit this setting (these are the defaults for systemd). These
|
|
||||||
settings can be modified by editing the elasticsearch.service file.
|
|
||||||
|
|
||||||
==== Longer startup times
|
|
||||||
|
|
||||||
In Elasticsearch 5.0.0 the `-XX:+AlwaysPreTouch` flag has been added to the JVM
|
|
||||||
startup options. This option touches all memory pages used by the JVM heap
|
|
||||||
during initialization of the HotSpot VM to reduce the chance of having to commit
|
|
||||||
a memory page during GC time. This will increase the startup time of
|
|
||||||
Elasticsearch as well as increasing the initial resident memory usage of the
|
|
||||||
Java process.
|
|
||||||
|
|
||||||
[[breaking_50_scripting]]
|
|
||||||
=== Scripting
|
|
||||||
|
|
||||||
==== Script mode settings
|
|
||||||
|
|
||||||
Previously script mode settings (e.g., "script.inline: true",
|
|
||||||
"script.engine.groovy.inline.aggs: false", etc.) accepted the values
|
|
||||||
`on`, `true`, `1`, and `yes` for enabling a scripting mode, and the
|
|
||||||
values `off`, `false`, `0`, and `no` for disabling a scripting mode.
|
|
||||||
The variants `on`, `1`, and `yes ` for enabling and `off`, `0`,
|
|
||||||
and `no` for disabling are no longer supported.
|
|
||||||
|
|
||||||
==== Groovy dependencies
|
|
||||||
|
|
||||||
In previous versions of Elasticsearch, the Groovy scripting capabilities
|
|
||||||
depended on the `org.codehaus.groovy:groovy-all` artifact. In addition
|
|
||||||
to pulling in the Groovy language, this pulls in a very large set of
|
|
||||||
functionality, none of which is needed for scripting within
|
|
||||||
Elasticsearch. Aside from the inherent difficulties in managing such a
|
|
||||||
large set of dependencies, this also increases the surface area for
|
|
||||||
security issues. This dependency has been reduced to the core Groovy
|
|
||||||
language `org.codehaus.groovy:groovy` artifact.
|
|
||||||
|
|
||||||
[[breaking_50_term_vectors]]
|
|
||||||
=== Term vectors
|
|
||||||
|
|
||||||
The term vectors APIs no longer persist unmapped fields in the mappings.
|
|
||||||
|
|
||||||
The `dfs` parameter has been removed completely, term vectors don't support
|
|
||||||
distributed document frequencies anymore.
|
|
||||||
|
|
||||||
[[breaking_50_security]]
|
|
||||||
=== Security
|
|
||||||
|
|
||||||
The option to disable the security manager `--security.manager.enabled` has been removed. In order to grant special
|
|
||||||
permissions to elasticsearch users must tweak the local Java Security Policy.
|
|
||||||
|
|
||||||
[[breaking_50_snapshot_restore]]
|
|
||||||
=== Snapshot/Restore
|
|
||||||
|
|
||||||
==== Closing / deleting indices while running snapshot
|
|
||||||
|
|
||||||
In previous versions of Elasticsearch, closing or deleting an index during a full snapshot would make the snapshot fail. This is now changed
|
|
||||||
by failing the close/delete index request instead. The behavior for partial snapshots remains unchanged: Closing or deleting an index during
|
|
||||||
a partial snapshot is still possible. The snapshot result is then marked as partial.
|
|
||||||
|
|
|
@ -0,0 +1,54 @@
|
||||||
|
[[breaking_50_allocation]]
|
||||||
|
=== Allocation changes
|
||||||
|
|
||||||
|
==== Primary shard allocation
|
||||||
|
|
||||||
|
Previously, primary shards were only assigned if a quorum of shard copies were
|
||||||
|
found (configurable using `index.recovery.initial_shards`, now deprecated). In
|
||||||
|
case where a primary had only a single replica, quorum was defined to be a
|
||||||
|
single shard. This meant that any shard copy of an index with replication
|
||||||
|
factor 1 could become primary, even it was a stale copy of the data on disk.
|
||||||
|
This is now fixed thanks to shard allocation IDs.
|
||||||
|
|
||||||
|
Allocation IDs assign unique identifiers to shard copies. This allows the
|
||||||
|
cluster to differentiate between multiple copies of the same data and track
|
||||||
|
which shards have been active so that, after a cluster restart, only shard
|
||||||
|
copies containing the most recent data can become primaries.
|
||||||
|
|
||||||
|
==== Indices Shard Stores command
|
||||||
|
|
||||||
|
By using allocation IDs instead of version numbers to identify shard copies
|
||||||
|
for primary shard allocation, the former versioning scheme has become
|
||||||
|
obsolete. This is reflected in the
|
||||||
|
<<indices-shards-stores,Indices Shard Stores API>>.
|
||||||
|
|
||||||
|
A new `allocation_id` field replaces the former `version` field in the result
|
||||||
|
of the Indices Shard Stores command. This field is available for all shard
|
||||||
|
copies that have been either created with the current version of Elasticsearch
|
||||||
|
or have been active in a cluster running a current version of Elasticsearch.
|
||||||
|
For legacy shard copies that have not been active in a current version of
|
||||||
|
Elasticsearch, a `legacy_version` field is available instead (equivalent to
|
||||||
|
the former `version` field).
|
||||||
|
|
||||||
|
==== Reroute commands
|
||||||
|
|
||||||
|
The reroute command `allocate` has been split into two distinct commands
|
||||||
|
`allocate_replica` and `allocate_empty_primary`. This was done as we
|
||||||
|
introduced a new `allocate_stale_primary` command. The new `allocate_replica`
|
||||||
|
command corresponds to the old `allocate` command with `allow_primary` set to
|
||||||
|
false. The new `allocate_empty_primary` command corresponds to the old
|
||||||
|
`allocate` command with `allow_primary` set to true.
|
||||||
|
|
||||||
|
==== `index.shared_filesystem.recover_on_any_node` changes
|
||||||
|
|
||||||
|
The behavior of `index.shared_filesystem.recover_on_any_node: true` has been
|
||||||
|
changed. Previously, in the case where no shard copies could be found, an
|
||||||
|
arbitrary node was chosen by potentially ignoring allocation deciders. Now, we
|
||||||
|
take balancing into account but don't assign the shard if the allocation
|
||||||
|
deciders are not satisfied.
|
||||||
|
|
||||||
|
The behavior has also changed in the case where shard copies can be found.
|
||||||
|
Previously, a node not holding the shard copy was chosen if none of the nodes
|
||||||
|
holding shard copies were satisfying the allocation deciders. Now, the shard
|
||||||
|
will be assigned to a node having a shard copy, even if none of the nodes
|
||||||
|
holding a shard copy satisfy the allocation deciders.
|
|
@ -0,0 +1,33 @@
|
||||||
|
[[breaking_50_cat_api]]
|
||||||
|
=== CAT API changes
|
||||||
|
|
||||||
|
==== Use Accept header for specifying response media type
|
||||||
|
|
||||||
|
Previous versions of Elasticsearch accepted the Content-type header
|
||||||
|
field for controlling the media type of the response in the cat API.
|
||||||
|
This is in opposition to the HTTP spec which specifies the Accept
|
||||||
|
header field for this purpose. Elasticsearch now uses the Accept header
|
||||||
|
field and support for using the Content-Type header field for this
|
||||||
|
purpose has been removed.
|
||||||
|
|
||||||
|
==== Host field removed from the cat nodes API
|
||||||
|
|
||||||
|
The `host` field has been removed from the cat nodes API as its value
|
||||||
|
is always equal to the `ip` field. The `name` field is available in the
|
||||||
|
cat nodes API and should be used instead of the `host` field.
|
||||||
|
|
||||||
|
==== Changes to cat recovery API
|
||||||
|
|
||||||
|
The fields `bytes_recovered` and `files_recovered` have been added to
|
||||||
|
the cat recovery API. These fields, respectively, indicate the total
|
||||||
|
number of bytes and files that have been recovered.
|
||||||
|
|
||||||
|
The fields `total_files` and `total_bytes` have been renamed to
|
||||||
|
`files_total` and `bytes_total`, respectively.
|
||||||
|
|
||||||
|
Additionally, the field `translog` has been renamed to
|
||||||
|
`translog_ops_recovered`, the field `translog_total` to
|
||||||
|
`translog_ops` and the field `translog_percent` to
|
||||||
|
`translog_ops_percent`. The short aliases for these fields are `tor`,
|
||||||
|
`to`, and `top`, respectively.
|
||||||
|
|
|
@ -0,0 +1,48 @@
|
||||||
|
[[breaking_50_index_apis]]
|
||||||
|
=== Index APIs changes
|
||||||
|
|
||||||
|
==== Closing / deleting indices while running snapshot
|
||||||
|
|
||||||
|
In previous versions of Elasticsearch, closing or deleting an index during a
|
||||||
|
full snapshot would make the snapshot fail. In 5.0, the close/delete index
|
||||||
|
request will fail instead. The behavior for partial snapshots remains
|
||||||
|
unchanged: Closing or deleting an index during a partial snapshot is still
|
||||||
|
possible. The snapshot result is then marked as partial.
|
||||||
|
|
||||||
|
==== Warmers
|
||||||
|
|
||||||
|
Thanks to several changes like doc values by default and disk-based norms,
|
||||||
|
warmers are no longer useful. As a consequence, warmers and the warmer API
|
||||||
|
have been removed: it is no longer possible to register queries that will run
|
||||||
|
before a new IndexSearcher is published.
|
||||||
|
|
||||||
|
Don't worry if you have warmers defined on your indices, they will simply be
|
||||||
|
ignored when upgrading to 5.0.
|
||||||
|
|
||||||
|
==== System CPU stats
|
||||||
|
|
||||||
|
The recent CPU usage (as a percent) has been added to the OS stats
|
||||||
|
reported under the node stats API and the cat nodes API. The breaking
|
||||||
|
change here is that there is a new object in the `os` object in the node
|
||||||
|
stats response. This object is called `cpu` and includes percent` and
|
||||||
|
`load_average` as fields. This moves the `load_average` field that was
|
||||||
|
previously a top-level field in the `os` object to the `cpu` object. The
|
||||||
|
format of the `load_average` field has changed to an object with fields
|
||||||
|
`1m`, `5m`, and `15m` representing the one-minute, five-minute and
|
||||||
|
fifteen-minute loads respectively. If any of these fields are not present,
|
||||||
|
it indicates that the corresponding value is not available.
|
||||||
|
|
||||||
|
In the cat nodes API response, the `cpu` field is output by default. The
|
||||||
|
previous `load` field has been removed and is replaced by `load_1m`,
|
||||||
|
`load_5m`, and `load_15m` which represent the one-minute, five-minute
|
||||||
|
and fifteen-minute loads respectively. The field will be null if the
|
||||||
|
corresponding value is not available.
|
||||||
|
|
||||||
|
Finally, the API for `org.elasticsearch.monitor.os.OsStats` has
|
||||||
|
changed. The `getLoadAverage` method has been removed. The value for
|
||||||
|
this can now be obtained from `OsStats.Cpu#getLoadAverage` but it is no
|
||||||
|
longer a double and is instead an object encapsulating the one-minute,
|
||||||
|
five-minute and fifteen-minute load averages. Additionally, the recent
|
||||||
|
CPU usage can be obtained from `OsStats.Cpu#getPercent`.
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,213 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
[[breaking_50_java_api_changes]]
|
||||||
|
=== Java API changes
|
||||||
|
|
||||||
|
==== Count api has been removed
|
||||||
|
|
||||||
|
The deprecated count api has been removed from the Java api, use the search api instead and set size to 0.
|
||||||
|
|
||||||
|
The following call
|
||||||
|
|
||||||
|
[source,java]
|
||||||
|
-----
|
||||||
|
client.prepareCount(indices).setQuery(query).get();
|
||||||
|
-----
|
||||||
|
|
||||||
|
can be replaced with
|
||||||
|
|
||||||
|
[source,java]
|
||||||
|
-----
|
||||||
|
client.prepareSearch(indices).setSource(new SearchSourceBuilder().size(0).query(query)).get();
|
||||||
|
-----
|
||||||
|
|
||||||
|
==== Elasticsearch will no longer detect logging implementations
|
||||||
|
|
||||||
|
Elasticsearch now logs only to log4j 1.2. Previously if log4j wasn't on the
|
||||||
|
classpath it made some effort to degrade to slf4j or java.util.logging. Now it
|
||||||
|
will fail to work without the log4j 1.2 api. The log4j-over-slf4j bridge ought
|
||||||
|
to work when using the java client, as should log4j 2's log4j-1.2-api. The
|
||||||
|
Elasticsearch server now only supports log4j as configured by `logging.yml`
|
||||||
|
and will fail if log4j isn't present.
|
||||||
|
|
||||||
|
==== Groovy dependencies
|
||||||
|
|
||||||
|
In previous versions of Elasticsearch, the Groovy scripting capabilities
|
||||||
|
depended on the `org.codehaus.groovy:groovy-all` artifact. In addition
|
||||||
|
to pulling in the Groovy language, this pulls in a very large set of
|
||||||
|
functionality, none of which is needed for scripting within
|
||||||
|
Elasticsearch. Aside from the inherent difficulties in managing such a
|
||||||
|
large set of dependencies, this also increases the surface area for
|
||||||
|
security issues. This dependency has been reduced to the core Groovy
|
||||||
|
language `org.codehaus.groovy:groovy` artifact.
|
||||||
|
|
||||||
|
==== DocumentAlreadyExistsException removed
|
||||||
|
|
||||||
|
`DocumentAlreadyExistsException` is removed and a `VersionConflictException` is thrown instead (with a better
|
||||||
|
error description). This will influence code that use the `IndexRequest.opType()` or `IndexRequest.create()`
|
||||||
|
to index a document only if it doesn't already exist.
|
||||||
|
|
||||||
|
==== Changes to Query Builders
|
||||||
|
|
||||||
|
===== 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 being 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 equivalent
|
||||||
|
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 MissingQueryBuilder which was deprecated in 2.2.0 is removed. As a replacement use ExistsQueryBuilder
|
||||||
|
inside a mustNot() clause. So instead of using `new ExistsQueryBuilder(name)` now use
|
||||||
|
`new BoolQueryBuilder().mustNot(new ExistsQueryBuilder(name))`.
|
||||||
|
|
||||||
|
===== NotQueryBuilder
|
||||||
|
|
||||||
|
The NotQueryBuilder which was deprecated in 2.1.0 is removed. As a replacement use BoolQueryBuilder
|
||||||
|
with added mustNot() clause. So instead of using `new NotQueryBuilder(filter)` now use
|
||||||
|
`new BoolQueryBuilder().mustNot(filter)`.
|
||||||
|
|
||||||
|
===== 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`.
|
||||||
|
|
||||||
|
===== IdsQueryBuilder
|
||||||
|
|
||||||
|
For simplicity, only one way of adding the ids to the existing list (empty by default) is left: `addIds(String...)`
|
||||||
|
|
||||||
|
===== ShapeBuilders
|
||||||
|
|
||||||
|
`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.
|
||||||
|
|
||||||
|
===== RescoreBuilder
|
||||||
|
|
||||||
|
`RecoreBuilder.Rescorer` was merged with `RescoreBuilder`, which now is an abstract superclass. QueryRescoreBuilder currently is its only implementation.
|
||||||
|
|
||||||
|
===== PhraseSuggestionBuilder
|
||||||
|
|
||||||
|
The inner DirectCandidateGenerator class has been moved out to its own class called DirectCandidateGeneratorBuilder.
|
||||||
|
|
|
@ -0,0 +1,82 @@
|
||||||
|
[[breaking_50_mapping_changes]]
|
||||||
|
=== Mapping changes
|
||||||
|
|
||||||
|
==== `string` fields replaced by `text`/`keyword` fields
|
||||||
|
|
||||||
|
The `string` field datatype has been replaced by the `text` field for full
|
||||||
|
text analyzed content, and the `keyword` field for not-analyzed exact string
|
||||||
|
values. For backwards compatibility purposes, during the 5.x series:
|
||||||
|
|
||||||
|
* `string` fields on pre-5.0 indices will function as before.
|
||||||
|
* New `string` fields can be added to pre-5.0 indices as before.
|
||||||
|
* `text` and `keyword` fields can also be added to pre-5.0 indices.
|
||||||
|
* When adding a `string` field to a new index, the field mapping will be
|
||||||
|
rewritten as a `text` or `keyword` field if possible, otherwise
|
||||||
|
an exception will be thrown. Certain configurations that were possible
|
||||||
|
with `string` fields are no longer possible with `text`/`keyword` fields
|
||||||
|
such as enabling `term_vectors` on a not-analyzed `keyword` field.
|
||||||
|
|
||||||
|
==== `index` property
|
||||||
|
|
||||||
|
On all field datatypes (except for the deprecated `string` field), the `index`
|
||||||
|
property now only accepts `true`/`false` instead of `not_analyzed`/`no`. The
|
||||||
|
`string` field still accepts `analyzed`/`not_analyzed`/`no`.
|
||||||
|
|
||||||
|
==== Doc values on unindexed fields
|
||||||
|
|
||||||
|
Previously, setting a field to `index:no` would also disable doc-values. Now,
|
||||||
|
doc-values are always enabled on numeric and boolean fields unless
|
||||||
|
`doc_values` is set to `false`.
|
||||||
|
|
||||||
|
==== Floating points use `float` instead of `double`
|
||||||
|
|
||||||
|
When dynamically mapping a field containing a floating point number, the field
|
||||||
|
now defaults to using `float` instead of `double`. The reasoning is that
|
||||||
|
floats should be more than enough for most cases but would decrease storage
|
||||||
|
requirements significantly.
|
||||||
|
|
||||||
|
==== `fielddata.format`
|
||||||
|
|
||||||
|
Setting `fielddata.format: doc_values` in the mappings used to implicitly
|
||||||
|
enable doc-values on a field. This no longer works: the only way to enable or
|
||||||
|
disable doc-values is by using the `doc_values` property of mappings.
|
||||||
|
|
||||||
|
==== Source-transform removed
|
||||||
|
|
||||||
|
The source `transform` feature has been removed. Instead, use an ingest pipeline
|
||||||
|
|
||||||
|
==== `_parent` field no longer indexed
|
||||||
|
|
||||||
|
The join between parent and child documents no longer relies on indexed fields
|
||||||
|
and therefore from 5.0.0 onwards the `_parent` field is no longer indexed. In
|
||||||
|
order to find documents that referrer to a specific parent id the new
|
||||||
|
`parent_id` query can be used. The GET response and hits inside the search
|
||||||
|
response still include the parent id under the `_parent` key.
|
||||||
|
|
||||||
|
==== Source `format` option
|
||||||
|
|
||||||
|
The `_source` mapping no longer supports the `format` option. It will still be
|
||||||
|
accepted for indices created before the upgrade to 5.0 for backwards
|
||||||
|
compatibility, but it will have no effect. Indices created on or after 5.0
|
||||||
|
will reject this option.
|
||||||
|
|
||||||
|
==== Object notation
|
||||||
|
|
||||||
|
Core types no longer support the object notation, which was used to provide
|
||||||
|
per document boosts as follows:
|
||||||
|
|
||||||
|
[source,json]
|
||||||
|
---------------
|
||||||
|
{
|
||||||
|
"value": "field_value",
|
||||||
|
"boost": 42
|
||||||
|
}
|
||||||
|
---------------
|
||||||
|
|
||||||
|
==== Boost accuracy for queries on `_all`
|
||||||
|
|
||||||
|
Per-field boosts on the `_all` are now compressed into a single byte instead
|
||||||
|
of the 4 bytes used previously. While this will make the index much more
|
||||||
|
space-efficient, it also means that index time boosts will be less accurately
|
||||||
|
encoded.
|
||||||
|
|
|
@ -0,0 +1,24 @@
|
||||||
|
[[breaking_50_packaging]]
|
||||||
|
=== Packaging
|
||||||
|
|
||||||
|
==== Default logging using systemd (since Elasticsearch 2.2.0)
|
||||||
|
|
||||||
|
In previous versions of Elasticsearch, the default logging
|
||||||
|
configuration routed standard output to /dev/null and standard error to
|
||||||
|
the journal. However, there are often critical error messages at
|
||||||
|
startup that are logged to standard output rather than standard error
|
||||||
|
and these error messages would be lost to the nether. The default has
|
||||||
|
changed to now route standard output to the journal and standard error
|
||||||
|
to inherit this setting (these are the defaults for systemd). These
|
||||||
|
settings can be modified by editing the elasticsearch.service file.
|
||||||
|
|
||||||
|
==== Longer startup times
|
||||||
|
|
||||||
|
In Elasticsearch 5.0.0 the `-XX:+AlwaysPreTouch` flag has been added to the JVM
|
||||||
|
startup options. This option touches all memory pages used by the JVM heap
|
||||||
|
during initialization of the HotSpot VM to reduce the chance of having to commit
|
||||||
|
a memory page during GC time. This will increase the startup time of
|
||||||
|
Elasticsearch as well as increasing the initial resident memory usage of the
|
||||||
|
Java process.
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,41 @@
|
||||||
|
[[breaking_50_percolator]]
|
||||||
|
=== Percolator changes
|
||||||
|
|
||||||
|
==== Percolator is near-real time
|
||||||
|
|
||||||
|
Previously percolators were activated in real-time, i.e. as soon as they were
|
||||||
|
indexed. Now, changes to the percolator query are visible in near-real time,
|
||||||
|
as soon as the index has been refreshed. This change was required because, in
|
||||||
|
indices created from 5.0 onwards, the terms used in a percolator query are
|
||||||
|
automatically indexed to allow for more efficient query selection during
|
||||||
|
percolation.
|
||||||
|
|
||||||
|
==== Percolator mapping
|
||||||
|
|
||||||
|
The percolate API can no longer accept documents that reference fields that
|
||||||
|
don't already exist in the mapping.
|
||||||
|
|
||||||
|
The percolate API no longer modifies the mappings. Before the percolate API
|
||||||
|
could be used to dynamically introduce new fields to the mappings based on the
|
||||||
|
fields in the document being percolated. This no longer works, because these
|
||||||
|
unmapped fields are not persisted in the mapping.
|
||||||
|
|
||||||
|
==== Percolator documents returned by search
|
||||||
|
|
||||||
|
Documents with the `.percolate` type were previously excluded from the search
|
||||||
|
response, unless the `.percolate` type was specified explicitly in the search
|
||||||
|
request. Now, percolator documents are treated in the same way as any other
|
||||||
|
document and are returned by search requests.
|
||||||
|
|
||||||
|
==== Percolator `size` default
|
||||||
|
|
||||||
|
The percolator by default sets the `size` option to `10` whereas before this
|
||||||
|
was unlimited.
|
||||||
|
|
||||||
|
==== Percolate API
|
||||||
|
|
||||||
|
When percolating an existing document then specifying a document in the source
|
||||||
|
of the percolate request is not allowed any more.
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,99 @@
|
||||||
|
[[breaking_50_plugins]]
|
||||||
|
=== Plugin changes
|
||||||
|
|
||||||
|
The command `bin/plugin` has been renamed to `bin/elasticsearch-plugin`. The
|
||||||
|
structure of the plugin ZIP archive has changed. All the plugin files must be
|
||||||
|
contained in a top-level directory called `elasticsearch`. If you use the
|
||||||
|
gradle build, this structure is automatically generated.
|
||||||
|
|
||||||
|
==== Site plugins removed
|
||||||
|
|
||||||
|
Site plugins have been removed. Site plugins should be reimplemented as Kibana
|
||||||
|
plugins.
|
||||||
|
|
||||||
|
==== Multicast plugin removed
|
||||||
|
|
||||||
|
Multicast has been removed. Use unicast discovery, or one of the cloud
|
||||||
|
discovery plugins.
|
||||||
|
|
||||||
|
==== Plugins with custom query implementations
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
==== Cloud AWS plugin changes
|
||||||
|
|
||||||
|
Cloud AWS plugin has been split in two plugins:
|
||||||
|
|
||||||
|
* {plugins}/discovery-ec2.html[Discovery EC2 plugin]
|
||||||
|
* {plugins}/repository-s3.html[Repository S3 plugin]
|
||||||
|
|
||||||
|
Proxy settings for both plugins have been renamed:
|
||||||
|
|
||||||
|
* from `cloud.aws.proxy_host` to `cloud.aws.proxy.host`
|
||||||
|
* from `cloud.aws.ec2.proxy_host` to `cloud.aws.ec2.proxy.host`
|
||||||
|
* from `cloud.aws.s3.proxy_host` to `cloud.aws.s3.proxy.host`
|
||||||
|
* from `cloud.aws.proxy_port` to `cloud.aws.proxy.port`
|
||||||
|
* from `cloud.aws.ec2.proxy_port` to `cloud.aws.ec2.proxy.port`
|
||||||
|
* from `cloud.aws.s3.proxy_port` to `cloud.aws.s3.proxy.port`
|
||||||
|
|
||||||
|
==== Cloud Azure plugin changes
|
||||||
|
|
||||||
|
Cloud Azure plugin has been split in three plugins:
|
||||||
|
|
||||||
|
* {plugins}/discovery-azure.html[Discovery Azure plugin]
|
||||||
|
* {plugins}/repository-azure.html[Repository Azure plugin]
|
||||||
|
* {plugins}/store-smb.html[Store SMB plugin]
|
||||||
|
|
||||||
|
If you were using the `cloud-azure` plugin for snapshot and restore, you had in `elasticsearch.yml`:
|
||||||
|
|
||||||
|
[source,yaml]
|
||||||
|
-----
|
||||||
|
cloud:
|
||||||
|
azure:
|
||||||
|
storage:
|
||||||
|
account: your_azure_storage_account
|
||||||
|
key: your_azure_storage_key
|
||||||
|
-----
|
||||||
|
|
||||||
|
You need to give a unique id to the storage details now as you can define multiple storage accounts:
|
||||||
|
|
||||||
|
[source,yaml]
|
||||||
|
-----
|
||||||
|
cloud:
|
||||||
|
azure:
|
||||||
|
storage:
|
||||||
|
my_account:
|
||||||
|
account: your_azure_storage_account
|
||||||
|
key: your_azure_storage_key
|
||||||
|
-----
|
||||||
|
|
||||||
|
|
||||||
|
==== Cloud GCE plugin changes
|
||||||
|
|
||||||
|
Cloud GCE plugin has been renamed to {plugins}/discovery-gce.html[Discovery GCE plugin].
|
||||||
|
|
||||||
|
|
||||||
|
==== Mapper Attachments plugin deprecated
|
||||||
|
|
||||||
|
Mapper attachments has been deprecated. Users should use now the {plugins}/ingest-attachment.html[`ingest-attachment`]
|
||||||
|
plugin.
|
||||||
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
|
||||||
|
[[breaking_50_rest_api_changes]]
|
||||||
|
=== REST API changes
|
||||||
|
|
||||||
|
==== id values longer than 512 bytes are rejected
|
||||||
|
|
||||||
|
When specifying an `_id` value longer than 512 bytes, the request will be
|
||||||
|
rejected.
|
||||||
|
|
||||||
|
==== `/_optimize` endpoint removed
|
||||||
|
|
||||||
|
The deprecated `/_optimize` endpoint has been removed. The `/_forcemerge`
|
||||||
|
endpoint should be used in lieu of optimize.
|
||||||
|
|
||||||
|
The `GET` HTTP verb for `/_forcemerge` is no longer supported, please use the
|
||||||
|
`POST` HTTP verb.
|
||||||
|
|
|
@ -0,0 +1,141 @@
|
||||||
|
[[breaking_50_search_changes]]
|
||||||
|
=== Search and Query DSL changes
|
||||||
|
|
||||||
|
==== `search_type`
|
||||||
|
|
||||||
|
===== `search_type=count` removed
|
||||||
|
|
||||||
|
The `count` search type was deprecated since version 2.0.0 and is now removed.
|
||||||
|
In order to get the same benefits, you just need to set the value of the `size`
|
||||||
|
parameter to `0`.
|
||||||
|
|
||||||
|
For instance, the following request:
|
||||||
|
|
||||||
|
[source,sh]
|
||||||
|
---------------
|
||||||
|
GET /my_index/_search?search_type=count
|
||||||
|
{
|
||||||
|
"aggs": {
|
||||||
|
"my_terms": {
|
||||||
|
"terms": {
|
||||||
|
"field": "foo"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
---------------
|
||||||
|
|
||||||
|
can be replaced with:
|
||||||
|
|
||||||
|
[source,sh]
|
||||||
|
---------------
|
||||||
|
GET /my_index/_search
|
||||||
|
{
|
||||||
|
"size": 0,
|
||||||
|
"aggs": {
|
||||||
|
"my_terms": {
|
||||||
|
"terms": {
|
||||||
|
"field": "foo"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
---------------
|
||||||
|
|
||||||
|
===== `search_type=scan` removed
|
||||||
|
|
||||||
|
The `scan` search type was deprecated since version 2.1.0 and is now removed.
|
||||||
|
All benefits from this search type can now be achieved by doing a scroll
|
||||||
|
request that sorts documents in `_doc` order, for instance:
|
||||||
|
|
||||||
|
[source,sh]
|
||||||
|
---------------
|
||||||
|
GET /my_index/_search?scroll=2m
|
||||||
|
{
|
||||||
|
"sort": [
|
||||||
|
"_doc"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
---------------
|
||||||
|
|
||||||
|
Scroll requests sorted by `_doc` have been optimized to more efficiently resume
|
||||||
|
from where the previous request stopped, so this will have the same performance
|
||||||
|
characteristics as the former `scan` search type.
|
||||||
|
|
||||||
|
==== `fields` parameter
|
||||||
|
|
||||||
|
The `fields` parameter used to try to retrieve field values from stored
|
||||||
|
fields, and fall back to extracting from the `_source` if a field is not
|
||||||
|
marked as stored. Now, the `fields` parameter will only return stored fields
|
||||||
|
-- it will no longer extract values from the `_source`.
|
||||||
|
|
||||||
|
==== search-exists API removed
|
||||||
|
|
||||||
|
The search exists api has been removed in favour of using the search api with
|
||||||
|
`size` set to `0` and `terminate_after` set to `1`.
|
||||||
|
|
||||||
|
|
||||||
|
==== Deprecated queries removed
|
||||||
|
|
||||||
|
The following deprecated queries have been removed:
|
||||||
|
|
||||||
|
`filtered`:: Use `bool` query instead, which supports `filter` clauses too.
|
||||||
|
`and`:: Use `must` clauses in a `bool` query instead.
|
||||||
|
`or`:: Use `should` clauses in a `bool` query instead.
|
||||||
|
`limit`:: Use the `terminate_after` parameter instead.
|
||||||
|
`fquery`:: Is obsolete after filters and queries have been merged.
|
||||||
|
`query`:: Is obsolete after filters and queries have been merged.
|
||||||
|
`query_binary`:: Was undocumented and has been removed.
|
||||||
|
`filter_binary`:: Was undocumented and has been removed.
|
||||||
|
|
||||||
|
|
||||||
|
==== Changes to queries
|
||||||
|
|
||||||
|
* Removed support for the deprecated `min_similarity` parameter in `fuzzy
|
||||||
|
query`, in favour of `fuzziness`.
|
||||||
|
|
||||||
|
* Removed support for the deprecated `fuzzy_min_sim` parameter in
|
||||||
|
`query_string` query, in favour of `fuzziness`.
|
||||||
|
|
||||||
|
* Removed support for the deprecated `edit_distance` parameter in completion
|
||||||
|
suggester, in favour of `fuzziness`.
|
||||||
|
|
||||||
|
* Removed support for the deprecated `filter` and `no_match_filter` fields in `indices` query,
|
||||||
|
in favour of `query` and `no_match_query`.
|
||||||
|
|
||||||
|
* Removed support for the deprecated `filter` fields in `nested` query, in favour of `query`.
|
||||||
|
|
||||||
|
* Removed support for the deprecated `minimum_should_match` and
|
||||||
|
`disable_coord` in `terms` query, use `bool` query instead. Also removed
|
||||||
|
support for the deprecated `execution` parameter.
|
||||||
|
|
||||||
|
* Removed support for the top level `filter` element in `function_score` query, replaced by `query`.
|
||||||
|
|
||||||
|
* The `collect_payloads` parameter of the `span_near` query has been deprecated. Payloads will be loaded when needed.
|
||||||
|
|
||||||
|
* The `score_type` parameter to the `has_child` and `has_parent` queries has been removed in favour of `score_mode`.
|
||||||
|
Also, the `sum` score mode has been removed in favour of the `total` mode.
|
||||||
|
|
||||||
|
* When the `max_children` parameter was set to `0` on the `has_child` query
|
||||||
|
then there was no upper limit on how many child documents were allowed to
|
||||||
|
match. Now, `0` really means that zero child documents are allowed. If no
|
||||||
|
upper limit is needed then the `max_children` parameter shouldn't be specified
|
||||||
|
at all.
|
||||||
|
|
||||||
|
|
||||||
|
==== Top level `filter` parameter
|
||||||
|
|
||||||
|
Removed support for the deprecated top level `filter` in the search api,
|
||||||
|
replaced by `post_filter`.
|
||||||
|
|
||||||
|
==== Highlighters
|
||||||
|
|
||||||
|
Removed support for multiple highlighter names, the only supported ones are:
|
||||||
|
`plain`, `fvh` and `postings`.
|
||||||
|
|
||||||
|
==== Term vectors API
|
||||||
|
|
||||||
|
The term vectors APIs no longer persist unmapped fields in the mappings.
|
||||||
|
|
||||||
|
The `dfs` parameter to the term vectors API has been removed completely. Term
|
||||||
|
vectors don't support distributed document frequencies anymore.
|
|
@ -0,0 +1,174 @@
|
||||||
|
[[breaking_50_settings_changes]]
|
||||||
|
=== Settings changes
|
||||||
|
|
||||||
|
From Elasticsearch 5.0 on all settings are validated before they are applied.
|
||||||
|
Node level and default index level settings are validated on node startup,
|
||||||
|
dynamic cluster and index setting are validated before they are updated/added
|
||||||
|
to the cluster state.
|
||||||
|
|
||||||
|
Every setting must be a *known* setting. All settings must have been
|
||||||
|
registered with the node or transport client they are used with. This implies
|
||||||
|
that plugins that define custom settings must register all of their settings
|
||||||
|
during plugin loading using the `SettingsModule#registerSettings(Setting)`
|
||||||
|
method.
|
||||||
|
|
||||||
|
==== Node settings
|
||||||
|
|
||||||
|
The `name` setting has been removed and is replaced by `node.name`. Usage of
|
||||||
|
`-Dname=some_node_name` is not supported anymore.
|
||||||
|
|
||||||
|
==== Transport Settings
|
||||||
|
|
||||||
|
All settings with a `netty` infix have been replaced by their already existing
|
||||||
|
`transport` synonyms. For instance `transport.netty.bind_host` is no longer
|
||||||
|
supported and should be replaced by the superseding setting
|
||||||
|
`transport.bind_host`.
|
||||||
|
|
||||||
|
==== Script mode settings
|
||||||
|
|
||||||
|
Previously script mode settings (e.g., "script.inline: true",
|
||||||
|
"script.engine.groovy.inline.aggs: false", etc.) accepted the values
|
||||||
|
`on`, `true`, `1`, and `yes` for enabling a scripting mode, and the
|
||||||
|
values `off`, `false`, `0`, and `no` for disabling a scripting mode.
|
||||||
|
The variants `on`, `1`, and `yes ` for enabling and `off`, `0`,
|
||||||
|
and `no` for disabling are no longer supported.
|
||||||
|
|
||||||
|
|
||||||
|
==== Security manager settings
|
||||||
|
|
||||||
|
The option to disable the security manager `security.manager.enabled` has been
|
||||||
|
removed. In order to grant special permissions to elasticsearch users must
|
||||||
|
edit the local Java Security Policy.
|
||||||
|
|
||||||
|
==== Network settings
|
||||||
|
|
||||||
|
The `_non_loopback_` value for settings like `network.host` would arbitrarily
|
||||||
|
pick the first interface not marked as loopback. Instead, specify by address
|
||||||
|
scope (e.g. `_local_,_site_` for all loopback and private network addresses)
|
||||||
|
or by explicit interface names, hostnames, or addresses.
|
||||||
|
|
||||||
|
==== Forbid changing of thread pool types
|
||||||
|
|
||||||
|
Previously, <<modules-threadpool,thread pool types>> could be dynamically
|
||||||
|
adjusted. The thread pool type effectively controls the backing queue for the
|
||||||
|
thread pool and modifying this is an expert setting with minimal practical
|
||||||
|
benefits and high risk of being misused. The ability to change the thread pool
|
||||||
|
type for any thread pool has been removed. It is still possible to adjust
|
||||||
|
relevant thread pool parameters for each of the thread pools (e.g., depending
|
||||||
|
on the thread pool type, `keep_alive`, `queue_size`, etc.).
|
||||||
|
|
||||||
|
|
||||||
|
==== Analysis settings
|
||||||
|
|
||||||
|
The `index.analysis.analyzer.default_index` analyzer is not supported anymore.
|
||||||
|
If you wish to change the analyzer to use for indexing, change the
|
||||||
|
`index.analysis.analyzer.default` analyzer instead.
|
||||||
|
|
||||||
|
==== Ping timeout settings
|
||||||
|
|
||||||
|
Previously, there were three settings for the ping timeout:
|
||||||
|
`discovery.zen.initial_ping_timeout`, `discovery.zen.ping.timeout` and
|
||||||
|
`discovery.zen.ping_timeout`. The former two have been removed and the only
|
||||||
|
setting key for the ping timeout is now `discovery.zen.ping_timeout`. The
|
||||||
|
default value for ping timeouts remains at three seconds.
|
||||||
|
|
||||||
|
==== Recovery settings
|
||||||
|
|
||||||
|
Recovery settings deprecated in 1.x have been removed:
|
||||||
|
|
||||||
|
* `index.shard.recovery.translog_size` is superseded by `indices.recovery.translog_size`
|
||||||
|
* `index.shard.recovery.translog_ops` is superseded by `indices.recovery.translog_ops`
|
||||||
|
* `index.shard.recovery.file_chunk_size` is superseded by `indices.recovery.file_chunk_size`
|
||||||
|
* `index.shard.recovery.concurrent_streams` is superseded by `indices.recovery.concurrent_streams`
|
||||||
|
* `index.shard.recovery.concurrent_small_file_streams` is superseded by `indices.recovery.concurrent_small_file_streams`
|
||||||
|
* `indices.recovery.max_size_per_sec` is superseded by `indices.recovery.max_bytes_per_sec`
|
||||||
|
|
||||||
|
If you are using any of these settings please take the time to review their
|
||||||
|
purpose. All of the settings above are considered _expert settings_ and should
|
||||||
|
only be used if absolutely necessary. If you have set any of the above setting
|
||||||
|
as persistent cluster settings please use the settings update API and set
|
||||||
|
their superseded keys accordingly.
|
||||||
|
|
||||||
|
The following settings have been removed without replacement
|
||||||
|
|
||||||
|
* `indices.recovery.concurrent_small_file_streams` - recoveries are now single threaded. The number of concurrent outgoing recoveries are throttled via allocation deciders
|
||||||
|
* `indices.recovery.concurrent_file_streams` - recoveries are now single threaded. The number of concurrent outgoing recoveries are throttled via allocation deciders
|
||||||
|
|
||||||
|
==== Translog settings
|
||||||
|
|
||||||
|
The `index.translog.flush_threshold_ops` setting is not supported anymore. In
|
||||||
|
order to control flushes based on the transaction log growth use
|
||||||
|
`index.translog.flush_threshold_size` instead.
|
||||||
|
|
||||||
|
Changing the translog type with `index.translog.fs.type` is not supported
|
||||||
|
anymore, the `buffered` implementation is now the only available option and
|
||||||
|
uses a fixed `8kb` buffer.
|
||||||
|
|
||||||
|
The translog by default is fsynced after every `index`, `create`, `update`,
|
||||||
|
`delete`, or `bulk` request. The ability to fsync on every operation is not
|
||||||
|
necessary anymore. In fact, it can be a performance bottleneck and it's trappy
|
||||||
|
since it enabled by a special value set on `index.translog.sync_interval`.
|
||||||
|
Now, `index.translog.sync_interval` doesn't accept a value less than `100ms`
|
||||||
|
which prevents fsyncing too often if async durability is enabled. The special
|
||||||
|
value `0` is no longer supported.
|
||||||
|
|
||||||
|
==== Request Cache Settings
|
||||||
|
|
||||||
|
The deprecated settings `index.cache.query.enable` and
|
||||||
|
`indices.cache.query.size` have been removed and are replaced with
|
||||||
|
`index.requests.cache.enable` and `indices.requests.cache.size` respectively.
|
||||||
|
|
||||||
|
`indices.requests.cache.clean_interval has been replaced with
|
||||||
|
`indices.cache.clean_interval and is no longer supported.
|
||||||
|
|
||||||
|
==== Field Data Cache Settings
|
||||||
|
|
||||||
|
The `indices.fielddata.cache.clean_interval` setting has been replaced with
|
||||||
|
`indices.cache.clean_interval`.
|
||||||
|
|
||||||
|
==== Allocation settings
|
||||||
|
|
||||||
|
The `cluster.routing.allocation.concurrent_recoveries` setting has been
|
||||||
|
replaced with `cluster.routing.allocation.node_concurrent_recoveries`.
|
||||||
|
|
||||||
|
==== Similarity settings
|
||||||
|
|
||||||
|
The 'default' similarity has been renamed to 'classic'.
|
||||||
|
|
||||||
|
==== Indexing settings
|
||||||
|
|
||||||
|
The `indices.memory.min_shard_index_buffer_size` and
|
||||||
|
`indices.memory.max_shard_index_buffer_size` have been removed as
|
||||||
|
Elasticsearch now allows any one shard to use amount of heap as long as the
|
||||||
|
total indexing buffer heap used across all shards is below the node's
|
||||||
|
`indices.memory.index_buffer_size` (defaults to 10% of the JVM heap).
|
||||||
|
|
||||||
|
==== Removed es.max-open-files
|
||||||
|
|
||||||
|
Setting the system property es.max-open-files to true to get
|
||||||
|
Elasticsearch to print the number of maximum open files for the
|
||||||
|
Elasticsearch process has been removed. This same information can be
|
||||||
|
obtained from the <<cluster-nodes-info>> API, and a warning is logged
|
||||||
|
on startup if it is set too low.
|
||||||
|
|
||||||
|
==== Removed es.netty.gathering
|
||||||
|
|
||||||
|
Disabling Netty from using NIO gathering could be done via the escape
|
||||||
|
hatch of setting the system property "es.netty.gathering" to "false".
|
||||||
|
Time has proven enabling gathering by default is a non-issue and this
|
||||||
|
non-documented setting has been removed.
|
||||||
|
|
||||||
|
==== Removed es.useLinkedTransferQueue
|
||||||
|
|
||||||
|
The system property `es.useLinkedTransferQueue` could be used to
|
||||||
|
control the queue implementation used in the cluster service and the
|
||||||
|
handling of ping responses during discovery. This was an undocumented
|
||||||
|
setting and has been removed.
|
||||||
|
|
||||||
|
==== Cache concurrency level settings removed
|
||||||
|
|
||||||
|
Two cache concurrency level settings
|
||||||
|
`indices.requests.cache.concurrency_level` and
|
||||||
|
`indices.fielddata.cache.concurrency_level` because they no longer apply to
|
||||||
|
the cache implementation used for the request cache and the field data cache.
|
||||||
|
|
Loading…
Reference in New Issue