Wat zijn kaarttypen?
In Elasticsearch behoort elk document tot een Index en een Type. Een index kan worden beschouwd als een database, terwijl een type kan worden gezien als een tabel in vergelijking met een relationele database. Een toewijzingstype was een logische partitie van een object met andere objecten die behoorden tot andere toewijzingstypen in dezelfde index.
Elk toewijzingstype heeft zijn eigen velden. Bijvoorbeeld een soort gebruiker kan de volgende velden hebben:
"id" : 123,
"naam" : "Shubham",
"website" : 1
Een ander toewijzingstype in dezelfde index website kan de volgende velden hebben die totaal verschillen van de gebruiker type:
"id" : 1,
"title" : "LinuxHint",
"link" : "https://linuxhint.com/"
Tijdens het zoeken naar een document in een index, had de zoekopdracht kunnen worden beperkt tot een enkel document door een enkel veld op te geven als:
GET idx_name/user,website/_search"vraag":
"bij elkaar passen":
"id": 1
De _type veld van de documenten werd gecombineerd met zijn _ID kaart een genereren _uid veld dus documenten met hetzelfde _ID kaart zou kunnen bestaan in een enkele index.
Lees Elasticsearch-zelfstudie voor beginners voor een beter begrip van Elasticsearch-architectuur en ga ermee aan de slag door ElasticSearch op Ubuntu te installeren.
Waarom worden toewijzingstypen verwijderd??
Net zoals we hierboven zeiden toen we uitlegden hoe index en typen vergelijkbaar waren met een database en een tabel in een relationele database, dacht Elasticsearch-team hetzelfde, maar dit was niet het geval, omdat Lucene Engine niet dezelfde analogie volgt. Dit vanwege de volgende redenen:
- In een relationele database zijn tabellen onafhankelijk van elkaar en hebben de namen van de kolommen geen relatie, zelfs als ze hetzelfde zijn. Dit is niet het geval bij velden in kaarttypes zoals in ES, velden met dezelfde naam worden intern als hetzelfde Lucene Engine-veld behandeld.
- In het bovenstaande voorbeeld is het veld _ID kaart in gebruiker typ en website type wordt in hetzelfde veld opgeslagen en zou exact hetzelfde type moeten hebben, wat kan leiden tot frustratie en verwarring.
- Door entiteiten zonder gemeenschappelijke velden op te slaan, stopt Lucene om documenten effectief te comprimeren.
Alternatieven voor kaarttypen
Hoewel de beslissing is genomen, moeten we nog steeds verschillende soorten gegevens scheiden. Het eerste alternatief is nu: aparte documenten in hun eigen index wat twee voordelen heeft:
- Nu gegevens in elke index gebruikelijk zijn, kan Lucene heel gemakkelijk zijn eigen technieken voor gegevenscompressie toepassen.
- Nu alle documenten in een index dezelfde velden hebben, nemen de zoekmogelijkheden in volledige tekst fenomenaal toe naarmate de score van elk document is toegenomen.
Een ander alternatief voor het scheiden van de gegevens is het handhaven van een gewoonte _type veld in elk document dat we invoegen, zoals:
PUT db_name/doc/123"type": "gebruiker",
"id": 123,
"naam": "Shubham",
"website": 1
PUT db_name/doc/website
"type": "website",
"id": 1,
"title": "LinuxHint",
"link": "https://linuxhint.com/"
Dit is een uitstekend gebruik als u op zoek bent naar een complete oplossing op maat.
Schema voor het verwijderen van toewijzingstypen
Omdat het verwijderen van Mapping Types een grote verandering is, voert het ES-team het proces langzaam uit. Hier is een schema voor de uitrol geëxtraheerd uit elastiek.co:
- Elasticsearch 7.X
- De type parameter in URL's zijn optioneel. Voor het indexeren van een document is bijvoorbeeld niet langer een documenttype nodig.
- De _standaard_ toewijzingstype is verwijderd.
- Elasticsearch 8.X
- De type parameter wordt niet langer ondersteund in URL's.
- De include_type_name parameter is standaard ingesteld op: vals.
- Elasticsearch 9.X
- De include_type_name parameter is verwijderd.
Conclusie
In deze les hebben we gekeken waarom Elasticsearch-toewijzingstypen zijn verwijderd en in de komende versies volledig niet meer worden ondersteund.