Elastische Suche

Elasticsearch Reindex Feldtyp ändern

Elasticsearch Reindex Feldtyp ändern

Die Arbeit mit Datenbanken macht sehr viel Spaß, kann aber manchmal eine Herausforderung darstellen, insbesondere wenn es um bereits vorhandene Daten geht.

Wenn Sie beispielsweise den Typ eines bestimmten Felds ändern möchten, müssen Sie möglicherweise den Dienst deaktivieren, was schwerwiegende Auswirkungen haben kann, insbesondere bei Diensten, die große Datenmengen verarbeiten process.

Glücklicherweise können wir die leistungsstarken Funktionen von Elasticsearch wie Reindexing, Ingest Nodes, Pipelines und Prozessoren verwenden, um solche Aufgaben sehr einfach zu machen.

In diesem Tutorial erfahren Sie, wie Sie mithilfe von Elasticsearch Ingest-Knoten einen Feldtyp in einem bestimmten Index in einen anderen ändern. Mit diesem Ansatz werden Ausfallzeiten vermieden, die sich auf die Dienste auswirken, während die Aufgaben zur Feldtypänderung weiterhin ausgeführt werden können.

Einführung in Ingest-Knoten

Mit dem Aufnahmeknoten von Elasticsearch können Sie Dokumente vor ihrer Indizierung vorverarbeiten.

Ein Elasticsearch-Knoten ist eine bestimmte Instanz von Elasticsearch; verbundene Knoten (mehr als einer) bilden einen einzelnen Cluster.

Sie können die im laufenden Cluster verfügbaren Knoten mit der Anfrage anzeigen:

GET /_nodes/

Der cURL-Befehl dafür lautet:

curl -XGET „http://localhost:9200/_nodes/“

Die Ausführung dieses Befehls sollte Ihnen umfangreiche Informationen über die Knoten liefern, wie unten gezeigt (abgeschnittene Ausgabe):


"_nodes":
"gesamt" : 3,
"erfolgreich" : 3,
"fehlgeschlagen" : 0
,
"cluster_name": "22e0bee6ef91461d82d9b0f1b4b13b4a",
"Knoten" :
"gSlMjTKyTemoOX-EO7Em4w":
"name" : "Instanz-0000000003",
"Transportadresse" : "172.28.86.133:19925",
"Gastgeber" : "172.28.86.133",
"ip" : "172.28.86.133",
"Version" : "7.10.2",
"build_flavor" : "default",
"build_type" : "docker",
"build_hash" : "747e1cc71def077253878a59143c1f785afa92b9",
"total_indexing_buffer" : 214748364,
"Rollen" : [
"Daten",
"data_cold",
"data_content",
"data_hot",
"data_warm",
"aufnehmen",
"Meister",
"remote_cluster_client",
"verwandeln"
],
"Attribute":
"logical_availability_zone" : "zone-0",
"server_name" : "Instanz-0000000003.22e0bee6ef91461d82d9b0f1b4b13b4a",
"availability_zone" : "us-west-1c",
"xpack.installiert" : "wahr",
"instance_configuration" : "aws.Daten.hoch.i3",
"verwandeln.Knoten" : "wahr",
"region" : "us-west-1"
,
"die Einstellungen" :
"s3":
"Klient" :
"elastisch-intern-22e0be" :
"Endpunkt" : "s3-us-west-1.Amazonaws.com"


,
--------------------------------Ausgabe abgeschnitten---------------------

Standardmäßig aktivieren alle Elasticsearch-Knoten die Aufnahme und können Aufnahmevorgänge verarbeiten in. Für umfangreiche Aufnahmevorgänge können Sie jedoch einen einzelnen Knoten erstellen, der nur für die Aufnahme bestimmt ist.

Um pre_process zu handhaben, müssen wir vor der Indizierung der Dokumente eine Pipeline definieren, die die Präprozessorserien angibt.

Präprozessoren sind Befehlssätze, die um eine Pipeline gewickelt sind und nacheinander ausgeführt werden.

Im Folgenden finden Sie die allgemeine Syntax zum Definieren einer Pipeline:


