Perché i tipi di mappatura ES sono stati rimossi in ES V6.0?

Perché i tipi di mappatura ES sono stati rimossi in ES V6.0?

Cosa sono i tipi di mappatura?

In Elasticsearch, ogni documento appartiene a un indice e 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 campi seguenti che sono completamente diversi da utente tipo:


"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 singolo campo come:

Ottieni idx_name/utente, sito Web/_search

"query":
"incontro":
"id": 1


IL _tipo Il campo dei documenti è stato combinato con il suo _id per generare un _uid campo Quindi documenti con lo stesso _id potrebbe esistere in un unico indice.

Leggi ElasticSearch Tutorial per principianti per una comprensione più profonda dell'architettura di Elasticsearch e inizia con l'installazione di Elasticsearch su Ubuntu.

Perché vengono rimossi i tipi di mappatura?

Proprio come quello che abbiamo detto sopra, spiegando come l'indice e i tipi fossero simili a un database e una tabella in un database relazionale, il team di Elasticsearch ha pensato allo stesso modo, ma questo non era così che il motore Lucene non segue la stessa analogia. Ciò è dovuto ai seguenti motivi:

  • In un database relazionale, le tabelle sono indipendenti l'una dall'altra e il nome delle colonne, anche se 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 sono trattati come lo stesso campo del motore Lucene internamente.
  • Nell'esempio sopra, il campo _id In utente tipo e sito web Il tipo è memorizzato nello stesso campo e dovrebbe avere esattamente lo stesso tipo che può portare alla frustrazione e alla confusione.
  • La memorizzazione di entità senza campi in comune smette Lucene per comprimere i documenti in modo efficace.

Alternative ai tipi di mappatura

Sebbene la decisione sia stata presa, dobbiamo ancora separare diversi tipi di dati. Ora, la prima alternativa è a documenti separati nel proprio indice che ha due vantaggi:

  • Ora che i dati sono comuni in ogni indice, Lucene può applicare 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 con l'aumentare del punteggio di ciascun documento.

Un'altra alternativa alla separazione dei dati è la manutenzione di un'usanza _tipo campo in ogni documento inseriamo, come:

Metti db_name/doc/123

"Digita": "Utente",
"id": 123,
"Nome": "Shubham",
"Sito web": 1

Metti db_name/doc/sito Web

"Tipo": "Sito web",
"id": 1,
"Titolo": "Linuxhint",
"link": "https: // linuxhint.com/"

Questo è un utilizzo eccellente se stai cercando una soluzione personalizzata completa.

Programmabile per la rimozione dei tipi di mappatura

Poiché la rimozione dei tipi di mappatura è un grande cambiamento, il team ES sta facendo lentamente il processo. Ecco un programma per il lancio estratto dall'elastic.CO:

  • Elasticsearch 7.X
    • IL tipo Il parametro negli URL è facoltativo. Ad esempio, l'indicizzazione di un documento non richiede più un tipo di documento.
    • IL _predefinito_ Il tipo di mappatura viene rimosso.
  • Elasticsearch 8.X
    • IL tipo Il parametro non è più supportato negli URL.
    • IL include_type_name Parametro predefinito a falso.
  • Elasticsearch 9.X
    • IL include_type_name Il parametro viene rimosso.

Conclusione

In questa lezione, abbiamo esaminato il motivo per cui Elasticsearch Mapping tipi rimossi e non saranno completamente non supportati nelle versioni in arrivo.