Por que os tipos de mapeamento de ES foram removidos no ES V6.0?

Por que os tipos de mapeamento de ES foram removidos no ES V6.0?

O que são tipos de mapeamento?

No Elasticsearch, cada documento pertence a um índice e um tipo. Um índice pode ser considerado como um banco de dados, enquanto um tipo pode ser visto como uma tabela quando comparado a um banco de dados relacional. Um tipo de mapeamento era uma partição lógica de um objeto com outros objetos que pertenciam a outros tipos de mapeamento no mesmo índice.

Cada tipo de mapeamento tem seus próprios campos. Por exemplo, um tipo de do utilizador pode ter campos a seguir:


"ID": 123,
"Nome": "Shubham",
"Site": 1

Outro tipo de mapeamento no mesmo índice local na rede Internet pode ter campos a seguir que são completamente diferentes do do utilizador tipo:


"ID": 1,
"Title": "Linuxhint",
"Link": "https: // linuxhint.com/"

Ao procurar um documento em um índice, a pesquisa poderia ter sido limitada a um único documento especificando um único campo como:

Obtenha idx_name/usuário, site/_search

"consulta":
"corresponder":
"ID": 1


O _tipo O campo dos documentos foi combinado com o seu _eu ia para gerar um _uid Campo então documentos com o mesmo _eu ia poderia existir em um único índice.

Leia o Elasticsearch Tutorial para iniciantes para obter uma compreensão mais profunda da arquitetura ElasticSearch e começar com ele com a instalação Elasticsearch no Ubuntu.

Por que os tipos de mapeamento estão sendo removidos?

Assim como o que dissemos acima enquanto explicava como o índice e os tipos eram semelhantes a um banco de dados e uma tabela em um banco de dados relacional, a equipe Elasticsearch pensou o mesmo, mas esse não foi o caso, pois o Lucene Engine não segue a mesma analogia. Isso é por causa dos seguintes motivos:

  • Em um banco de dados relacional, as tabelas são independentes uma da outra e o nome das colunas, mesmo que sejam as mesmas, não têm relação entre eles. Este não é o caso dos campos nos tipos de mapeamento como em ES, Campos com o mesmo nome são tratados como o mesmo campo de motor Lucene internamente.
  • No exemplo acima, o campo _eu ia em do utilizador tipo e local na rede Internet O tipo é armazenado no mesmo campo e deve ter exatamente o mesmo tipo que pode levar à frustração e confusão.
  • O armazenamento de entidades sem campos em comum para Lucene para comprimir documentos de maneira eficaz.

Alternativas aos tipos de mapeamento

Embora a decisão tenha sido tomada, ainda precisamos separar diferentes tipos de dados. Agora, a primeira alternativa é Documentos separados em seu próprio índice que tem duas vantagens:

  • Agora que os dados são comuns em todos os índices, o Lucene pode facilmente aplicar suas próprias técnicas de compactação de dados.
  • Agora que todos os documentos em um índice têm os mesmos campos, as habilidades de pesquisa de texto completo aumentam fenomenalmente à medida que a pontuação de cada documento aumentou.

Outra alternativa para separar os dados é manter um costume _tipo Campo em cada documento que inserimos, como:

Coloque db_name/doc/123

"Tipo": "Usuário",
"ID": 123,
"Nome": "Shubham",
"Site": 1

Coloque DB_NAME/DOC/SITE

"Tipo": "Site",
"ID": 1,
"Title": "Linuxhint",
"Link": "https: // linuxhint.com/"

Este é um excelente uso se você estiver procurando uma solução personalizada completa.

Agendal para a remoção de tipos de mapeamento

Como remover os tipos de mapeamento é uma grande mudança, a equipe da ES está fazendo o processo lentamente. Aqui está um cronograma para o lançamento extraído de elástico.CO:

  • Elasticsearch 7.x
    • O tipo O parâmetro nos URLs é opcional. Por exemplo, a indexação de um documento não requer mais um tipo de documento.
    • O _padrão_ O tipo de mapeamento é removido.
  • Elasticsearch 8.x
    • O tipo O parâmetro não é mais suportado em URLs.
    • O Incluir_type_name Padrões de parâmetro para falso.
  • Elasticsearch 9.x
    • O Incluir_type_name O parâmetro é removido.

Conclusão

Nesta lição, analisamos por que os tipos de mapeamento do Elasticsearch foram removidos e não serão completamente suportados nas versões próximas.