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.
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.
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).
- 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)
Gostei bastante do artigo, obrigado por compartilhar.
Muito bom artigo, parabéns!