Im vorherigen Blog-Artikel wurde nun ein Index-Template mit dem Namen “standard” angelegt. Das Namens-Matching ist "*"
. Damit wird das Template für alle neuen Indexe verwendet, da ja jeder Name auf *
matched.
Zur Vorbereitung eines weiteren Artikels, habe ich ein Script erstellt, dass gleich zwei identische Indexe anlegt. Diese werden benötigt, um später Mastodon Accounts in OpenSearch zu laden.
Account Schema-Objekte kennen wir schon aus Mastodon-Status-Nachrichten, wo sie bereits eingebettet sind. Das Mapping ist etwas einfacher. Aber es wird dramatisch übersichtlicher, weil wir schon was in das Index-Template verschoben haben: die Index-Settings mit dem HTML Analyzer.
Somit ist das Script osCreateFollowersIndexes.py
wirklich trivial:
from opensearchpy import OpenSearch
def login (host, port):
# Client zu dem Dev Cluster (ohne SSL, ohne Anmeldung)
return OpenSearch(
hosts = [{'host': host, 'port': port}],
http_compress = True, # enables gzip compression for request bodies
use_ssl = False
)
# Namen der Indexe
index_names = ['followers', 'following']
# Die Einstellungen
index_body = {
"mappings": {
"properties": {
"id": {"type": "keyword"},
"created_at": {"type": "date"},
"last_status_at": {"type": "date"},
"language": { "type": "keyword" },
"url": { "type": "keyword" },
"followers_count": {"type": "long"},
"following_count": {"type": "long"},
"statuses_count": {"type": "long"},
"note": {
"type": "text",
"analyzer": "my_html_analyzer"
},
"source": {
"type": "nested",
"properties": {
"privacy": {"type": "keyword"},
"language": {"type": "keyword"}
}
}
}
}
}
client = login("localhost", 9200)
for index_name in index_names:
if not client.indices.exists(index_name):
response = client.indices.create(index_name, body=index_body)
print(f'Index "{index_name}" erstellt: {response}')
Das Mapping ist einfach gehalten. note
ist der Profiltext und i.d.R. mit HTML verseucht. Daran hängt der eigene Analyzer. Da Folgende und Gefolgte strukturell identisch sind, gibt es eine kleine Schleife.
Durch das Templating müssen wir uns weder um die Definition des Analyzer kümmern, noch individuell die Deklaration der Shards und Replications festlegen. Damit kann dieses Script in Dev- oder Prod-Umgebungen angewendet werden.
Comments
No comments yet. Be the first to react!