Files
opensearch-pyd/samples/index_template/index_template_sample.py
T
Mark CohenandGitHub 7b0b58d12b samples directory now passes the missing-function-docstring linter (#640)
* updated files with docstrings to pass pylint

Signed-off-by: Mark Cohen <[email protected]>

* updated samples to prepare for enabling missing-docstring linter; will continue to work on this before committing setup.cfg

Signed-off-by: Mark Cohen <[email protected]>

* removed missing-function-docstring from setup.cfg so the linter doesn't fail while work on docstrings continues

Signed-off-by: Mark Cohen <[email protected]>

* corrected unnecessary return docstring values

Signed-off-by: Mark Cohen <[email protected]>

* fixing failure in 'black' on reformatting

Signed-off-by: Mark Cohen <[email protected]>

---------

Signed-off-by: Mark Cohen <[email protected]>
2023-12-22 12:32:48 -08:00

146 lines
4.9 KiB
Python

#!/usr/bin/env python
# SPDX-License-Identifier: Apache-2.0
#
# The OpenSearch Contributors require contributions made to
# this file be licensed under the Apache-2.0 license or a
# compatible open source license.
#
# Modifications Copyright OpenSearch Contributors. See
# GitHub history for details.
from opensearchpy import OpenSearch
def main() -> None:
"""
1. connects to an OpenSearch instance running on localhost
2. Create an index template named `books` with default settings and mappings for indices of
the `books-*` pattern. You can create an index template to define default settings and mappings for indices
of certain patterns.
3. When creating an index that matches the `books-*` pattern, OpenSearch will automatically apply the template's
settings and mappings to the index. Create an index named books-nonfiction and verify that its settings and mappings
match those of the template
4. If multiple index templates match the index's name, OpenSearch will apply the template with the highest
`priority`. In the example, two templates are created with different priorities.
5. Composable index templates are a new type of index template that allow you to define multiple component templates
and compose them into a final template. The last part of the example before cleaning up creates a component
template named `books_mappings` with default mappings for indices of the `books-*` and `books-fiction-*` patterns.
"""
# Create a client instance
client = OpenSearch(
hosts=["https://localhost:9200"],
use_ssl=True,
verify_certs=False,
http_auth=("admin", "admin"),
)
# create an index template
client.indices.put_index_template(
name="books",
body={
"index_patterns": ["books-*"],
"priority": 1,
"template": {
"settings": {"index": {"number_of_shards": 3, "number_of_replicas": 0}},
"mappings": {
"properties": {
"title": {"type": "text"},
"author": {"type": "text"},
"published_on": {"type": "date"},
"pages": {"type": "integer"},
}
},
},
},
)
# create the index which applies the index template settings matched by pattern
client.indices.create(index="books-nonfiction")
print(client.indices.get(index="books-nonfiction"))
client.indices.put_index_template(
name="books",
body={
"index_patterns": ["books-*"],
"priority": 1,
"template": {
"settings": {"index": {"number_of_shards": 3, "number_of_replicas": 0}}
},
},
)
client.indices.put_index_template(
name="books-fiction",
body={
"index_patterns": ["books-fiction-*"],
"priority": 2,
"template": {
"settings": {"index": {"number_of_shards": 1, "number_of_replicas": 1}}
},
},
)
# # Test multiple index templates
client.indices.create(index="books-fiction-romance")
print(client.indices.get(index="books-fiction-romance"))
client.cluster.put_component_template(
name="books_mappings",
body={
"template": {
"mappings": {
"properties": {
"title": {"type": "text"},
"author": {"type": "text"},
"published_on": {"type": "date"},
"pages": {"type": "integer"},
}
}
}
},
)
# composable index templates
client.indices.put_index_template(
name="books",
body={
"index_patterns": ["books-*"],
"composed_of": ["books_mappings"],
"priority": 4,
"template": {
"settings": {"index": {"number_of_shards": 3, "number_of_replicas": 0}}
},
},
)
client.indices.put_index_template(
name="books-fiction",
body={
"index_patterns": ["books-fiction-*"],
"composed_of": ["books_mappings"],
"priority": 5,
"template": {
"settings": {"index": {"number_of_shards": 1, "number_of_replicas": 1}}
},
},
)
# Test composable index templates
client.indices.create(index="books-fiction-horror")
print(client.indices.get(index="books-fiction-horror"))
# Get an index template
print(client.indices.get_index_template(name="books"))
# Delete an index template
client.indices.delete_index_template(name="books")
# Cleanup
client.indices.delete(index="books-*")
client.indices.delete_index_template(name="books-fiction")
client.cluster.delete_component_template(name="books_mappings")
if __name__ == "__main__":
main()