"Beschreibung" : "Konvertieren Sie mich",
"Prozessoren" : [
"Konvertieren" :
"feld" : "id",
"Typ": "Ganzzahl"
]

Die Eigenschaft description sagt, was die Pipeline erreichen soll. Der nächste Parameter sind die Präprozessoren, die als Liste in der Reihenfolge ihrer Ausführung übergeben werden.

Erstellen Sie eine Convert-Pipeline

Um eine Pipeline zu erstellen, die wir zum Konvertieren eines Typs verwenden, verwenden Sie die PUT-Anfrage mit dem API-Endpunkt _ingest als:

PUT _ingest/pipeline/convert_pipeline

"description": "konvertiert das Feld dayOfWeek-Feld in ein Long von Integer",
"Prozessoren": [

"Konvertieren" :
"Feld" : "TagOfWoche",
"typ": "lang"


]

Verwenden Sie für cURL den Befehl:

curl -XPUT "http://localhost:9200/_ingest/pipeline/convert_pipeline" -H 'Content-Type: application/json' -d'  "description": "konvertiert das dayOfWeek-Feld in ein Long von Integer",  " Auftragsverarbeiter" : [          "convert" :         "field" : "dayOfWeek",        "type": "long"            ]'

Neu indizieren und konvertieren Art

Sobald wir die Pipeline im Ingest-Knoten haben, müssen wir nur noch die Indexierungs-API aufrufen und die Pipeline als Argument im Ziel des Anfragetexts übergeben:

POST _reindex

"Quelle":
"index": "kibana_sample_data_flights"
,
"Ziel":
"index": "kibana_sample_type_diff",
"pipeline": "convert_pipeline"

Für cURL:

curl -XPOST "http://localhost:9200/_reindex" -H 'Content-Type: application/json' -d'  "source":     "index": "kibana_sample_data_flights"  ,  "dest":     "index ": "kibana_sample_type_diff",    "pipeline": "convert_pipeline"  '

 Konvertierung überprüfen

Um zu überprüfen, ob die Pipeline korrekt angewendet wurde, verwenden Sie die GET-Anforderung, um dieses bestimmte Feld wie folgt abzurufen:

GET /kibana_sample_data_flights/_mapping/field/dayOfWeek
GET /kibana_sample_type_diff/_mapping/field/dayOfWeek

Dies sollte die Daten zurückgeben als:

-----------------------ORIGINAL-INDEX---------------------------

"kibana_sample_data_flights":
"Zuordnungen":
"Wochentag" :
"full_name" : "dayOfWeek",
"Kartierung" :
"Wochentag" :
"Typ" : "Ganzzahl"






-------------------------REINDEXIERTE DATEN-------------------------------

"kibana_sample_type_diff":
"Zuordnungen":
"Wochentag" :
"full_name" : "dayOfWeek",
"Kartierung" :
"Wochentag" :
"typ" : "lang"





Fazit

In diesem Handbuch haben wir uns angesehen, wie Sie mit Elasticsearch Ingest-Knoten arbeiten, um Dokumente vor der Indizierung vorzuverarbeiten und so ein Feld von einem Typ in einen anderen zu konvertieren.

Betrachten Sie die Dokumentation, um mehr zu erfahren.

https://www.elastisch.co/guide/de/elasticsearch/reference/master/ingest.html

Beste Befehlszeilenspiele für Linux
Die Befehlszeile ist nicht nur Ihr größter Verbündeter bei der Verwendung von Linux – sie kann auch eine Quelle der Unterhaltung sein, da Sie damit vi...
Beste Gamepad-Mapping-Apps für Linux
Wenn du Spiele unter Linux gerne mit einem Gamepad statt mit einem typischen Tastatur- und Maus-Eingabesystem spielst, gibt es einige nützliche Apps f...
Nützliche Tools für Linux-Spieler
Wenn Sie gerne unter Linux spielen, haben Sie wahrscheinlich Apps und Dienstprogramme wie Wine, Lutris und OBS Studio verwendet, um das Spielerlebnis ...