* remove unnecessary utf-8 header in .py files Signed-off-by: samuel orji <[email protected]> * review feedback: add link to changelog Signed-off-by: samuel orji <[email protected]> --------- Signed-off-by: samuel orji <[email protected]>
137 lines
4.7 KiB
Python
137 lines
4.7 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:
|
|
# Create a client instance
|
|
client = OpenSearch(
|
|
hosts=["https://localhost:9200"],
|
|
use_ssl=True,
|
|
verify_certs=False,
|
|
http_auth=("admin", "admin"),
|
|
)
|
|
|
|
# You can create an index template to define default settings and mappings for indices of certain patterns.
|
|
# The following example creates an index template named `books` with default settings and mappings for indices of the `books-*` pattern:
|
|
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"},
|
|
}
|
|
},
|
|
},
|
|
},
|
|
)
|
|
|
|
# Now, when you create an index that matches the `books-*` pattern, OpenSearch will automatically apply the template's settings and mappings to the index.
|
|
# Let's create an index named books-nonfiction and verify that its settings and mappings match those of the template:
|
|
client.indices.create(index="books-nonfiction")
|
|
print(client.indices.get(index="books-nonfiction"))
|
|
|
|
# If multiple index templates match the index's name, OpenSearch will apply the template with the highest `priority`.
|
|
# The following example creates two index templates named `books-*` and `books-fiction-*` with different settings:
|
|
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"))
|
|
|
|
# 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 following example creates a component template named `books_mappings` with default mappings for indices of the `books-*` and `books-fiction-*` patterns:
|
|
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"},
|
|
}
|
|
}
|
|
}
|
|
},
|
|
)
|
|
|
|
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()
|