Hva er karttyper?
I Elasticsearch tilhører hvert dokument en indeks og en type. En indeks kan betraktes som en database, mens en type kan sees på som en tabell sammenlignet med en relasjonsdatabase. En kartleggingstype var en logisk partisjon av et objekt med andre objekter som tilhørte andre kartleggingstyper i samme indeks.
Hver kartleggingstype har sine egne felt. For eksempel en type bruker kan ha følgende felt:
"id": 123,
"name": "Shubham",
"nettsted": 1
En annen kartleggingstype i samme indeks nettsted kan ha følgende felt som er helt forskjellige fra bruker type:
"id": 1,
"title": "LinuxHint",
"link": "https: // linuxhint.com / "
Mens du søkte etter et dokument i en indeks, kunne søket ha vært begrenset til et enkelt dokument ved å angi et enkelt felt som:
FÅ idx_name / bruker, nettsted / _search"spørring":
"kamp":
"id": 1
De _type felt av dokumentene ble kombinert med dets _id å generere en _uid felt så dokumenter med samme _id kunne eksistere i en enkelt indeks.
Les Elasticsearch Tutorial for Beginners for en dypere forståelse av Elasticsearch Architecture og kom i gang med den med Install ElasticSearch på Ubuntu.
Hvorfor fjernes karttyper?
Akkurat som det vi sa ovenfor mens vi forklarte hvordan indeks og typer lignet på en database og en tabell i en relasjonsdatabase, trodde Elasticsearch-teamet det samme, men dette var ikke tilfelle da Lucene Engine ikke følger den samme analogien. Dette skyldes følgende årsaker:
- I en relasjonsdatabase er tabeller uavhengige av hverandre og navnet på kolonnene, selv om de er like, har de ikke noe forhold mellom dem. Dette er ikke tilfelle med felt i kartleggingstyper som i ES, felt med samme navn behandles som samme Lucene Engine-felt internt.
- I eksemplet ovenfor, feltet _id i bruker type og nettsted type er lagret i samme felt og skal ha nøyaktig samme type som kan føre til frustrasjon og forvirring.
- Å lagre enheter uten felles felt hindrer Lucene i å komprimere dokumenter effektivt.
Alternativer til karttyper
Selv om avgjørelsen er tatt, må vi fremdeles skille forskjellige typer data. Nå er det første alternativet å separate dokumenter i egen indeks som har to fordeler:
- Nå som data er vanlig i hver indeks, kan Lucene veldig enkelt bruke sine egne datakomprimeringsteknikker.
- Nå som alle dokumenter i en indeks har samme felt, øker søkefunksjonene i fulltekst fenomenalt ettersom poengsummen for hvert dokument har økt.
Et annet alternativ til å skille data er å opprettholde en tilpasset _type felt i hvert dokument vi setter inn, som:
PUT db_name / doc / 123"type": "bruker",
"id": 123,
"name": "Shubham",
"nettsted": 1
PUT db_name / doc / nettsted
"type": "nettsted",
"id": 1,
"title": "LinuxHint",
"link": "https: // linuxhint.com / "
Dette er en utmerket bruk hvis du leter etter en komplett tilpasset løsning.
Tidsplan for fjerning av karttyper
Siden fjerning av karttyper er en stor endring, gjør ES-teamet prosessen sakte. Her er en tidsplan for utrullingen hentet fra elastikken.co:
- Elasticsearch 7.x
- De type parameter i nettadresser er valgfri. For eksempel krever indeksering av et dokument ikke lenger en dokumenttype.
- De _misligholde_ karttype fjernes.
- Elasticsearch 8.x
- De type parameter støttes ikke lenger i nettadresser.
- De inkluderer_type_navn parameter er som standard falsk.
- Elasticsearch 9.x
- De inkluderer_type_navn parameteren er fjernet.
Konklusjon
I denne leksjonen så vi på hvorfor Elasticsearch Mapping-typer ble fjernet, og vil ikke fullstendig støttes i kommende versjoner.