DEV Community

Renata Bresolin
Renata Bresolin

Posted on

Otimizando buscas com grandes volumes de dados utilizando Scroll e Elasticsearch

Em algum momento da sua jornada no mundo da programação, você irá se deparar com algum problema que vai exigir analisar alternativas para resolve-lo, alternativas essas que não sejam as famosas gambiarras. 👀

Hoje vim compartilhar um pouco sobre a implementação de pesquisa utilizando o SCROLL no Elasticsearch.

INTRODUÇÃO:

Tínhamos uma demanda no meu trabalho onde precisávamos buscar e processar de forma assíncrona um volume grande de dados, já utilizávamos a busca no ES com o SEARCH, porém, devido ao aumento no volume de dados a serem buscados, o processo estava cada vez mais lento, causando erros de timeout e impactando diretamente na rotina de processos da empresa.

O mecanismo de scroll no Elasticsearch é especialmente útil quando você precisa recuperar uma grande quantidade de dados que não cabem em uma única resposta de pesquisa. Ele funciona criando um contexto de pesquisa que inclui todos os dados correspondentes à consulta e permite que você os acesse por meio de páginas de resultados.

PASSO A PASSO:

Como já existia uma forma de busca implementada no sistema, precisei adapta-lo para receber a opção de pesquisa via scroll também.

1. Iniciando uma Pesquisa com Scroll

Para iniciar uma pesquisa com scroll, você deve emitir uma pesquisa inicial usando a API de pesquisa do Elasticsearch. Nesta pesquisa, você deve especificar os parâmetros, filtros e tamanho da página.

No exemplo abaixo temos o size: 100, alguns filtros quaisquer e o parâmetro scroll: 1m, o qual está indicando que quero realizar uma busca onde o tempo limite para o scroll expirar será de 1 minuto.

Image description

2. Obtenha o scroll_id e os primeiros resultados

Após a pesquisa inicial, o Elasticsearch retornará um scroll_id e os primeiros dados correspondentes à consulta, no caso do exemplo acima, teremos os primeiros 100.

Image description

3. Recuperando resultados subsequentes com o scroll_id

Agora com o scroll_id, usamos esse identificador para recuperar os resultados subsequentes. Ao emitir uma nova pesquisa usando o scroll_id obteremos a próxima página de dados (mais 100).

Image description

  • Repita o processo utilizando o identificador scroll_id até que não haja mais dados a serem recuperados.
  • O scroll_id expirará após o tempo limite definido, dentro de cada ação subsequente.

4. Considerações Finais

Com a implementação do scroll no Elasticsearch foi possível recuperar grandes volumes de dados de forma controlada e eficaz.
É importante lembrar de ajustar o tempo limite do scroll com base no desempenho do seu cluster e nas necessidades do seu caso de uso específico.
Com a estratégia certa de pesquisa, você poderá aproveitar ao máximo os recursos do Elasticsearch e recuperar seus dados de maneira eficiente e escalável.

Referências:

Top comments (2)

Collapse
 
iagofse profile image
iago-f-s-e

Gostei bastante do artigo, obrigado por compartilhar.

Collapse
 
jamalcrf profile image
Lucas Araújo

Muito bom artigo, parabéns!