Hvordan endrer jeg felttypen i Elasticsearch?

Hvordan endrer jeg felttypen i Elasticsearch?
Ved hjelp av _ Mapping API kan du oppdatere eksisterende felt eller legge til nye felt i en eksisterende indeks.

MERK: For å utføre endringer i en indeks, må du forsikre deg om at du har administrasjonsprivilegiene på målindeksen.

Grunnleggende bruk

For å endre en felttype, send en put -forespørsel til _mapping API etterfulgt av forespørselsorganet. Forespørselsorganet inkluderer egenskapsparameteren og kartleggingen av målfeltet. Når du oppretter et nytt felt, må du forsikre deg om at du inkluderer feltnavn, type og kartleggingsparametere.

For eksempel endrer følgende forespørsel felttypen fra heltall til lang.

PUT /MY-INDEX /_MAPPING

"egenskaper":
"base_price":
"Type": "Lang"


Etter vellykket fullføring, bør du se en utdata som:


"anerkjent": sant

Re-indekseringsmetode

I de fleste tilfeller vil Elasticsearch forhindre deg i å oppdatere felttypen til en eksisterende indeks. Å gjøre det kan føre til at dagens data blir ugyldige og forårsaker feil i indeksen.

Hvis du fremdeles vil oppdatere typen av et eksisterende felt, kan du gjøre det i noen få enkle trinn.

  1. Opprett en ny indeks med riktig kartleggingsinformasjon der felttypen endres til ønsket type.
  2. Index dataene fra din gamle indeks til den nye indeksen på nytt.
  3. Fjern den gamle indeksen

Ved å bruke denne metoden lar deg redusere den minimale driftsstansen for indeksen din.

Opprette en gammel indeks

La oss starte med å lage en indeks med feil felttype.

Put /Change-Me

"Mappings":
"egenskaper":
"id":
"Type": "Heltall"
,
"Brukernavn":
"Type": "Tekst"



I eksemplet over har vi en enkel indeks med de to feltene: ID og brukernavn. Felttypene er henholdsvis heltall og tekst.

La oss anta at feltet inneholder data som vist i følgende spørsmål:

Post /Change-Me /_Doc


"ID": 1000,
"Brukernavn": "Root"

Post /Change-Me /_Doc

"ID": 1001,
"Brukernavn": "Annet"

De to spørsmålene ovenfor vil lage et dokument med dataene som angitt i forespørselsorganet.

Forsikre deg om at dataene eksisterer:

Få /endre-meg /_search?ganske

"spørring":
"match_all":

Vi bør se de to postene som vist:

Opprett en ny indeks

La oss si at vi ønsker å endre ID -feltet fra et heltall til et nøkkelord. Vi starter med å opprette en ny indeks med typen som nøkkelord.

Put /Change-Me-Reindex

"Mappings":
"egenskaper":
"id":
"Type": "nøkkelord"
,
"Brukernavn":
"Type": "Tekst"



I forespørselen over oppretter vi en ny indeks og setter ID -typen til et nøkkelord.

Index de gamle dataene på nytt

Neste trinn er å gjenopprette dataene fra den gamle indeksen til den nye ved hjelp av _ Re-Index API. Forespørselen om det er nedenfor:

POST /_REINDEX

"Kilde":
"Indeks": "Change-Me"
,
"dest":
"Indeks": "Change-Me-Reindex"

Ovennevnte forespørsel vil kopiere dokumentene fra den gamle indeksen til den nye der felttypen endres fra et heltall til et nøkkelord.

Utgang fra spørringen ovenfor:


"Tok": 8,
"TIMED_OUT": FALSE,
"Totalt": 4,
"Oppdatert": 0,
"opprettet": 4,
"Slettet": 0,
"Batches": 1,
"versjon_conflicts": 0,
"Noops": 0,
"Forsøk":
"Bulk": 0,
"Søk": 0
,
"Throttled_millis": 0,
"Forespørsler_per_second": -1.0,
"Throttled_until_millis": 0,
"Feil": []

Slett den gamle indeksen

Nå som vi har en oppdatert indeks med riktig kartlegging, er det på tide å fjerne den gamle indeksen. Vi kan gjøre dette ved å sende en slettforespørsel til indeksen som:

Slett /endring-meg

Ved vellykket fjerning, bør du se en utdata som:


"anerkjent": sant

Lag indeksalias

Hvis du hadde applikasjoner ved hjelp av den gamle indeksen, kan de slutte å fungere siden den ikke lenger eksisterer.

Vi kan løse dette ved å lage et alias for den nye indeksen med navnet på den gamle indeksen.

Put/Change-Me-Reindex/_alias/Change-Me

Ovennevnte forespørsel skal opprette et alias for den nye indeksen.

Konklusjon

I denne guiden oppdaget du hvordan du endrer typen som eksisterende felt i en Elasticsearch Index.