Elasticsearch Reindex Endre felttype

Elasticsearch Reindex Endre felttype

Det er veldig morsomt å jobbe med databaser, men kan noen ganger være utfordrende, spesielt når du arbeider med allerede eksisterende data.

Hvis du for eksempel vil endre typen et bestemt felt, kan det kreve at du tar tjenesten ned, som kan ha alvorlige konsekvenser, spesielt i tjenester som behandler store datamengder.

Heldigvis kan vi bruke Elasticsearchs kraftige funksjoner som reindeksering, inntaksnoder, rørledninger og prosessorer for å gjøre slike oppgaver veldig enkelt.

Denne opplæringen vil vise deg hvordan du endrer en felttype i en spesifikk indeks til en annen, ved å bruke elasticsearch inntaksnoder. Bruk.

Introduksjon til inntaksnoder

Elasticsearchs inntaksknute lar deg forhåndsprosesser dokumenter før deres indeksering.

En elasticsearch -node er en spesifikk forekomst av Elasticsearch; Tilkoblede noder (mer enn en) lager en enkelt klynge.

Du kan se nodene som er tilgjengelige i den løpende klyngen med forespørselen:

Få /_noder /

Curl -kommandoen for dette er:

Curl -xget “http: // localhost: 9200/_nodes/”

Å utføre denne kommandoen skal gi deg massiv informasjon om nodene, som vist nedenfor (avkortet utgang):


"_noder":
"Totalt": 3,
"Vellykket": 3,
"Mislykket": 0
,
"cluster_name": "22e0bee6ef91461d82d9b0f1b4b13b4a",
"noder":
"GSlMJTKYTEMOOX-EO7EM4W":
"Navn": "Instance-0000000003",
"Transport_address": "172.28.86.133: 19925 ",
"Vert": "172.28.86.133 ",
"IP": "172.28.86.133 ",
"Versjon": "7.10.2 ",
"build_flavor": "standard",
"build_type": "docker",
"build_hash": "747e1cc71def077253878a59143c1f785afa92b9",
"Total_indexing_buffer": 214748364,
"roller" : [
"data",
"Data_Cold",
"Data_content",
"Data_hot",
"Data_warm",
"Inntak",
"herre",
"Remote_cluster_client",
"forvandle"
],
"attributter" :
"logical_aVailable_zone": "sone-0",
"Server_name": "Instance-0000000003.22e0Bee6ef91461d82d9b0f1b4b13b4a ",
"Tilgjengelighet_zone": "US-West-1c",
"Xpack.installert ":" sant ",
"Instance_configuration": "AWS.data.Highio.i3 ",
"forvandle.Node ":" True ",
"Region": "US-West-1"
,
"Innstillinger":
"S3":
"Klient":
"Elastic-Internal-22e0be":
"Endpoint": "S3-US-West-1.Amazonaws.com "


,
--------------------------------output avkortet---------------------

Som standard muliggjør alle Elasticsearch -noder inntak og er i stand til å håndtere inntektsoperasjoner. For tunge inntaksoperasjoner kan du imidlertid lage en enkelt node dedikert til å innta bare.

For å håndtere pre_process, før indeksering av dokumentene, må vi definere en rørledning som sier forprosessorserien.

Forprosessorer er sett med instruksjoner pakket rundt en rørledning og utføres en om gangen.

Følgende er den generelle syntaksen for hvordan du kan definere en rørledning:


"Beskrivelse": "Konverter meg",
"prosessorer": [
"konvertere":
"Felt": "Id",
"Type": "Heltall"
]

Beskrivelsesegenskapen sier hva rørledningen skal oppnå. Den neste parameteren er forprosessorene, som er gitt videre som en liste i rekkefølgen av utførelsen deres.

Lag en konvertitt rørledning

For å lage en rørledning som vi vil bruke til å konvertere en type, bruker du put -forespørselen med _ingest API -endepunktet som:

Sett _ingest/Pipeline/Convert_pipeline

“Beskrivelse”: “Konverterer feltet DayofWeek -feltet til en lang tid fra heltall”,
"Prosessorer": [

"konvertere":
"Felt": "Dayofweek",
"Type": "Lang"


]

For krøll, bruk kommandoen:

Curl -xput "http: // localhost: 9200/_ingest/pipeline/convert_pipeline" -h 'content -type: applikasjon/json' -d '"beskrivelse": "Konverterer DayOfWeek -feltet til en lang fra heltall", " prosessorer ": [" konvertitt ": " felt ":" dayofweek "," type ":" long "] '

Reindex og konvertere Type

Når vi har hatt rørledningen i inntaksnoden, er alt vi trenger å gjøre å kalle indekserings -API og passere rørledningen som et argument i forespørselsorganet som:

POST _REINDEX

“Kilde”:
"indeks": "kibana_sample_data_flights"
,
"dest":
"Indeks": "kibana_sample_type_diff",
"Pipeline": "Convert_pipeline"

For krøll:

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 " '

Bekreft konvertering

For å bekrefte at rørledningen har brukt riktig, bruk GET -forespørselen til å hente det spesifikke feltet som:

Få/kibana_sample_data_flights/_mapping/felt/dayofweek
Få/kibana_sample_type_diff/_mapping/felt/dayofweek

Dette skal returnere dataene som:

-----------------------Original indeks---------------------------

"kibana_sample_data_flights":
"Mappings":
"ukedag" :
"full_name": "Dayofweek",
"kartlegging" :
"ukedag" :
"Type": "Heltall"






-------------------------Reindekserte data-------------------------------

"kibana_sample_type_diff":
"Mappings":
"ukedag" :
"full_name": "Dayofweek",
"kartlegging" :
"ukedag" :
"Type": "Lang"





Konklusjon

I denne guiden har vi sett på hvordan vi skal jobbe med elasticsearch inntaksnoder for å forhåndsprosesser dokumenter før indeksering, og dermed konvertere et felt fra en type til en annen.

Vurder dokumentasjonen for å lære mer.

https: // www.elastisk.CO/Guide/EN/Elasticsearch/Reference/Master/Ingest.html