123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- [[indices-upgrade]]
- == Upgrade
- The upgrade API allows to upgrade one or more indices to the latest Lucene
- format through an API. The upgrade process converts any segments written with
- older formats.
- [IMPORTANT]
- ===================================================
- **The upgrade API in its current form will not help you to migrate indices
- created in Elasticsearch 1.x to 5.x.**
- The upgrade API rewrites an index in the latest Lucene format, but it still
- retains the original data structures that were used when the index was first
- created. For instance:
- * Doc-values on numeric fields used to use BinaryDocValues, but now use dedicated NumericDocValues.
- * The parent-child feature has been completely rewritten to use a new data structure.
- * Geo-point fields now require doc values and the Lucene index where, previously, they relied on in-memory calculations.
- **Migrating 1.x indices to 5.x**
- The only way to prepare an index created in 1.x for use in 5.x is to **reindex
- your data** in a cluster running Elasticsearch 2.3.x, which you can do with
- the new <<docs-reindex,reindex API>>.
- The steps to do this are as follows:
- 1. Create a new index (e.g. `new_index`) with the correct settings and
- mappings. These can be retrieved from the old index with the
- <<indices-get-index,get-index>> API.
- 2. Reindex from `old_index` to `new_index` with the
- <<docs-reindex,reindex API>>.
- 3. Retrieve a list of any aliases associated with the `old_index` using the
- <<alias-retrieving,get-alias API>>.
- 4. Delete the `old_index` using the <<indices-delete-index,delete index API>>.
- 5. Add an alias called `old_index` to the `new_index` along with any aliases
- returned in step 3, using the <<indices-aliases,update aliases API>>.
- In the future, we plan to change the upgrade API to perform a reindex-in-
- place. In other words, it would reindex data from `old_index` to `.old_index`
- then atomically delete `old_index` and rename `.old_index` to `old_index`.
- ===================================================
- [float]
- === Start an upgrade
- [source,sh]
- --------------------------------------------------
- $ curl -XPOST 'http://localhost:9200/twitter/_upgrade'
- --------------------------------------------------
- NOTE: Upgrading is an I/O intensive operation, and is limited to processing a
- single shard per node at a time. It also is not allowed to run at the same
- time as an optimize/force-merge.
- This call will block until the upgrade is complete. If the http connection
- is lost, the request will continue in the background, and
- any new requests will block until the previous upgrade is complete.
- [float]
- [[upgrade-parameters]]
- ==== Request Parameters
- The `upgrade` API accepts the following request parameters:
- [horizontal]
- `only_ancient_segments`:: If true, only very old segments (from a
- previous Lucene major release) will be upgraded. While this will do
- the minimal work to ensure the next major release of Elasticsearch can
- read the segments, it's dangerous because it can leave other very old
- segments in sub-optimal formats. Defaults to `false`.
- [float]
- === Check upgrade status
- Use a `GET` request to monitor how much of an index is upgraded. This
- can also be used prior to starting an upgrade to identify which
- indices you want to upgrade at the same time.
- The `ancient` byte values that are returned indicate total bytes of
- segments whose version is extremely old (Lucene major version is
- different from the current version), showing how much upgrading is
- necessary when you run with `only_ancient_segments=true`.
- [source,sh]
- --------------------------------------------------
- curl 'http://localhost:9200/twitter/_upgrade?pretty&human'
- --------------------------------------------------
- [source,js]
- --------------------------------------------------
- {
- "size": "21gb",
- "size_in_bytes": "21000000000",
- "size_to_upgrade": "10gb",
- "size_to_upgrade_in_bytes": "10000000000"
- "size_to_upgrade_ancient": "1gb",
- "size_to_upgrade_ancient_in_bytes": "1000000000"
- "indices": {
- "twitter": {
- "size": "21gb",
- "size_in_bytes": "21000000000",
- "size_to_upgrade": "10gb",
- "size_to_upgrade_in_bytes": "10000000000"
- "size_to_upgrade_ancient": "1gb",
- "size_to_upgrade_ancient_in_bytes": "1000000000"
- }
- }
- }
- --------------------------------------------------
- The level of details in the upgrade status command can be controlled by
- setting `level` parameter to `cluster`, `index` (default) or `shard` levels.
- For example, you can run the upgrade status command with `level=shard` to
- get detailed upgrade information of each individual shard.
|