1
resposta

Indice Invertido (elasticsearch)

Não entendi como funciona ainda essa questão dos índices invertidos, poderia explicar melhor?

1 resposta

Olá Thiago, tudo bem?

De fato o índice invertido é a parte mais complicada do elasticsearch, mas também responsável por fazer grande parte da mágica :)

O índice invertido nada mais é do que o mecanismo em que o elasticsearch associa os "tokens" com os documentos encontrados

Vou basear a minha explicação utilizando um exemplo:

Suponha que temos essa pessoa em nosso índice

{
    "nome": "João Silva",
    "interesses": ["futebol", "música", "literatura"],
    "cidade": "São Paulo",
    "formação": "Letras",
    "estado": "SP",
    "país": "Brasil"
}

Para ter uma busca mais eficiente o elasticsearch irá quebrar esse nosso usuário (documento) em tokens ou seja em pequenos pedaços, ficando algo como:

João
Silva
futebol
música

E isso será armazenado em um outro documento que conta os tokens e os documentos onde foram encontrados, ou seja, se inserirmos outra pessoa que também tenha interesse por música, e depois fizermos uma busca o nosso índice invertido terá algo parecido como :

Termo | Frequência | Documento
---------------------------------------
música   |       2        |       1, 2
futebol  |       1        |        1
---------------------------------------

Ou seja temos para o termo música temos uma frequência ( quantidade de vezes que esse aparece juntando todos os documentos) e os documentos onde foram encontrados ( em nosso caso o documento do João Silva e do outro usuário inserido)

Mas no que o índice invertido nos auxilia?

Primeiro que ele torna a busca mais rápido, e segundo que esses tokens são gerados pelos nossos analyzers então podemos quando estamos estruturando nosso índice definir qual será o analisador que iremos utilizar parar criar tokens melhores:

Se procurarmos em nossos índice termo musica ou MUSICA não iremos encontrar nenhum usuário, porém podemos definir que o nosso campo interesse será analisado utilizando o portuguese dessa maneira os tokens gerados agora serão:

music
futebol

E dessa maneira iremos encontrar tanto música, musica ou MUSICA porque estamos gerando tokens eficiente de busca :)

Conseguiu compreender?

Então de maneira reduzida podemos dizer que o índice invertido é a forma que o elastic search utiliza para quebrar as informações do nosso documento para armazenar onde encontrou o termo e qual a frequência, e podemos modificar a maneira como geramos esses tokens para ter resultado ainda melhores :)

Abraços e Bons Estudos!