Å jobbe med databaser er veldig morsomt, men kan noen ganger være utfordrende, spesielt når du arbeider med allerede eksisterende data.
Hvis du for eksempel vil endre typen av et bestemt felt, kan det kreve at du tar tjenesten ned, noe som kan ha alvorlige konsekvenser, spesielt i tjenester som behandler store datamengder.
Heldigvis kan vi bruke Elasticsearchs kraftige funksjoner som reindexing, innta noder, rørledninger og prosessorer for å gjøre slike oppgaver veldig enkle.
Denne opplæringen viser deg hvordan du endrer en felttype i en bestemt indeks til en annen, ved hjelp av Elasticsearch Ingest-noder. Bruk av denne tilnærmingen vil eliminere nedetid som påvirker tjenester mens du fremdeles klarer å utføre feltoppdateringsoppgavene.
Introduksjon til inntaksnoder
Elasticsearchs inntaksknute lar deg behandle dokumenter før 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 kjørende klyngen med forespørselen:
GET / _noder /CURL-kommandoen for dette er:
krølle -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,
"mislyktes": 0
,
"cluster_name": "22e0bee6ef91461d82d9b0f1b4b13b4a",
"noder":
"gSlMjTKyTemoOX-EO7Em4w":
"navn": "forekomst-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",
"innta",
"herre",
"remote_cluster_client",
"forvandle"
],
"attributter" :
"logical_availability_zone": "zone-0",
"server_name": "forekomst-0000000003.22e0bee6ef91461d82d9b0f1b4b13b4a ",
"tilgjengelighetssone": "us-west-1c",
"xpack.installert ":" true ",
"instance_configuration": "aws.data.highio.i3 ",
"forvandle.node ":" true ",
"region": "us-west-1"
,
"innstillinger":
"s3":
"klient":
"elastisk-indre-22e0be":
"endpoint": "s3-us-west-1.amazonaws.com "
,
--------------------------------utdata avkortet---------------------
Som standard aktiverer alle Elasticsearch-noder inntak og er i stand til å håndtere inntak. For tunge inntakoperasjoner kan du imidlertid opprette en enkelt node dedikert til inntak.
For å håndtere pre_process, før vi indekserer dokumentene, må vi definere en rørledning som angir preprosessor-serien.
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 definerer en rørledning:
"description": "Konverter meg",
"prosessorer": [
"konvertere":
"felt": "id",
"type": "heltall"
]
Beskrivelsesegenskapen sier hva rørledningen skal oppnå. Den neste parameteren er forprosessorer, overført som en liste i rekkefølgen for utførelsen.
Lag en konverteringsrørledning
For å lage en rørledning som vi vil bruke til å konvertere en type, bruk PUT-forespørselen med _ingest API-endepunktet som:
PUT _ingest / pipeline / convert_pipeline“Beskrivelse”: “konverterer feltet dayOfWeek-feltet til et langt fra heltall”,
"prosessorer": [
"konvertere":
"field": "dayOfWeek",
"type": "lang"
]
For cURL, bruk kommandoen:
curl -XPUT "http: // localhost: 9200 / _ingest / pipeline / convert_pipeline" -H 'Content-Type: application / json' -d '"description": "konverterer dayOfWeek-feltet til en lang fra heltall", " prosessorer ": [" convert ": " field ":" dayOfWeek "," type ":" long "] 'Reindex og konverter Type
Når vi har rørledningen i inntaksnoden, er alt vi trenger å ringe indekserings-API og sende rørledningen som et argument til forespørselens kropp som:
POST _reindex“Kilde”:
"index": "kibana_sample_data_flights"
,
"dest":
"index": "kibana_sample_type_diff",
"pipeline": "convert_pipeline"
For 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 " 'Bekreft konvertering
For å bekrefte at rørledningen er brukt riktig, bruk GET-forespørselen for å hente det spesifikke feltet som:
GET / kibana_sample_data_flights / _mapping / field / dayOfWeekGET / kibana_sample_type_diff / _mapping / field / dayOfWeek
Dette skal returnere dataene som:
-----------------------ORIGINAL INDEKS---------------------------"kibana_sample_data_flights":
"mappings":
"ukedag" :
"full_name": "dayOfWeek",
"kartlegging" :
"ukedag" :
"type": "heltall"
-------------------------OMINDEKSERTE DATA-------------------------------
"kibana_sample_type_diff":
"mappings":
"ukedag" :
"full_name": "dayOfWeek",
"kartlegging" :
"ukedag" :
"type": "lang"
Konklusjon
I denne guiden har vi sett på hvordan vi kan jobbe med Elasticsearch Ingest-noder for å forhåndsbehandle 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 / no / elasticsearch / reference / master / ingest.html