O que é um índice do Elasticsearch?

O termo índice está bastante sobrecarregado no mundo da tecnologia. Se você perguntasse à maioria dos desenvolvedores o que é um índice, eles poderiam dizer que geralmente se refere a uma estrutura de dados em um banco de dados relacional (RDBMS) associado a uma tabela, o que melhora a velocidade das operações de recuperação de dados.
Mas o que é um índice do Elasticsearch®? Um índice do Elasticsearch é um espaço de nome lógico que contém uma coleção de documentos, onde cada documento é uma coleção de campos — que, por sua vez, são pares de chave-valor que contêm seus dados.
Como um índice do Elasticsearch é diferente de um banco de dados relacional?
Os índices do Elasticsearch não são os mesmos que você encontraria em um banco de dados relacional. Pense em um cluster do Elasticsearch como um banco de dados que pode conter muitos índices que você pode considerar como uma tabela e onde, dentro de cada índice, você tem muitos documentos.
- RDBMS => bancos de dados => tabelas => colunas/linhas
- Elasticsearch => clusters => índices => shards => documentos com pares de chave-valor
Embora o Elasticsearch armazene documentos JSON, o que você insere no índice é incrivelmente flexível. É um processo rápido para começar a funcionar usando a infinidade de integrações e Beats disponíveis. Ou você pode ir um pouco além e definir seus próprios processos ETL usando Ingest Pipelines ou Logstash®, com a ajuda dos inúmeros processadores e plugins deles.
Outra diferença em relação aos bancos de dados relacionais é a possibilidade de importar dados sem a necessidade de definir um esquema previamente.Os tipos dinâmicos são uma ótima maneira de começar rapidamente ou de lidar com campos inesperados nos documentos. Depois de configurar tudo, você pode mudar para um esquema fixo para melhorar o desempenho.
Os campos de tempo de execução são outro recurso interessante que permite criar esquemas na leitura ou na gravação. Eles podem ser adicionados a um documento existente e usados para derivar um novo campo, ou você pode criar um campo de tempo de execução no momento da consulta. Pense neles como valores calculados usando scripts que podem ler o código-fonte do documento.
Veja agora a diferença entre bancos de dados Elasticsearch e relacionais. Experimente gratuitamente hoje mesmo com uma conta de teste no Elastic Cloud.
Como os dados interagem com a API intuitiva do Elasticsearch
O Elasticsearch fornece uma API baseada em JSON RESTful para interagir com dados de documentos. Você pode indexar, buscar, atualizar e excluir documentos enviando requisições HTTP para os endpoints apropriados do cluster. Essas operações semelhantes a CRUDs podem ocorrer em nível de documento individual ou no próprio nível do índice. Se preferir, também existem bibliotecas clientes específicas de linguagem que você pode usar em vez do REST direto.
O exemplo a seguir cria um documento em um índice chamado "playwrights" com um document_id atribuído de 1. Observe que não precisamos criar nenhum esquema ou configuração prévia; simplesmente inserimos nossos dados.
POST /playwrights/_doc/1
{
"firstname": "William",
"lastname": "Shakespeare"
}Podemos ainda adicionar documentos e campos como quisermos, o que não é algo que você poderia fazer facilmente com um banco de dados relacional.
POST /playwrights/_doc/2
{
"firstname": "Samuel",
"lastname": "Beckett",
"year_of_birth": 1906
}Agora podemos consultar todos os documentos usando o endpoint de busca.
GET /playwrights/_search
{
"query": {
"match_all": {}
}
}Ou podemos consultar um ano de nascimento específico.
GET /playwrights/_search
{
"query": {
“match": {
“year_of_birth": 1906
}
}
}Além da consulta básica, o Elasticsearch oferece recursos avançados de busca, como correspondência difusa, stemização, pontuação de relevância, realce e tokenização, que divide o texto em partes menores, chamadas de tokens. Na maioria dos casos, esses tokens são palavras individuais, mas existem muitos tokenizers diferentes disponíveis.
Por que os dados desnormalizados são essenciais para uma recuperação de dados mais rápida?
Em bancos de dados relacionais, a normalização é frequentemente aplicada para eliminar a redundância de dados e garantir a consistência dos dados. Por exemplo, você pode ter tabelas separadas para clientes, produtos e pedidos.
No Elasticsearch, a desnormalização é uma prática comum. Em vez de dividir os dados em várias tabelas, você armazena todas as informações relevantes em um único documento JSON. Um documento de pedido conteria as informações do cliente e do produto, em vez de conter chaves estrangeiras referindo-se a índices separados de produtos e clientes. Isso permite uma recuperação de dados mais rápida e eficiente no Elasticsearch durante as operações de busca. Como regra geral, o armazenamento pode ser mais barato do que os custos de computação para a junção de dados.
Como o Elasticsearch garante escalabilidade em sistemas distribuídos?
Cada índice é identificado por um nome exclusivo e dividido em um ou mais shards, que são subconjuntos menores do índice que permitem o processamento paralelo e o armazenamento distribuído em um cluster de Nodes do Elasticsearch. Os shards têm um shard primário e um shard de réplica; as réplicas fornecem cópias redundantes de seus dados para proteger contra falhas de hardware e aumentar a capacidade de atender a solicitações de leitura, como pesquisar ou recuperar um documento.
Adicionar mais nós ao cluster proporciona mais capacidade para indexação e busca, algo que não é tão facilmente alcançado com um banco de dados relacional.
Voltando ao nosso exemplo de playwrights acima, se executarmos o seguinte, podemos ver os mapeamentos de tipo que o Elasticsearch inferiu automaticamente e o número de shards e réplicas que o índice atribuiu.
GET /playwrights/
Quais tipos de dados podem ser indexados no Elasticsearch?
O Elasticsearch pode indexar muitos tipos de dados — primeiramente texto, mas também dados numéricos e de geolocalização. Ele também pode armazenar vetores densos que são usados em buscas de similaridade. Vamos analisar cada um deles por sua vez.
Índices invertidos para busca textual/lexical
O Elasticsearch também escolherá a melhor estrutura de dados subjacente a ser usada para um determinado tipo de campo. Por exemplo, o texto seria tokenizado e então armazenado em um índice invertido, que é uma estrutura que lista cada token exclusivo que aparece em qualquer documento e identifica todos os documentos em que cada palavra ocorre.
A tabela a seguir mostra a composição geral de um índice invertido. Podemos ver que, se procurássemos o termo “Londres”, descobriríamos que ele ocorre em seis documentos diferentes no índice. É esse índice invertido que nos permite realizar consultas textuais muito rapidamente.
Token | IDs de documento |
Londres | 1,3,8,12,23,88 |
Paris | 1,12,88 |
| Madri | 3,8,12 |
| Berlim | 12,23 |
Funcionalidades de busca numérica e de geolocalização para uma análise espacial eficiente
Dados numéricos e de geolocalização seriam armazenados em árvores BKD, também conhecidas como índice Block KD-Tree, que é uma estrutura de dados usada em aplicações de engenharia para indexação espacial eficiente e consulta de dados multidimensionais. Ele organiza os pontos de dados em blocos, permitindo buscas de alcance rápido e consultas de vizinho mais próximo em grandes conjuntos de dados, o que o torna uma ferramenta valiosa para engenheiros que trabalham com análise e otimização de dados espaciais.
Busca vetorial/semântica com PLN
Você pode ter ouvido falar sobre busca vetorial, mas o que é? Os mecanismos de busca vetorial — conhecidos como bancos de dados vetoriais, pesquisa semântica ou cossenoidal — encontram os vizinhos mais próximos de uma determinada consulta (vetorizada). O poder da pesquisa vetorial é que ela descobre documentos semelhantes que não são uma correspondência textual exata, como seria exigido pelo exemplo de índice invertido acima; em vez disso, ela usa vetores que descrevem algum nível de similaridade.
Relacionado: O que é busca vetorial?
Alguns casos de uso comuns para busca vetorial são:
- Responder a perguntas
- Encontrar respostas para perguntas respondidas anteriormente, nas quais a pergunta feita é semelhante, mas não exatamente igual em forma de texto
- Fazer recomendações — por exemplo, um aplicativo de música encontrando músicas semelhantes com base nas suas preferências
Todos esses casos de uso utilizam vetores com dezenas de milhares de dimensões, fornecendo uma representação abrangente dos dados para uma avaliação precisa de similaridade e recomendações direcionadas.
O Elasticsearch oferece suporte para busca vetorial por meio do dense_vector como tipo de documento e sua capacidade de executar buscas de similaridade entre o vetor no documento e o termo de busca depois que ele foi convertido em vetor.
Para aqueles que desejam se aprofundar um pouco mais em IA generativa, também oferecemos ESRE, o Elasticsearch Relevance Engine™, que é projetado para alimentar aplicativos de busca baseados em inteligência artificial. ESRE oferece aos desenvolvedores um conjunto completo de algoritmos de recuperação sofisticados e a capacidade de integração com grandes modelos de linguagem.
O que você deve fazer a seguir
Aqui estão três maneiras para ajudar sua empresa a usar os dados da melhor forma:
- Inicie uma avaliação gratuita e veja como o Elastic Cloud pode ajudar sua empresa.
- Confira o webinar Introdução ao Elasticsearch.
- Conheça nossos produtos para ver como a Elasticsearch Platform funciona e como nossas soluções atenderão às suas necessidades.
Publicado originalmente em 24 de fevereiro de 2013; atualizado em 17 de julho de 2023.