123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 |
- [[indices-create-index-from-source]]
- === Create index from source API
- ++++
- <titleabbrev>Create index from source</titleabbrev>
- ++++
- .New API reference
- [sidebar]
- --
- For the most up-to-date API details, refer to {api-es}/group/endpoint-indices[Index APIs].
- --
- [[indices-create-index-from-source-api-request]]
- ==== {api-request-title}
- `PUT /_create_from/<source>/<dest>`
- `POST/_create_from/<source>/<dest>`
- [[indices-create-index-from-source-api-prereqs]]
- ==== {api-prereq-title}
- * If the {es} {security-features} are enabled, you must have the `manage`
- <<privileges-list-indices,index privilege>> for the index.
- [[indices-create-index-from-source-api-desc]]
- ==== {api-description-title}
- This api allows you to add a new index to an {es} cluster, using an existing source index as a basis for the new index.
- The settings and mappings from the source index will copied over to the destination index. You can also provide
- override settings and mappings which will be combined with the source settings and mappings when creating the
- destination index.
- [[indices-create-index-from-source-api-path-params]]
- ==== {api-path-parms-title}
- `<source>`::
- (Required, string) Name of the existing source index which will be used as a basis.
- `<dest>`::
- (Required, string) Name of the destination index which will be created.
- [role="child_attributes"]
- [[indices-create-index-from-source-api-request-body]]
- ==== {api-request-body-title}
- `settings_override`::
- (Optional, <<index-modules-settings,index setting object>>) Settings which override the source settings.
- `mappings_override`::
- (Optional, <<mapping,mapping object>>) Mappings which override the source mappings.
- `remove_index_blocks`::
- (Optional, boolean) Filter out any index blocks from the source index when creating the destination index.
- Defaults to `true`.
- [[indices-create-index-from-source-api-example]]
- ==== {api-examples-title}
- Start by creating a source index that we'll copy using this API.
- [source,console]
- --------------------------------------------------
- PUT /my-index
- {
- "settings": {
- "index": {
- "number_of_shards": 3,
- "blocks.write": true
- }
- },
- "mappings": {
- "properties": {
- "field1": { "type": "text" }
- }
- }
- }
- --------------------------------------------------
- // TESTSETUP
- Now we create a destination index from the source index. This new index will have the same mappings and settings
- as the source index.
- [source,console]
- --------------------------------------------------
- POST _create_from/my-index/my-new-index
- --------------------------------------------------
- Alternatively, we could override some of the source's settings and mappings. This will use the source settings
- and mappings as a basis and combine these with the overrides to create the destination settings and mappings.
- [source,console]
- --------------------------------------------------
- POST _create_from/my-index/my-new-index
- {
- "settings_override": {
- "index": {
- "number_of_shards": 5
- }
- },
- "mappings_override": {
- "properties": {
- "field2": { "type": "boolean" }
- }
- }
- }
- --------------------------------------------------
- Since the destination index is empty, we very likely will want to write into the index after creation.
- This would not be possible if the source index contains an <<index-block-settings,index write block>> which is copied over to the destination index.
- One way to handle this is to remove the index write block using a settings override. For example, the following
- settings override removes all index blocks.
- [source,console]
- --------------------------------------------------
- POST _create_from/my-index/my-new-index
- {
- "settings_override": {
- "index": {
- "blocks.write": null,
- "blocks.read": null,
- "blocks.read_only": null,
- "blocks.read_only_allow_delete": null,
- "blocks.metadata": null
- }
- }
- }
- --------------------------------------------------
- Since this is a common scenario, index blocks are actually removed by default. This is controlled with the parameter
- `remove_index_blocks`, which defaults to `true`. If we want the destination index to contains the index blocks from
- the source index, we can do the following:
- [source,console]
- --------------------------------------------------
- POST _create_from/my-index/my-new-index
- {
- "remove_index_blocks": false
- }
- --------------------------------------------------
|