Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[CCI] Create advanced index actions guide #363

1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ Inspired from [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
## [Unreleased]
### Added
- Added generating imports and headers to API generator ([#467](https://github.com/opensearch-project/opensearch-py/pull/467))
- Added advanced index actions guide ([#363](https://github.com/opensearch-project/opensearch-py/pull/363))
### Changed
### Deprecated
### Removed
Expand Down
1 change: 1 addition & 0 deletions USER_GUIDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,7 @@ print(response)
- [Search](guides/search.md)
- [Point in Time](guides/point_in_time.md)
- [Using a Proxy](guides/proxy.md)
- [Advanced Index Actions](guides/advanced_index_actions.md)

## Plugins

Expand Down
117 changes: 117 additions & 0 deletions guides/advanced_index_actions.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
# Advanced Index Actions Guide
- [Advanced Index Actions](#advanced-index-actions)
- [Setup](#setup)
- [Api Actions](#api-actions)
- [Clear Index Cache](#clear-index-cache)
- [Flush Index](#flush-index)
- [Refresh Index](#refresh-index)
- [Open/Close Index](#open-close-index)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This link is not working.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@dblock This guide has broken linking because of the use of [Open/Close Index](#open-close-index) syntax. I think the / character is breaking the #open-close-index link, but not sure. Regardless, I need to change the section title to use a Open or close index & make the hash link #open-or-close-index.(or something similar)

  • This isn't an issue in the Ruby guide version because those guides don't include the MD hash linking at the top of the guide

Is the section title I suggested okay to you? Or would you prefer some other title/hash-link?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Perfectly fine!

- [Force Merge Index](#force-merge-index)
- [Clone Index](#clone-index)
- [Split Index](#split-index)
- [Cleanup](#cleanup)
# Advanced Index Actions
Nicksqain marked this conversation as resolved.
Show resolved Hide resolved

In this guide, we will look at some advanced index actions that are not covered in the [Index Lifecycle](index_lifecycle.md) guide.

## Setup

Let's create a client instance, and an index named `movies`:

```python
from opensearchpy import OpenSearch
client = OpenSearch(
hosts=['https://admin:admin@localhost:9200'],
use_ssl=True,
verify_certs=False
)
client.indices.create(index='movies')
```

## API Actions

### Clear Index Cache

You can clear the cache of an index or indices by using the `indices.clear_cache` API action. The following example clears the cache of the `movies` index:

```python
client.indices.clear_cache(index='movies')
```

By default, the `indices.clear_cache` API action clears all types of cache. To clear specific types of cache pass the the `query`, `fielddata`, or `request` parameter to the API action:
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

remove one "the" after cache pass.


```python
client.indices.clear_cache(index='movies', query=True)
client.indices.clear_cache(index='movies', fielddata=True, request=True)
```

### Flush Index

Sometimes you might want to flush an index or indices to make sure that all data in the transaction log is persisted to the index. To flush an index or indices use the `indices.flush` API action. The following example flushes the `movies` index:

```python
client.indices.flush(index='movies')
```

### Refresh Index

You can refresh an index or indices to make sure that all changes are available for search. To refresh an index or indices use the `indices.refresh` API action:

```python
client.indices.refresh(index='movies')
```

### Open/Close Index

You can close an index to prevent read and write operations on the index. A closed index does not have to maintain certain data structures that an opened index require, reducing the memory and disk space required by the index. The following example closes and reopens the `movies` index:

```python
client.indices.close(index='movies')
client.indices.open(index='movies')
```

### Force Merge Index

You can force merge an index or indices to reduce the number of segments in the index. This can be useful if you have a large number of small segments in the index. Merging segments reduces the memory footprint of the index. Do note that this action is resource intensive and it is only recommended for read-only indices. The following example force merges the `movies` index:

```python
client.indices.forcemerge(index='movies')
```

### Clone Index

You can clone an index to create a new index with the same mappings, data, and MOST of the settings. The source index must be in read-only state for cloning. The following example blocks write operations from `movies` index, clones the said index to create a new index named `movies_clone`, then re-enables write:

```python
client.indices.put_settings(index='movies', body={'index': {'blocks': {'write': True}}})
client.indices.clone(index='movies', target='movies_clone')
client.indices.put_settings(index='movies', body={'index': {'blocks': {'write': False}}})
```

### Split Index

You can split an index into another index with more primary shards. The source index must be in read-only state for splitting. The following example create the read-only `books` index with 30 routing shards and 5 shards (which is divisible by 30), splits index into `bigger_books` with 10 shards (which is also divisible by 30), then re-enables write:

```python
client.indices.create(
index='books',
body={ 'settings': {
'index': { 'number_of_shards': 5,
'number_of_routing_shards': 30,
'blocks': { 'write': True } } } })

client.indices.split(
index='books',
target='bigger_books',
body={ 'settings': { 'index': { 'number_of_shards': 10 } } })

client.indices.put_settings(index='books', body={ 'index': { 'blocks': { 'write': False } } })
```

## Cleanup

Let's delete all the indices we created in this guide:

```python
client.indices.delete(index=['movies', 'books', 'movies_clone', 'bigger_books'])
```
Loading