forked from opensearch-project/opensearch-py
-
Notifications
You must be signed in to change notification settings - Fork 0
/
index_template_sample.py
148 lines (130 loc) · 5 KB
/
index_template_sample.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
#!/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.
import os
from opensearchpy import OpenSearch
def main() -> None:
"""
# pylint: disable=line-too-long
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", os.getenv("OPENSEARCH_PASSWORD", "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()