Vad är kartläggningstyper?
I Elasticsearch tillhör varje dokument ett index och en typ. Ett index kan betraktas som en databas medan en typ kan ses som en tabell jämfört med en relationsdatabas. En kartläggningstyp var en logisk partition av ett objekt med andra objekt som tillhörde andra kartläggningstyper i samma index.
Varje mappningstyp har sina egna fält. Till exempel en typ av användare kan ha följande fält:
"id": 123,
"name": "Shubham",
"webbplats": 1
En annan mappningstyp i samma index hemsida kan ha följande fält som skiljer sig helt från användare typ:
"id": 1,
"title": "LinuxHint",
"länk": "https: // linuxhint.com / "
När du söker efter ett dokument i ett index kan sökningen ha begränsats till ett enda dokument genom att ange ett enda fält som:
GET idx_name / user, website / _search"fråga":
"match":
"id": 1
De _typ dokumentfältet kombinerades med dess _id att generera en _uid fält så dokument med samma _id kan existera i ett enda index.
Läs Elasticsearch Tutorial för nybörjare för en djupare förståelse för Elasticsearch Architecture och kom igång med den med Install ElasticSearch på Ubuntu.
Varför tas kartläggningstyper bort?
Precis som vad vi sa ovan när vi förklarade hur index och typer liknade en databas och en tabell i en relationsdatabas, tänkte Elasticsearch-teamet samma sak men så var inte fallet eftersom Lucene Engine inte följer samma analogi. Detta beror på följande skäl:
- I en relationsdatabas är tabeller oberoende av varandra och kolumnnamn, även om de är desamma har ingen relation mellan dem. Detta är inte fallet med fält i mappningstyper som i ES, fält med samma namn behandlas som samma Lucene Engine-fält internt.
- I exemplet ovan, fältet _id i användare typ och hemsida lagras i samma fält och bör ha exakt samma typ som kan leda till frustration och förvirring.
- Att lagra enheter utan gemensamma fält hindrar Lucene att komprimera dokument effektivt.
Alternativ till kartläggningstyper
Även om beslutet har fattats måste vi fortfarande skilja på olika typer av data. Nu är det första alternativet att separata dokument i sitt eget index som har två fördelar:
- Nu när data är vanliga i varje index kan Lucene mycket enkelt använda sina egna datakomprimeringstekniker.
- Nu när alla dokument i ett index har samma fält, ökar förmågan att söka i fulltext fenomenalt när poängen för varje dokument har ökat.
Ett annat alternativ till att separera data är att behålla en anpassning _typ fält i varje dokument vi infogar, som:
PUT db_name / doc / 123"type": "user",
"id": 123,
"name": "Shubham",
"webbplats": 1
PUT db_name / doc / webbplats
"type": "webbplats",
"id": 1,
"title": "LinuxHint",
"länk": "https: // linuxhint.com / "
Detta är en utmärkt användning om du letar efter en komplett anpassad lösning.
Schema för borttagning av mappningstyper
Eftersom borttagning av mappningstyper är en stor förändring gör ES-teamet processen långsamt. Här är ett schema för utrullningen extraherad från elastiken.co:
- Elasticsearch 7.x
- De typ parameter i webbadresser är valfria. Exempelvis kräver indexering av ett dokument inte längre en dokumenttyp.
- De _standard_ mappningstyp har tagits bort.
- Elasticsearch 8.x
- De typ parametern stöds inte längre i webbadresser.
- De include_type_name parameter är som standard falsk.
- Elasticsearch 9.x
- De include_type_name parametern tas bort.
Slutsats
I den här lektionen tittade vi på varför Elasticsearch Mapping-typer togs bort och kommer inte att stödjas i kommande versioner.