<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Renata Bresolin</title>
    <description>The latest articles on DEV Community by Renata Bresolin (@renatabresolin).</description>
    <link>https://dev.to/renatabresolin</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1167209%2Fc14d8104-a2da-461c-876e-9dc97f89d9c1.jpg</url>
      <title>DEV Community: Renata Bresolin</title>
      <link>https://dev.to/renatabresolin</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/renatabresolin"/>
    <language>en</language>
    <item>
      <title>Otimizando buscas com grandes volumes de dados utilizando Scroll e Elasticsearch</title>
      <dc:creator>Renata Bresolin</dc:creator>
      <pubDate>Wed, 04 Oct 2023 19:46:58 +0000</pubDate>
      <link>https://dev.to/renatabresolin/otimizando-buscas-com-grandes-volumes-de-dados-utilizando-scroll-e-elasticsearch-31ha</link>
      <guid>https://dev.to/renatabresolin/otimizando-buscas-com-grandes-volumes-de-dados-utilizando-scroll-e-elasticsearch-31ha</guid>
      <description>&lt;p&gt;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 &lt;em&gt;gambiarras&lt;/em&gt;. 👀&lt;/p&gt;

&lt;p&gt;Hoje vim compartilhar um pouco sobre a implementação de pesquisa utilizando o &lt;a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/scroll-api.html" rel="noopener noreferrer"&gt;&lt;code&gt;SCROLL&lt;/code&gt;&lt;/a&gt; no Elasticsearch.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;INTRODUÇÃO:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;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 &lt;a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/search-search.html" rel="noopener noreferrer"&gt;&lt;code&gt;SEARCH&lt;/code&gt;&lt;/a&gt;, 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.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;PASSO A PASSO:&lt;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;em&gt;1. Iniciando uma Pesquisa com Scroll&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff8b8h4w7qla6zaihhu65.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff8b8h4w7qla6zaihhu65.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;2. Obtenha o scroll_id e os primeiros resultados&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7obpdx8f4uaj0ddn7dyr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7obpdx8f4uaj0ddn7dyr.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;3. Recuperando resultados subsequentes com o scroll_id&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzj3jyalraoodvd9969mv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzj3jyalraoodvd9969mv.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Repita o processo utilizando o identificador &lt;code&gt;scroll_id&lt;/code&gt; até que não haja mais dados a serem recuperados.&lt;/li&gt;
&lt;li&gt;O &lt;code&gt;scroll_id&lt;/code&gt; expirará após o tempo limite definido, dentro de cada ação subsequente.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;4. Considerações Finais&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Com a implementação do scroll no Elasticsearch foi possível recuperar grandes volumes de dados de forma controlada e eficaz.&lt;br&gt;
É 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.&lt;br&gt;
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.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Referências:&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/scroll-api.html" rel="noopener noreferrer"&gt;https://www.elastic.co/guide/en/elasticsearch/reference/current/scroll-api.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://walde.co/2016/07/22/elasticsearch-paginacao/" rel="noopener noreferrer"&gt;https://walde.co/2016/07/22/elasticsearch-paginacao/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://opster.com/guides/elasticsearch/glossary/elasticsearch-scroll/" rel="noopener noreferrer"&gt;https://opster.com/guides/elasticsearch/glossary/elasticsearch-scroll/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>rails</category>
      <category>ruby</category>
      <category>elasticsearch</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
