O que são tipos de mapeamento?
No Elasticsearch, cada documento pertence a um Índice e a um Tipo. Um índice pode ser considerado 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 os seguintes campos:
"id": 123,
"nome": "Shubham",
"site": 1
Outro tipo de mapeamento no mesmo índice local na rede Internet pode ter os seguintes campos que são completamente diferentes do do utilizador modelo:
"id": 1,
"title": "LinuxHint",
"link": "https: // linuxhint.com / "
Ao pesquisar um documento em um índice, a pesquisa poderia ter sido limitada a um único documento, especificando um único campo como:
GET idx_name / user, website / _search"inquerir":
"partida":
"id": 1
O _modelo campo dos documentos foi combinado com o seu _eu ia para gerar um _uid campo para documentos com o mesmo _eu ia poderia existir em um único índice.
Leia o Tutorial do Elasticsearch para iniciantes para uma compreensão mais profunda da Arquitetura do Elasticsearch e comece a usá-lo com Instalar ElasticSearch no Ubuntu.
Por que os tipos de mapeamento estão sendo removidos?
Assim como o que dissemos acima ao explicar como Índice e Tipos eram semelhantes a um Banco de Dados e a uma Tabela em um Banco de Dados Relacional, a equipe do Elasticsearch pensava o mesmo, mas este não era o caso, pois Lucene Engine não segue a mesma analogia. Isso ocorre pelos seguintes motivos:
- Em um Banco de Dados Relacional, as tabelas são independentes umas das outras e os nomes das colunas, mesmo que sejam iguais, não têm relação entre si. Este não é o caso com campos em tipos de mapeamento como em ES, campos com o mesmo nome são tratados como o mesmo campo Lucene Engine internamente.
- No exemplo acima, o campo _eu ia dentro do utilizador digite e local na rede Internet tipo é armazenado no mesmo campo e deve ter exatamente o mesmo tipo, o que pode levar à frustração e confusão.
- Armazenar entidades sem campos em comum impede o Lucene de compactar documentos de forma eficaz.
Alternativas para 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, Lucene pode facilmente aplicar suas próprias técnicas de compressã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 aumenta.
Outra alternativa para separar os dados é manter um padrão _modelo campo em cada documento que inserimos, como:
PUT nome_bd / doc / 123"tipo": "usuário",
"id": 123,
"nome": "Shubham",
"site": 1
PUT nome_bd / doc / site
"tipo": "site",
"id": 1,
"title": "LinuxHint",
"link": "https: // linuxhint.com / "
Este é um excelente uso se você está procurando uma solução personalizada completa.
Programado para remoção de tipos de mapeamento
Como remover os tipos de mapeamento é uma grande mudança, a equipe ES está fazendo o processo lentamente. Aqui está um cronograma para o lançamento extraído do elástico.co:
- Elasticsearch 7.x
- O modelo parâmetro em URLs são opcionais. Por exemplo, indexar um documento não requer mais um tipo de documento.
- O _padrão_ tipo de mapeamento foi removido.
- Elasticsearch 8.x
- O modelo parâmetro não é mais compatível com URLs.
- O include_type_name parâmetro padrão para falso.
- Elasticsearch 9.x
- O include_type_name parâmetro é removido.
Conclusão
Nesta lição, vimos por que os tipos de mapeamento Elasticsearch foram removidos e não serão totalmente compatíveis nas próximas versões.