Cosa sono i tipi di mappatura?
In Elasticsearch, ogni documento appartiene a un Indice e a un Tipo. Un indice può essere considerato come un database mentre un tipo può essere visto come una tabella rispetto a un database relazionale. Un tipo di mappatura era una partizione logica di un oggetto con altri oggetti che appartenevano ad altri tipi di mappatura nello stesso indice.
Ogni tipo di mappatura ha i suoi campi. Ad esempio, un tipo di utente può avere i seguenti campi:
"id": 123,
"nome": "Shubham",
"sito web": 1
Un altro tipo di mappatura nello stesso indice sito web può avere i seguenti campi completamente diversi da utente genere:
"id" : 1,
"titolo": "LinuxHint",
"link": "https://linuxhint.com/"
Durante la ricerca di un documento in un indice, la ricerca avrebbe potuto essere limitata a un singolo documento specificando un unico campo come:
GET nome_idx/utente,sito web/_ricerca"richiesta":
"incontro":
"id": 1
Il _genere campo dei documenti è stato combinato con il suo _id per generare a _uid campo quindi documenti con lo stesso _id potrebbe esistere in un unico indice.
Leggi il tutorial Elasticsearch per principianti per una comprensione più approfondita dell'architettura Elasticsearch e inizia con Installa ElasticSearch su Ubuntu.
Perché i tipi di mappatura vengono rimossi??
Proprio come abbiamo detto sopra mentre spiegavamo come l'indice e i tipi fossero simili a un database e una tabella in un database relazionale, il team di Elasticsearch pensava lo stesso, ma non era così poiché Lucene Engine non segue la stessa analogia. Ciò è dovuto ai seguenti motivi:
- In un Database Relazionale le tabelle sono indipendenti tra loro e il nome delle colonne, anche se sono uguali non hanno alcuna relazione tra loro. Questo non è il caso dei campi nei tipi di mappatura come in ES, i campi con lo stesso nome vengono trattati internamente come lo stesso campo Lucene Engine.
- Nell'esempio sopra, il campo _id nel utente digita e sito web type è memorizzato nello stesso campo e dovrebbe avere esattamente lo stesso tipo che può portare a frustrazione e confusione.
- L'archiviazione di entità senza campi in comune impedisce a Lucene di comprimere i documenti in modo efficace.
Alternative ai tipi di mappatura
Sebbene la decisione sia stata presa, dobbiamo ancora separare i diversi tipi di dati. Ora, la prima alternativa è documenti separati nel proprio indice che ha due vantaggi:
- Ora che i dati sono comuni in ogni indice, Lucene può applicare molto facilmente le proprie tecniche di compressione dei dati.
- Ora che tutti i documenti in un indice hanno gli stessi campi, le capacità di ricerca full-text aumentano in modo fenomenale man mano che il punteggio di ciascun documento è aumentato.
Un'altra alternativa alla separazione dei dati è mantenere un'abitudine _genere campo in ogni documento che inseriamo, come:
PUT db_name/doc/123"tipo": "utente",
"id": 123,
"nome": "Shubham",
"sito web": 1
PUT db_name/doc/website
"tipo": "sito web",
"id": 1,
"title": "LinuxHint",
"link": "https://linuxhint.com/"
Questo è un utilizzo eccellente se stai cercando una soluzione personalizzata completa.
Programma per la rimozione dei tipi di mappatura
Poiché rimuovere i tipi di mappatura è un grande cambiamento, il team di ES sta eseguendo il processo lentamente. Ecco un programma per il roll out estratto da elastico.co:
- Elasticsearch 7.X
- Il genere parametro negli URL sono facoltativi. Ad esempio, l'indicizzazione di un documento non richiede più un tipo di documento.
- Il _predefinito_ il tipo di mappatura è stato rimosso.
- Elasticsearch 8.X
- Il genere il parametro non è più supportato negli URL.
- Il include_type_name il parametro è predefinito su falso.
- Elasticsearch 9.X
- Il include_type_name il parametro viene rimosso.
Conclusione
In questa lezione, abbiamo esaminato il motivo per cui i tipi di mapping Elasticsearch sono stati rimossi e non saranno completamente supportati nelle prossime versioni.