ElasticSearch Reindex Zmień Typ pola

ElasticSearch Reindex Zmień Typ pola

Praca z bazami danych jest bardzo zabawna, ale czasami może być trudna, szczególnie w przypadku już istniejących danych.

Na przykład, jeśli chcesz zmienić rodzaj określonego pola, może to wymagać usunięcia usługi, która może mieć poważne reperkusje, szczególnie w usługach, które przetwarzają duże ilości danych.

Na szczęście możemy użyć potężnych funkcji ElasticSearch, takich jak reindexing, spożycie węzłów, rurociągów i procesorów, aby takie zadania są bardzo łatwe.

Ten samouczek pokaże, jak zmienić typ pola w określonym indeksie na inny, używając węzłów ElasticSearch. Korzystanie z tego podejścia wyeliminuje przestoje, które wpływają na usługi, jednocześnie zarządzając zadaniami zmiany typu pola.

Wprowadzenie do połknięcia węzłów

Węzeł ElasticSearch Inchest umożliwia wstępne przetwarzanie dokumentów przed indeksowaniem.

Węzeł ElasticSearch jest konkretnym przykładem ElasticSearch; podłączone węzły (więcej niż jeden) tworzą pojedynczy klaster.

Możesz wyświetlić węzły dostępne w działającej klastrze z żądaniem:

Get /_nodes /

Komenda Curl dla tego jest:

curl -xget „http: // localhost: 9200/_nodes/”

Wykonanie tego polecenia powinno podać masywne informacje o węzłach, jak pokazano poniżej (obcięte wyjście):


„_nodes”:
„Total”: 3,
„Sukces”: 3,
„nieudany”: 0
,
„Cluster_name”: „22e0bee6ef91461d82d9b0f1b4b13b4a”,
„Węzły”:
„GSLMJtKYTEMOOX-EO7EM4W”:
„Nazwa”: „Instance-0000000003”,
„Transport_address”: „172.28.86.133: 19925 ”,
„Host”: „172.28.86.133 ",
„IP”: „172.28.86.133 ",
„Wersja”: „7.10.2 ",
„Build_flavor”: „domyślnie”,
„Build_Type”: „Docker”,
„Build_hash”: „747E1CC71DEF077253878A59143C1F785AFA92B9”,
„Total_Indexing_Buffer”: 214748364,
„Role”: [
"dane",
„data_cold”,
„data_content”,
„data_hot”,
„data_warm”,
"łykać",
"gospodarz",
„Remote_cluster_client”,
"przekształcać"
],
„Atrybuty”:
„logical_availability_zone”: „strefa-0”,
„Server_name”: „Instance-0000000003.22e0bee6ef91461d82d9b0f1b4b13b4a ",
„Daivability_zone”: „US-West-1C”,
„Xpack.Zainstalowane „:„ True ”,
„Instance_configuration”: „AWS.dane.HIGHIO.i3 ",
"przekształcać.węzeł „:„ true ”,
„Region”: „US-West-1”
,
„Ustawienia”:
„S3”:
"klient" :
„Elastic-Insternal-22E0be”:
„Punkt końcowy”: „S3-us-west-1.Amazonaws.com "


,
--------------------------------Wyjście obcięte---------------------

Domyślnie wszystkie węzły ElasticSearch umożliwiają spożycie i są w stanie obsługiwać operacje. Jednak w przypadku ciężkich operacji spożywczych możesz utworzyć pojedynczy węzeł poświęcony tylko przyjmowaniu.

Aby obsłużyć pre_process, przed indeksowaniem dokumentów musimy zdefiniować rurociąg, który przedstawia serię preprocesorów.

Preprocesory to zestawy instrukcji owinięte wokół rurociągu i są wykonywane pojedynczo.

Poniżej znajduje się ogólna składnia sposobu zdefiniowania rurociągu:


„Opis”: „Konwertuj mnie”,
„Procesory”: [
„Konwertuj”:
„pole”: „id”,
„Typ”: „Integer”
]

Własność opisu mówi, co powinien osiągnąć rurociąg. Następnym parametrem są preprocesory, przekazywane jako lista w kolejności ich wykonania.

Utwórz potok konwertujący

Aby utworzyć rurociąg, którego użyjemy do konwersji typu, użyj żądania PUT z punktem końcowym API _ingest API jako:

Umieść _ingest/ruroline/convert_pipeline

„Opis”: „Przekształca pole DayofWeek Field w długie z całkowitej”,
„Procesory”: [

„Konwertuj”:
„Pole”: „DayofWeek”,
„Typ”: „Long”


]

Do Curl użyj polecenia:

curl -xput "http: // localhost: 9200/_ingest/pipeline/convert_pipeline" -h 'content -type: application/json' -d '"Opis": "konwertuje pole DayOfWeek na długie od liczby całkowitych", "," procesory „: [„ konwertu ”: „ field ”:„ DayOfWeek ”,„ typ ”:„ long ”] '

Reindex i konwertuj Typ

Po otrzymaniu rurociągu w węźle Engest wszystko, co musimy zrobić, to wywołać interdeksualny interfejs API i przekazać rurociąg jako argument w przypadku ciała żądania:

Post _reindex

"źródło":
„Indeks”: „kibana_sample_data_flights”
,
„dest”:
„Indeks”: „kibana_sample_type_diff”,
„Pipeline”: „Convert_Pipeline”

Dla Curl:

curl -xpost "http: // localhost: 9200/_reindex" -h 'content -Type: Application/Json' -d '"Źródło": "indeks": "kibana_sample_data_flights", „dest”: "indeks „:„ kibana_sample_type_diff ”,„ rurociąg ”:„ Convert_pipeline ” '

Sprawdź konwersję

Aby sprawdzić, czy rurociąg został zastosowany poprawnie, użyj żądania GET, aby pobrać to określone pole jako:

Get/kibana_sample_data_flights/_mapping/field/dayofweek
Get/kibana_sample_type_diff/_mapping/field/dayofweek

Powinno to zwrócić dane jako:

-----------------------Oryginalny indeks---------------------------

„kibana_sample_data_flights”:
„Mapowania”:
"dzień tygodnia" :
„Full_name”: „DayofWeek”,
„Mapowanie”:
"dzień tygodnia" :
„Typ”: „Integer”






-------------------------Dane reindexed-------------------------------

„kibana_sample_type_diff”:
„Mapowania”:
"dzień tygodnia" :
„Full_name”: „DayofWeek”,
„Mapowanie”:
"dzień tygodnia" :
„Typ”: „Long”





Wniosek

W tym przewodniku przyjrzeliśmy się, jak pracować z Elasticsearch, spożywaj węzły do ​​dokumentów przed procesem przed indeksowaniem, przekształcając pole z jednego typu na inny.

Rozważ dokumentację, aby dowiedzieć się więcej.

https: // www.elastyczny.co/przewodnik/en/elasticsearch/reference/master/insust.html