<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
  <channel>
    <title><![CDATA[Kofi Bartlett - Elasticsearch Labs]]></title>
    <description><![CDATA[Articles and tutorials from the Search team at Elastic]]></description>
    <copyright><![CDATA[© 2026. Elasticsearch B.V. All Rights Reserved]]></copyright>
    <image>
      <title><![CDATA[Kofi Bartlett - Elasticsearch Labs]]></title>
      <url>https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt1121c0bf0e8a6e65/6a88da6340a1841030ef456f/search-labs-thumbnail.png</url>
      <link>https://www.elastic.co/pt/search-labs/author/kofi-bartlett</link>
    </image>
    <link>https://www.elastic.co/pt/search-labs/author/kofi-bartlett</link>
    <atom:link href="https://www.elastic.co/pt/search-labs/rss/author/kofi-bartlett.xml" rel="self" type="application/rss+xml"/>
    <language><![CDATA[pt]]></language>
    <lastBuildDate>Wed, 23 Sep 2026 08:37:58 GMT</lastBuildDate>
  <item>
    <title><![CDATA[Exibindo campos em um índice do Elasticsearch]]></title>
    <description><![CDATA[Explorando técnicas para exibir campos em um índice do Elasticsearch.
]]></description>
    <content:encoded><![CDATA[<p>Neste artigo, discutiremos como exibir campos em um índice do Elasticsearch. Isso pode ser útil para entender a estrutura dos seus dados, identificar campos específicos e solucionar problemas. Abordaremos os seguintes tópicos:</p><ol><li><p><a href="https://www.elastic.co/search-labs/blog/displaying-fields-in-an-elasticsearch-index#1.-using-the--mapping-api-to-retrieve-field-information">Utilizando a </a><a href="https://www.elastic.co/search-labs/blog/displaying-fields-in-an-elasticsearch-index#1.-using-the--mapping-api-to-retrieve-field-information"> API</a><a href="https://www.elastic.co/search-labs/blog/displaying-fields-in-an-elasticsearch-index#1.-using-the--mapping-api-to-retrieve-field-information"><code>_mapping</code></a>para recuperar informações de campo</p></li><li><p><a href="https://www.elastic.co/search-labs/blog/displaying-fields-in-an-elasticsearch-index#2.-using-the--search-api-to-display-field-values">Utilizando a </a><a href="https://www.elastic.co/search-labs/blog/displaying-fields-in-an-elasticsearch-index#2.-using-the--search-api-to-display-field-values"> API</a><a href="https://www.elastic.co/search-labs/blog/displaying-fields-in-an-elasticsearch-index#2.-using-the--search-api-to-display-field-values"><code>_search</code></a>para exibir valores de campo</p></li><li><p><a href="https://www.elastic.co/search-labs/blog/displaying-fields-in-an-elasticsearch-index#3.-filtering-fields-using-the-fields-parameter">Filtrar campos usando o </a><a href="https://www.elastic.co/search-labs/blog/displaying-fields-in-an-elasticsearch-index#3.-filtering-fields-using-the-fields-parameter"> parâmetro</a><a href="https://www.elastic.co/search-labs/blog/displaying-fields-in-an-elasticsearch-index#3.-filtering-fields-using-the-fields-parameter"><code>fields</code></a></p></li><li><p><a href="https://www.elastic.co/search-labs/blog/displaying-fields-in-an-elasticsearch-index#4.-displaying-nested-fields">Exibindo campos aninhados</a></p></li></ol><h2>1. Utilizando a API _mapping para recuperar informações de campo</h2><p>A API <code>_mapping</code> permite recuperar a definição de mapeamento para um índice ou vários <a href="https://opster.com/guides/elasticsearch/glossary/elasticsearch-index/">índices</a>. Isso inclui informações sobre os campos, seus tipos de dados e outras propriedades. Para recuperar o mapeamento de um índice específico, utilize a seguinte solicitação:</p>GET /&lt;index_name&gt;/_mapping<p>Por exemplo, se você tiver um índice chamado <code>my_index</code>, poderá recuperar seu mapeamento com a seguinte solicitação:</p>GET /my_index/_mapping<p>A resposta incluirá a definição de mapeamento para o índice, que contém informações sobre os campos e suas propriedades.</p><p>Também é possível recuperar o mapeamento de um campo específico. Isso pode ser útil se o seu mapeamento for muito extenso e você quiser se concentrar apenas em um campo específico. Para obter o mapeamento de um campo específico, utilize a seguinte solicitação:</p>GET /my_index/_mapping/field/my_field<p>Você também pode recuperar os mapeamentos de vários campos separando seus nomes com vírgulas, como na seguinte solicitação:</p>GET /my_index/_mapping/field/my_field_1,my_field_2,my_field_3<h2>2. Usando a API _search para exibir valores de campo</h2><p>Para exibir os valores dos campos em um índice do Elasticsearch, você pode usar a API <code>_search</code> . Por padrão, a API <code>_search</code> retorna o campo <code>_source</code> , que contém o documento JSON original que foi indexado. Para exibir apenas campos específicos, você pode usar o parâmetro <code>_source</code> na solicitação de pesquisa.</p><p>Aqui está um exemplo de uma solicitação de pesquisa que retorna os valores dos campos <code>title</code> e <code>author</code> para documentos no índice <code>my_index</code> :</p>GET /my_index/_search
{
  "query": {
    "match_all": {}
  },
  "_source": ["title", "author"]
}<p>Neste exemplo, o parâmetro <code>_source</code> especifica os campos a serem retornados.</p><h2>3. Filtrar campos usando o parâmetro fields</h2><p>Você também pode usar o parâmetro <code>fields</code> para filtrar os campos retornados na resposta da pesquisa. Isso pode ser útil se você precisar apenas de campos específicos e quiser reduzir o tamanho da resposta. O parâmetro <code>fields</code> aceita uma matriz de nomes de campos ou padrões curinga.</p><p>Por exemplo, para retornar apenas os campos <code>title</code> e <code>author</code> para documentos no índice <code>my_index</code> , você pode usar a seguinte solicitação de pesquisa:</p>GET /my_index/_search
{
  "query": {
    "match_all": {}
  },
  "fields": ["title", "author"],
  "_source": false
}<p>Note que o parâmetro <code>_source</code> está definido como falso para não retornar o documento de origem.</p><p>Para retornar todos os campos com o tipo de dados <code>text</code> , você pode usar um padrão curinga como este:</p>GET /my_index/_search
{
  "query": {
    "match_all": {}
  },
  "fields": ["*.text"],
  "_source": false
}<h2>4. Exibição de campos aninhados</h2><p>Se o seu índice contiver campos aninhados, você pode usar a notação de ponto para especificar o caminho do campo aninhado no parâmetro <code>fields</code> . Por exemplo, se você tiver um campo aninhado chamado <code>address.city</code>, poderá incluí-lo na resposta da pesquisa desta forma:</p>GET /my_index/_search
{
  "query": {
    "match_all": {}
  },
  "fields": ["title", "author", "address.city"],
  "_source": false
}<p>Neste exemplo, a resposta da pesquisa incluirá os valores dos campos <code>title</code>, <code>author</code> e <code>address.city</code> .</p><h2>Conclusão</h2><p>Em conclusão, a exibição de campos em um índice do Elasticsearch pode ser realizada usando a API <code>_mapping</code> para recuperar informações do campo e a API <code>_search</code> para exibir os valores do campo. Você pode filtrar os campos retornados na resposta da pesquisa usando os parâmetros <code>_source</code> ou <code>fields</code> e exibir campos aninhados usando a notação de ponto. Essas técnicas podem ajudá-lo a entender a estrutura de seus dados, identificar campos específicos e solucionar problemas.</p>]]></content:encoded>
    <link>https://www.elastic.co/search-labs/blog/displaying-fields-in-an-elasticsearch-index</link>
    <guid isPermaLink="true">https://www.elastic.co/search-labs/blog/displaying-fields-in-an-elasticsearch-index</guid>
    <category><![CDATA[Dados de indexação]]></category>
    <dc:creator><![CDATA[Kofi Bartlett]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt3a1fcc771a2504e5/6a17f817abe0f23038dfebca/fa386d7bbaeab6855e62897ace8d7dca91a060b4-720x420.jpg" length="0" type="image/jpeg"/>
    <pubDate>Mon, 26 May 2025 00:00:00 GMT</pubDate>
  </item>
  <item>
    <title><![CDATA[Como otimizar o espaço em disco e o uso do Elasticsearch]]></title>
    <description><![CDATA[Saiba como evitar e lidar com casos em que o disco do Elasticsearch está muito cheio (uso excessivo) e quando a capacidade do disco é subutilizada para otimizar os custos do cluster.]]></description>
    <content:encoded><![CDATA[<p>O gerenciamento de disco é importante em qualquer banco de dados, e o Elasticsearch não é exceção. Se você não tiver espaço em disco suficiente disponível, o Elasticsearch deixará de alocar shards para o nó. Isso acabará por impedi-lo de gravar dados no cluster, com o risco potencial de perda de dados em sua aplicação. Por outro lado, se você tiver muito espaço em disco, estará pagando por mais recursos do que precisa.</p><h2>Informações básicas sobre marcas d'água</h2><p>Existem vários limites de "marca d'água" no seu cluster Elasticsearch que ajudam a monitorar o espaço em disco disponível. À medida que o disco de um nó se enche, o primeiro limite a ser ultrapassado será o "limite mínimo de espaço em disco". O segundo limite será então o “limite de marca d'água de disco alto”. Finalmente, será atingida a “fase de inundação do disco”. Assim que esse limite for ultrapassado, o cluster bloqueará a gravação em TODOS os índices que possuam um shard (primário ou réplica) no nó que atingiu o limite. As leituras (buscas) ainda serão possíveis.</p><h2>Como prevenir e lidar com casos em que o disco está muito cheio (sobreutilização)</h2><p>Existem vários métodos para lidar com casos em que o disco do Elasticsearch está muito cheio:</p><ol><li><p><strong>Excluir</strong> <strong>dados antigos:</strong> Normalmente, os dados não devem ser mantidos indefinidamente. Uma forma de prevenir e resolver o problema de disco cheio é garantir que, quando os dados atingirem uma certa idade, sejam arquivados e excluídos de forma confiável. Uma maneira de fazer isso é usar <a href="https://www.elastic.co/docs/manage-data/lifecycle/index-lifecycle-management">o ILM</a>.</p></li><li><p><strong>Adicionar capacidade de armazenamento:</strong> Se não for possível excluir os dados, talvez seja necessário adicionar mais nós de dados ou aumentar o tamanho dos discos para reter todos os dados sem afetar negativamente o desempenho. Se precisar adicionar capacidade de armazenamento ao cluster, considere se precisa adicionar apenas capacidade de armazenamento ou se deve adicionar também recursos de RAM e CPU em proporção adequada (consulte a seção sobre <a href="https://www.elastic.co/search-labs/blog/optimize-elasticsearch-disk-space-and-usage#the-relationship-between-disk-size,-ram-and-cpu">proporção de tamanho do disco, RAM e CPU</a> abaixo).</p></li></ol><h2>Como adicionar capacidade de armazenamento ao seu cluster Elasticsearch</h2><ol><li><p><strong>Aumente o número de nós de dados: </strong>Lembre-se de que os novos nós devem ter o mesmo tamanho que os nós existentes e a mesma versão do Elasticsearch.</p></li><li><p><strong>Aumentar o tamanho dos nós existentes: </strong>Em ambientes baseados em nuvem, geralmente é fácil aumentar o tamanho do disco e a RAM/CPU nos nós existentes.</p></li><li><p><strong>Aumentar apenas o tamanho do disco: </strong>Em ambientes baseados em nuvem, geralmente é relativamente fácil aumentar o tamanho do disco.</p></li><li><p><a href="https://www.elastic.co/docs/deploy-manage/tools/snapshot-and-restore"><strong>Instantâneo</strong></a><a href="https://www.elastic.co/docs/deploy-manage/tools/snapshot-and-restore"> </a><a href="https://www.elastic.co/docs/deploy-manage/tools/snapshot-and-restore"><strong>e</strong></a><a href="https://www.elastic.co/docs/deploy-manage/tools/snapshot-and-restore"> </a><a href="https://www.elastic.co/docs/deploy-manage/tools/snapshot-and-restore"><strong>Restauração</strong></a><strong>:</strong> Se você deseja permitir que dados antigos sejam recuperados sob demanda em um processo automatizado a partir de backups, você pode criar snapshots de índices antigos, excluí-los e restaurar os dados temporariamente sob demanda a partir desses snapshots. </p></li><li><p><strong>Reduzir o número de réplicas por fragmento:</strong> Outra opção para reduzir os dados é diminuir o número de réplicas de cada fragmento. Para alta disponibilidade, o ideal é ter uma réplica por fragmento, mas quando os dados ficam mais antigos, pode ser possível trabalhar sem réplicas. Isso geralmente funciona se os dados forem persistentes ou se você tiver um backup para restaurar, se necessário.</p></li><li><p><strong>Criar alertas:</strong> Para evitar que os discos fiquem cheios no futuro e agir de forma proativa, você deve criar alertas com base no uso do disco que o notificarão quando o disco começar a ficar cheio. </p></li></ol><h2>Como prevenir e lidar com casos em que a capacidade do disco está subutilizada</h2><p>Se a capacidade do seu disco estiver subutilizada, existem várias opções para reduzir o volume de armazenamento no seu cluster.</p><h3>Como reduzir o volume de armazenamento em um cluster Elasticsearch</h3><p>Existem vários métodos para reduzir o volume de armazenamento de um cluster.</p><p><strong>1. Reduzir o número de nós de dados</strong></p><p>Se você deseja reduzir o armazenamento de dados e também reduzir os recursos de RAM e CPU na mesma proporção, então esta é a estratégia mais fácil. A desativação de nós desnecessários provavelmente proporcionará a maior economia de custos.</p><p>Antes de desativar o nó, você deve:</p><ul><li><p>Certifique-se de que o nó a ser desativado não seja necessário como nó MESTRE. Você deve sempre ter pelo menos três nós com a função de nó MESTRE.</p></li><li><p>Migre os fragmentos de dados para fora do nó a ser desativado.</p></li></ul><p><strong>2. Substitua os nós existentes por nós menores.</strong></p><p>Se não for possível reduzir ainda mais o número de nós (normalmente, 3 seria uma configuração mínima), então você pode querer diminuir o tamanho dos nós existentes. Lembre-se de que é recomendável garantir que todos os nós de dados tenham a mesma quantidade de memória RAM e tamanho de disco, já que o balanceamento dos shards é feito com base no número de shards por nó.</p><p>O processo seria o seguinte:</p><ul><li><p>Adicione novos nós menores ao cluster.</p></li><li><p>Migre os fragmentos para longe dos nós que serão desativados.</p></li><li><p>Desligue os nós antigos.</p></li></ul><p><strong>3. Reduzir o tamanho do disco nos nós</strong></p><p>Se você deseja reduzir APENAS o tamanho do disco nos nós, sem alterar a RAM ou a CPU geral do cluster, então você pode reduzir o tamanho do disco para cada nó individualmente. Reduzir o tamanho do disco em um nó do Elasticsearch não é um processo trivial.</p><p>A maneira mais fácil de fazer isso geralmente seria:</p><ul><li><p>Migrar fragmentos do nó</p></li><li><p>Pare o nó</p></li><li><p>Monte um novo volume de dados no nó com o tamanho apropriado.</p></li><li><p>Copie todos os dados do volume de disco antigo para o novo volume.</p></li><li><p>Desprenda o volume antigo A.</p></li><li><p>Inicie o nó e migre os fragmentos de volta para o nó.</p></li></ul><p>Isso exige que você tenha capacidade suficiente nos outros nós para armazenar temporariamente os fragmentos extras do nó durante esse processo. Em muitos casos, o custo de gerenciamento desse processo pode exceder a economia potencial no uso de disco. Por esse motivo, pode ser mais simples substituir o nó por completo por um novo nó com o tamanho de disco desejado (consulte “Substituir nós existentes por nós menores” acima).</p><p>Ao pagar por recursos desnecessários, os custos podem ser reduzidos otimizando a utilização desses recursos.</p><h2>A relação entre o tamanho do disco, a RAM e a CPU.</h2><p>A proporção ideal entre capacidade de disco e RAM no seu cluster dependerá do seu caso de uso específico. Por esse motivo, ao considerar alterações na sua capacidade de armazenamento, você também deve avaliar se as proporções atuais de disco/RAM/CPU estão adequadamente equilibradas e se, consequentemente, você precisa adicionar/reduzir RAM/CPU na mesma proporção.</p><p>Os requisitos de RAM e CPU dependem do volume de atividade <a href="https://opster.com/guides/elasticsearch/glossary/elasticsearch-indexing/">de indexação</a> , do número e tipo de consultas, bem como da quantidade de dados que está sendo pesquisada e agregada. Isso geralmente é proporcional à quantidade de dados armazenados no cluster e, portanto, também deve estar relacionado ao tamanho do disco.</p><p>A proporção entre a capacidade do disco e a RAM pode variar dependendo do uso. Veja alguns exemplos aqui:</p><p></p><p>Atividade do índice</p><p>Retenção</p><p>Atividade de pesquisa</p><p>Capacidade do disco</p><p>BATER</p><p>Aplicativo de busca empresarial</p><p>Ingestão moderada de toras</p><p>Longo</p><p>Luz</p><p>2TB</p><p>32 GB</p><p>Monitoramento de aplicativos</p><p>Ingestão intensiva de toras</p><p>Curto</p><p>Luz</p><p>1TB</p><p>32 GB</p><p>Comércio eletrônico</p><p>Indexação de dados leves</p><p>Indeterminado</p><p>Pesado</p><p>500 GB</p><p>32 GB</p><p><em>Lembre-se de que modificar a configuração das máquinas de nó deve ser feito com cuidado, pois pode causar indisponibilidade do nó e você precisa garantir que os shards não comecem a migrar para seus outros nós já sobrecarregados.</em></p>]]></content:encoded>
    <link>https://www.elastic.co/search-labs/blog/optimize-elasticsearch-disk-space-and-usage</link>
    <guid isPermaLink="true">https://www.elastic.co/search-labs/blog/optimize-elasticsearch-disk-space-and-usage</guid>
    <category><![CDATA[Noções básicas]]></category>
    <dc:creator><![CDATA[Kofi Bartlett]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt087c3d95b6cb59c5/6a17dbda445de986f54cffd9/5d41a078dd03e4480a0ff4e9591c8618b9bab4d0-720x420.png" length="0" type="image/png"/>
    <pubDate>Fri, 16 May 2025 00:00:00 GMT</pubDate>
  </item>
  <item>
    <title><![CDATA[Como configurar o número de réplicas em um índice do Elasticsearch]]></title>
    <description><![CDATA[Aprenda a configurar o number_of_replicas em um índice do Elasticsearch para melhorar o desempenho na busca e proporcionar resiliência contra falhas de nós. 
]]></description>
    <content:encoded><![CDATA[<p>O Elasticsearch foi projetado para ser um sistema distribuído capaz de lidar com grandes volumes de dados e fornecer alta disponibilidade. Uma das principais funcionalidades que permitem isso é o conceito de replicação de índice, que é controlado pela configuração <code>number_of_replicas</code> . Este artigo irá abordar em detalhes essa configuração, suas implicações e como configurá-la corretamente.</p><h2>O papel das réplicas no Elasticsearch</h2><p>No Elasticsearch, um índice é uma coleção de documentos que são particionados em vários shards primários. Cada fragmento primário é um índice Apache Lucene independente, e os documentos dentro de um índice são distribuídos entre todos os fragmentos primários. Para garantir alta disponibilidade e redundância de dados, o Elasticsearch permite que cada shard tenha uma ou mais cópias, conhecidas como réplicas.

A configuração <code>number_of_replicas</code> controla o número de shards de réplica (cópias) que o Elasticsearch cria para cada shard primário em um índice. Por padrão, o Elasticsearch cria uma réplica para cada shard primário, mas isso pode ser alterado de acordo com os requisitos do seu sistema.</p><h2>Configurando o número de réplicas</h2><p>A configuração <code>number_of_replicas</code> pode ser definida no momento da criação do índice ou atualizada posteriormente. Veja como você pode configurar isso durante a criação do índice:</p>PUT /my_index
{
  "settings": {
    "number_of_replicas": 2
  }
}<p>Neste exemplo, o Elasticsearch criará duas réplicas para cada shard primário no índice <code>my_index</code> .</p><p>Para atualizar a configuração <code>number_of_replicas</code> de um índice existente, você pode usar a API <code>_settings</code> :</p>PUT /my_index/_settings
{
  "number_of_replicas": 3
}<p>Este comando atualizará o índice <code>my_index</code> para ter três réplicas para cada fragmento primário.</p><h2>Implicações da configuração number_of_replicas</h2><p>A configuração <code>number_of_replicas</code> tem um impacto significativo no desempenho e na resiliência do seu <a href="https://opster.com/guides/elasticsearch/glossary/elasticsearch-cluster/">cluster</a> Elasticsearch. Aqui estão alguns pontos importantes a serem considerados:</p><ol><li><p><strong>Redundância e disponibilidade de dados:</strong> Aumentar o <code>number_of_replicas</code> melhora a disponibilidade dos seus dados, criando mais cópias de cada fragmento. Se um nó falhar, o Elasticsearch ainda poderá fornecer dados a partir dos fragmentos de réplica nos <a href="https://opster.com/guides/elasticsearch/glossary/elasticsearch-node/">nós</a> restantes.</p></li><li><p><strong>Desempenho de busca:</strong> Fragmentos de réplica podem atender solicitações de leitura, portanto, ter mais réplicas pode melhorar o desempenho de busca, distribuindo a carga por mais fragmentos.</p></li><li><p><strong>Desempenho de gravação:</strong> No entanto, cada operação de gravação deve ser realizada em todas as cópias de um fragmento. Portanto, um <code>number_of_replicas</code> mais alto pode diminuir o desempenho <a href="https://opster.com/guides/elasticsearch/glossary/elasticsearch-indexing/">da indexação</a> , pois aumenta o número de operações que devem ser realizadas para cada gravação.</p></li><li><p><strong>Requisitos de armazenamento:</strong> Mais réplicas significam mais espaço de armazenamento. Você deve garantir que seu cluster tenha capacidade suficiente para armazenar as réplicas adicionais.</p></li><li><p><strong>Resiliência à falha do nó:</strong> O <code>number_of_replicas</code> deve ser definido considerando o número de nós em seu cluster. Se o <code>number_of_replicas</code> for igual ou maior que o número de nós, seu cluster pode tolerar a falha de vários nós sem perda de dados.</p></li></ol><h2>Melhores práticas para definir o número de réplicas</h2><p>A configuração ideal <code>number_of_replicas</code> depende dos requisitos específicos do seu sistema. No entanto, aqui estão algumas boas práticas gerais:</p><ul><li><p>Para um cluster de nó único, <code>number_of_replicas</code> deve ser definido como 0, pois não há outros nós para armazenar réplicas.</p></li><li><p>Para um cluster com vários nós, <code>number_of_replicas</code> deve ser definido como pelo menos 1 para garantir redundância de dados e alta disponibilidade.</p></li><li><p>Se o desempenho da pesquisa for uma prioridade, considere aumentar o <code>number_of_replicas</code>. No entanto, tenha em mente a relação de compromisso entre o desempenho de gravação e os requisitos de armazenamento.</p></li><li><p>Certifique-se sempre de que seu cluster tenha capacidade suficiente para armazenar as réplicas adicionais.</p></li></ul>]]></content:encoded>
    <link>https://www.elastic.co/search-labs/blog/elasticsearch-index-number-of_replicas</link>
    <guid isPermaLink="true">https://www.elastic.co/search-labs/blog/elasticsearch-index-number-of_replicas</guid>
    <category><![CDATA[Noções básicas]]></category>
    <dc:creator><![CDATA[Kofi Bartlett]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltd041e871a8935448/6a17de320b0bedf404dd34ab/23b96aaa1a38b1f4747b4a87695d816f24c0cf70-720x421.jpg" length="0" type="image/jpeg"/>
    <pubDate>Wed, 14 May 2025 00:00:00 GMT</pubDate>
  </item>
  <item>
    <title><![CDATA[Excluindo campos do Elasticsearch da indexação]]></title>
    <description><![CDATA[Aprenda como configurar o Elasticsearch para excluir campos, os principais motivos para excluir campos da indexação e as práticas recomendadas a serem seguidas.]]></description>
    <content:encoded><![CDATA[<p>No Elasticsearch, indexação refere-se ao processo de armazenar e organizar dados de forma que eles possam ser facilmente pesquisados. Embora indexar todos os campos de um documento possa ser útil em alguns casos, existem situações em que você pode querer excluir determinados campos da indexação. Isso pode ajudar a melhorar o desempenho, reduzir os custos de armazenamento e minimizar o tamanho geral do seu índice Elasticsearch.</p><p>Neste artigo, discutiremos os motivos para excluir campos da indexação, como configurar o Elasticsearch para excluir campos específicos e algumas práticas recomendadas a serem seguidas ao fazer isso.</p><h2>Motivos para excluir campos da indexação</h2><ol><li><p><strong>Desempenho: </strong>Indexar todos os campos de um documento pode aumentar o tempo de indexação e tornar a pesquisa mais lenta. Ao excluir campos que não são necessários para pesquisa ou agregação, você pode melhorar o desempenho geral do seu cluster Elasticsearch.</p></li><li><p><strong>Armazenamento: </strong>A indexação de campos consome espaço de armazenamento. Excluir campos que não são necessários para pesquisa ou agregação pode ajudar a reduzir os requisitos de armazenamento do seu cluster Elasticsearch.</p></li><li><p><strong>Tamanho do índice: </strong>O tamanho de um índice do Elasticsearch está diretamente relacionado ao número de campos indexados. Ao excluir campos desnecessários, você pode minimizar o tamanho do seu índice, o que pode levar a um desempenho de pesquisa e indexação mais rápido.</p></li></ol><h2>Configurando o Elasticsearch para excluir campos</h2><p>Para excluir um campo da indexação no Elasticsearch, você pode usar a propriedade "index" no mapeamento do campo. Ao definir a propriedade “index” como “false”, o Elasticsearch não indexará o campo, e ele não será pesquisável nem estará disponível para agregações.</p><p>Aqui está um exemplo de como excluir um campo da indexação usando o mapeamento do Elasticsearch:</p>PUT /my_index
{
  "mappings": {
    "properties": {
      "field_to_exclude": {
        "type": "text",
        "index": false
      }
    }
  }
}<p>Neste exemplo, estamos criando um novo índice chamado “my_index” com um único campo chamado “field_to_exclude”. Ao definir a propriedade “index” como “false”, estamos dizendo ao Elasticsearch para não indexar esse campo. O campo ainda estará disponível no documento original.</p><h2>Melhores práticas para excluir campos da indexação</h2><ol><li><p><strong>Analise seus dados: </strong>Antes de excluir campos da indexação, é essencial analisar seus dados e entender quais campos são necessários para pesquisa e agregação. Isso ajudará você a tomar decisões informadas sobre quais campos excluir.</p></li><li><p><strong>Teste suas alterações: </strong>Ao excluir campos da indexação, é crucial testar as alterações para garantir que a funcionalidade de pesquisa e agregação continue funcionando conforme o esperado. Isso pode ajudar você a evitar problemas inesperados ou falhas de desempenho.</p></li><li><p><strong>Monitore o desempenho:</strong> após excluir campos da indexação, monitore o desempenho do seu cluster Elasticsearch para garantir que as alterações tenham surtido o efeito desejado. Isso pode ajudar a identificar quaisquer otimizações adicionais que possam ser necessárias.</p></li><li><p><strong>Utilize a filtragem por origem:</strong> Se você precisa armazenar um campo no Elasticsearch, mas não deseja que ele seja pesquisável ou disponível para agregações, considere usar a filtragem por origem. Isso permite armazenar o campo no campo _source, mas excluí-lo do índice.</p></li></ol><h2>Conclusão</h2><p>Excluir campos da indexação no Elasticsearch pode ajudar a melhorar o desempenho, reduzir os custos de armazenamento e minimizar o tamanho geral do seu índice. Ao analisar cuidadosamente seus dados e entender quais campos são necessários para pesquisa e agregação, você pode tomar decisões informadas sobre quais campos excluir. Sempre teste suas alterações e monitore o desempenho do seu cluster Elasticsearch para garantir que suas otimizações tenham o efeito desejado.</p>]]></content:encoded>
    <link>https://www.elastic.co/search-labs/blog/excluding-elasticsearch-fields-from-indexing</link>
    <guid isPermaLink="true">https://www.elastic.co/search-labs/blog/excluding-elasticsearch-fields-from-indexing</guid>
    <category><![CDATA[Dados de indexação]]></category>
    <dc:creator><![CDATA[Kofi Bartlett]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt399bcc5a2e55bfe0/6a1708b45091684557e1ba3c/3aa0b481994d2445ba979d3c79fff64c5ee6676a-720x420.jpg" length="0" type="image/jpeg"/>
    <pubDate>Mon, 12 May 2025 00:00:00 GMT</pubDate>
  </item>
  <item>
    <title><![CDATA[Excluindo um campo de um documento no Elasticsearch]]></title>
    <description><![CDATA[Saiba como excluir campos de documentos do Elasticsearch usando a API de atualização, scripts ou reindexação para remoções únicas e em massa.]]></description>
    <content:encoded><![CDATA[<p>No Elasticsearch, é comum precisar excluir um campo de um documento. Isso pode ser útil quando você deseja remover informações desnecessárias ou desatualizadas do seu índice. Neste artigo, discutiremos diferentes métodos para excluir um campo de um documento no Elasticsearch, juntamente com exemplos e instruções passo a passo. </p><h2>Método 1: Usando a API de atualização</h2><p>A <a href="https://www.elastic.co/docs/reference/elasticsearch/rest-apis/update-document">API de atualização</a> fornece um script que modifica a origem de um documento para atualizar o documento. Você pode usar essa API para apagar o campo de um documento, bastando deixar o campo como "null". Veja como fazer isso:</p><p>1. Identifique o índice, o tipo de documento (se estiver usando o Elasticsearch 6.x ou anterior) e o ID do documento que você deseja atualizar.</p><p>2. Utilize a API de atualização com um script que defina o campo como nulo ou, melhor ainda, que o remova do documento de origem. O exemplo a seguir demonstra como excluir o campo “field_to_delete” de um documento com ID “1” no índice “my_index”:</p>POST /my_index/_update/1
{
  "script": "ctx._source.remove('field_to_delete')"
}<p>3. Execute a solicitação. Se a operação for bem-sucedida, o Elasticsearch retornará uma resposta indicando que o documento foi atualizado.</p><p>Nota: Este método apenas remove o campo do documento especificado. O campo ainda existirá no mapeamento e em outros documentos do índice.</p><h2>Método 2: Reindexação com uma fonte modificada</h2><p>Para apagar um campo de todos os documentos em um índice, você pode usar a <a href="https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-reindex">API de reindexação</a> para criar um novo índice com a fonte modificada. Veja como:</p><p>1. Crie um novo índice com as mesmas configurações e mapeamentos do índice original. Você pode usar a API Get Index para recuperar as configurações e os mapeamentos do índice original.</p><p>2. Utilize a API Reindex para copiar documentos do índice original para o novo índice, removendo o campo da origem. O exemplo a seguir demonstra como excluir o campo “field_to_delete” de todos os documentos no índice “my_index”:</p>POST /_reindex
{
  "source": {
    "index": "my_index"
  },
  "dest": {
    "index": "new_index"
  },
  "script": {
    "source": "ctx._source.remove('field_to_delete')"
  }
}<p>
3. Verifique se o novo índice contém os documentos corretos com o campo removido.</p><p>4. Se tudo estiver correto, você pode excluir o índice original e, se necessário, adicionar um alias ao novo índice com o mesmo nome do índice original.</p><h2>Método 3: atualizando o mapeamento e reindexando</h2><p>Se você deseja excluir um campo do mapeamento e todos os documentos em um índice, pode atualizar o mapeamento e, em seguida, reindexar os documentos. Eis como fazer isso:</p><p>1. Crie um novo índice com as mesmas configurações do índice original.</p><p>2. Recupere os mapeamentos do índice original usando a API Get Mapping.</p><p>3. Modifique os mapeamentos removendo o campo que deseja excluir.</p><p>4. Aplique os mapeamentos modificados ao novo índice usando a API Put Mapping.</p><p>5. Utilize a API Reindex para copiar documentos do índice original para o novo índice, conforme descrito no Método 2.</p><p>6. Verifique se o novo índice contém os documentos corretos com o campo removido e se o campo não está presente no mapeamento.</p><p>7. Se tudo estiver correto, você pode apagar o índice original e, se necessário, adicionar um alias ao novo índice com o nome do índice original.</p><h2>Conclusão</h2><p>Neste artigo, discutimos três métodos para excluir um campo de um documento no Elasticsearch: usando a API de atualização, reindexando com uma fonte modificada e atualizando o mapeamento e reindexando. Cada método tem seus próprios casos de uso e vantagens e desvantagens, portanto, escolha aquele que melhor se adapta às suas necessidades. Lembre-se sempre de testar as alterações e verificar os resultados antes de aplicá-las em ambientes de produção.</p>]]></content:encoded>
    <link>https://www.elastic.co/search-labs/blog/elasticsearch-delete-field-from-document</link>
    <guid isPermaLink="true">https://www.elastic.co/search-labs/blog/elasticsearch-delete-field-from-document</guid>
    <category><![CDATA[Noções básicas]]></category>
    <dc:creator><![CDATA[Kofi Bartlett]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt8deb617c89943b69/6a17e26c4b055d209e43212f/89278eb7309b7f3018c61be2b514d1fd25b9564d-720x420.jpg" length="0" type="image/jpeg"/>
    <pubDate>Fri, 09 May 2025 00:00:00 GMT</pubDate>
  </item>
  <item>
    <title><![CDATA[Entendendo a pontuação do Elasticsearch e a API Explain.]]></title>
    <description><![CDATA[Saiba mais sobre os mecanismos de pontuação do Elasticsearch e a função prática de pontuação para auditar a relevância da busca e melhorar a classificação de documentos com a API Explain.]]></description>
    <content:encoded><![CDATA[<p>O Elasticsearch é um mecanismo de busca poderoso que fornece resultados de pesquisa rápidos e relevantes, calculando uma pontuação para cada documento no índice. Essa pontuação é um fator crucial para determinar a ordem dos resultados da pesquisa. Neste artigo, vamos nos aprofundar no mecanismo de pontuação do Elasticsearch e explorar a API Explain, que ajuda a compreender o processo de pontuação.</p><h2>Mecanismos de pontuação no Elasticsearch</h2><p>O Elasticsearch utiliza, por padrão, um modelo de pontuação chamado Practical Scoring Function (BM25). Este modelo é baseado na teoria probabilística de recuperação de informação e leva em consideração fatores como frequência de termos, frequência inversa de documentos e normalização do comprimento do campo. Vamos discutir brevemente esses fatores:</p><ol><li><p><strong>Frequência do termo (TF):</strong> Representa o número de vezes que um termo aparece em um documento. Uma maior frequência de um termo indica uma relação mais forte entre o termo e o documento.</p></li><li><p><strong>Frequência Inversa de Documentos (IDF):</strong> Este fator mede a importância de um termo em toda a coleção de documentos. Um termo que aparece em muitos documentos é considerado menos importante, enquanto um termo que aparece em menos documentos é considerado mais importante.</p></li><li><p><strong>Normalização do comprimento do campo</strong>: Este fator leva em consideração o comprimento do campo no qual o termo aparece. Campos mais curtos recebem maior peso, pois o termo é considerado mais significativo em um campo mais curto.</p></li></ol><h2>Usando a API Explain</h2><p>A API Explain do Elasticsearch é uma ferramenta valiosa para entender o processo de pontuação. Fornece uma explicação detalhada de como a pontuação de um documento específico foi calculada. Para usar a API Explain, você precisa enviar uma solicitação GET para o seguinte endpoint:</p>GET /&lt;index&gt;/_explain/&lt;document_id&gt;<p>No corpo da solicitação, você precisa fornecer a consulta para a qual deseja entender a pontuação. Eis um exemplo:</p>{
  "query": {
    "match": {
      "title": "elasticsearch"
    }
  }
}<p>A resposta da API Explain incluirá uma descrição detalhada do processo de pontuação, incluindo os fatores individuais (TF, IDF e normalização do comprimento do campo) e suas contribuições para a pontuação final. Eis um exemplo de resposta:</p>{
  "_index": "example_index",
  "_type": "_doc",
  "_id": "1",
  "matched": true,
  "explanation": {
    "value": 1.2,
    "description": "weight(title:elasticsearch in 0) [PerFieldSimilarity], result of:",
    "details": [
      {
        "value": 1.2,
        "description": "score(doc=0,freq=1.0 = termFreq=1.0\n), product of:",
        "details": [
          {
            "value": 2.2,
            "description": "idf, computed as log(1 + (docCount - docFreq + 0.5) / (docFreq + 0.5)) from:",
            "details": [
              {
                "value": 1,
                "description": "docFreq",
                "details": []
              },
              {
                "value": 1,
                "description": "docCount",
                "details": []
              }
            ]
          },
          {
            "value": 0.5,
            "description": "tfNorm, computed as (freq * (k1 + 1)) / (freq + k1 * (1 - b + b * fieldLength / avgFieldLength)) from:",
            "details": [
              {
                "value": 1,
                "description": "termFreq=1.0",
                "details": []
              },
              {
                "value": 1.2,
                "description": "parameter k1",
                "details": []
              },
              {
                "value": 0.75,
                "description": "parameter b",
                "details": []
              },
              {
                "value": 1,
                "description": "avgFieldLength",
                "details": []
              },
              {
                "value": 1,
                "description": "fieldLength",
                "details": []
              }
            ]
          }
        ]
      }
    ]
  }
}<p>Neste exemplo, a resposta mostra que a pontuação de 1,2 é um produto do valor IDF (2,2) e do valor tfNorm (0,5). A explicação detalhada ajuda a compreender os fatores que contribuem para a pontuação e pode ser útil para refinar a relevância da pesquisa.</p><h2>Conclusão</h2><p>A pontuação do Elasticsearch é um aspecto crucial para fornecer resultados de pesquisa relevantes. Ao entender os mecanismos de pontuação e usar a API Explain, você pode obter insights sobre os fatores que afetam os resultados da pesquisa e otimizar suas consultas de pesquisa para obter maior relevância e desempenho.</p>]]></content:encoded>
    <link>https://www.elastic.co/search-labs/blog/elasticsearch-scoring-and-explain-api</link>
    <guid isPermaLink="true">https://www.elastic.co/search-labs/blog/elasticsearch-scoring-and-explain-api</guid>
    <category><![CDATA[Noções básicas]]></category>
    <dc:creator><![CDATA[Kofi Bartlett]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltbe7de1872f1527e3/6a17de303e9e452974ba1374/a70c5403064d5bbceff66a17373332362227f13c-720x420.jpg" length="0" type="image/jpeg"/>
    <pubDate>Mon, 05 May 2025 00:00:00 GMT</pubDate>
  </item>
  <item>
    <title><![CDATA[Criação de modelos de índice no Elasticsearch: Como usar modelos compostos]]></title>
    <description><![CDATA[Veja como criar templates componíveis e de componentes no Elasticsearch para garantir mapeamentos consistentes e automatizar a configuração dos índices.]]></description>
    <content:encoded><![CDATA[<p>Um índice do Elasticsearch pode ser configurado por meio de mapeamento, configurações e aliases: </p><ul><li><p>As definições de mapeamento especificam o esquema de dados.</p></li><li><p>As configurações definem o tamanho dos fragmentos e as taxas de atualização. </p></li><li><p>Os aliases são usados para dar nomes alternativos ao índice.</p></li></ul><p>Ao indexar um documento pela primeira vez ou criar um índice vazio usando a API Criar Índice, o índice será criado com as configurações padrão, sem esquema de dados e sem aliases. Essas configurações padrão funcionam muito bem em ambientes de desenvolvimento e teste, mas talvez seja necessário personalizar nossos índices para ambientes de produção.</p><p>Trabalhar com os mapeamentos e configurações padrão em produção pode resultar em indexação e desempenho de pesquisa deficientes. A criação manual de índices é um processo tedioso e demorado. Recriar esses índices em todos os ambientes é especialmente impraticável se tivermos um esquema de mapeamento complexo, além de configurações e aliases personalizados.</p><p>Felizmente, o Elasticsearch nos fornece uma ferramenta para aplicar automaticamente uma configuração predefinida ao criar índices na forma de modelos <em>de índice</em> <em>.</em></p><h2>Modelos de índice</h2><p>Os modelos de índice permitem criar índices com configurações definidas pelo usuário. Um índice pode obter a configuração desses modelos, por exemplo, um número definido de shards e réplicas ou mapeamentos de campos, durante sua instanciação. Um modelo será definido com um padrão de nome e algumas configurações. Se o nome do índice corresponder ao padrão de nomenclatura do modelo, o novo índice será criado com a configuração definida no modelo.</p><p>O Elasticsearch atualizou sua funcionalidade de modelos na versão 7.8 com modelos compostos. Esta versão mais recente oferece muito mais modelos de índice reutilizáveis, como demonstrado neste artigo.</p><h3>Tipos de modelo de índice</h3><p>Os modelos de índice podem ser classificados em duas categorias:</p><ul><li><p><strong>Modelos de índice (ou modelos de índice componíveis)</strong>: Os modelos de índice componíveis podem existir por si só ou podem ser compostos por nenhum ou mais modelos componentes (consulte a segunda categoria).</p></li><li><p><strong>Modelos de componentes:</strong> O modelo de componente é um modelo <em>reutilizável</em> que define a configuração necessária. Normalmente, espera-se que o modelo de componente esteja associado a um modelo de índice. Cada um dos modelos de componentes pode ser associado a um ou mais modelos de índice. </p></li></ul><p>Como você pode ver na imagem abaixo, os modelos de índice A e B compartilham modelos de componentes (neste caso, apenas um – o Modelo 3) entre si. Um modelo de índice pode não conter nenhum ou vários modelos de componentes, e cada um dos modelos de componentes pode não estar associado a nenhum ou a vários modelos de índice. Ambos os tipos de modelos podem existir por si só, porém os modelos de componentes são inúteis a menos que estejam anexados a um modelo de índice.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt7fca132e0eb86c50/6a17f5b7ec0f8982a65a678c/96c0aac29d3992e54a79be34e14cf909e0ca2ea9-1202x556.png" alt="Modelos de indexação no Elasticsearch e os componentes." /><p>A ideia geral é desenvolver um catálogo de modelos de componentes para uma organização usar em diversas necessidades (por exemplo, especificar os vários modelos de componentes para ambientes individuais) e associá-los a vários índices por meio de modelos de índice componíveis.</p><h2>Como criar modelos (de índice) componíveis</h2><p>O Elasticsearch fornece um endpoint _index_template para gerenciar modelos de índice. Neste modelo, o usuário fornece todos os mapeamentos, configurações e aliases necessários, juntamente com um padrão de nome de índice. Vamos analisar um exemplo de criação de um modelo para um aplicativo de microsserviços chamado <em>customer-order-service</em> , responsável pela lógica de geração de pedidos. </p><p>Digamos que nossa necessidade seja criar um modelo para pedidos de clientes, representado por um padrão com caracteres curinga: *pedidos. Espera-se que este modelo tenha determinados mapeamentos e configurações, como o campo order_date, bem como números de shards e réplicas.</p><p>Qualquer índice que corresponda a este modelo durante a sua criação herdará as configurações definidas neste modelo. Por exemplo, um índice black_friday_orders terá o campo order_date, o número de shards será definido como 5 e o número de réplicas como 2. Além disso, <em>todos</em> os índices criados a partir deste modelo também herdarão um único nome <a href="https://opster.com/guides/elasticsearch/glossary/elasticsearch-alias/">de alias</a> ! Vamos criar este modelo de pedidos (orders_template) com um padrão de índice definido como *orders e com um esquema de mapeamento que consiste em um único campo order_date com um formato de data predefinido dd-MM-yyyy. O código abaixo mostra como criar esse modelo de índice.</p>PUT _index_template/orders_template
{
  "index_patterns": ["*orders"],
  "priority": 300,
  "template": {
    "mappings": {
      "properties": {
        "order_date": {
          "type": "date",
          "format":"dd-MM-yyyy"
        }
      }
    },
    "settings":{
      "number_of_shards":5,
      "number_of_replicas":2
    },
    "aliases":{
      "all_orders":{}
    }
  }
}<p>Ao executar essa consulta nas DevTools do Kibana, o modelo é criado com o padrão de índice *orders, juntamente com o mapeamento predefinido, as configurações e um alias. O `index_patterns` é uma matriz de padrões de correspondência; qualquer índice que corresponda a esse padrão derivará a configuração do modelo. Você pode executar o seguinte comando para recuperar o modelo persistido, que deverá reiterar o que fizemos:</p>GET _index_template/orders_template <p>Existe também uma prioridade, um número positivo, definida ao criar o atributo de modelo definido no modelo: cada modelo é definido com uma prioridade, de forma que quaisquer alterações conflitantes de modelos diferentes sejam resolvidas usando esse valor, com precedência dada ao valor de prioridade mais alto. A seguir, analisaremos a prioridade dos modelos com mais detalhes.</p><h2>Criando um índice com o modelo</h2><p>Agora que temos um modelo – um projeto para criar índices – o próximo passo é criar um índice. Quando o nome do índice corresponde ao padrão fornecido, as configurações do modelo são aplicadas automaticamente. Para comprovar esse ponto, como mostra o código abaixo, vamos criar um novo índice chamado: blackfriday_orders:</p>PUT blackfriday_orders<p>Como o nome do índice (blackfriday_orders) corresponde ao padrão de nomenclatura definido no modelo (ou seja, *pedidos), o índice deve obter toda a configuração derivada do modelo. Vamos recuperar esse índice recém-criado e verificar se isso é realmente verdade executando o seguinte código:</p>GET blackfriday_orders<p>Isso deve retornar:</p>{
  "blackfriday_orders" : {
    "aliases" : {
      "all_orders" : { }
    },
    "mappings" : {
      "properties" : {
        "order_date" : {
          "type" : "date",
          "format" : "dd-MM-yyyy"
        }
      }
    },
    "settings" : {
      "index" : {
         ...
        "number_of_shards" : "5",
        "number_of_replicas" : "2"
      }
    }
  }
}<p>Conforme indicado na resposta, a configuração do blackfriday_orders foi herdada do modelo. Podemos tentar várias combinações de índices que herdarão com sucesso a configuração do modelo:</p>PUT blackfriday_orders
PUT americaorders
PUT cancelled--orders
PUT undefined101orders<p>No entanto, os seguintes índices não herdarão a configuração, pois o nome não corresponderá ao padrão:</p>PUT blackfriday_orders2
PUT open_orders_
PUT allorders_total<p>Um ponto importante a lembrar é que todos os índices derivados de um modelo têm o mesmo alias – all_orders – neste caso. Existe uma vantagem em ter um alias desse tipo: podemos simplesmente consultar esse único alias em vez de vários índices.</p>GET blackfriday_orders,americaorders,undefined101orders/_search
GET all_orders/_search 
{
  "query": {
    "range": {
      "order_date": {
        "gte": "01-12-2021",
        "lte": "31-12-2021"
      }
    }
  }
}<p>Embora criemos um modelo para *pedidos, espera-se que qualquer índice correspondente adote a configuração do modelo. Normalmente, consciente ou inconscientemente, as equipes podem criar alguns modelos adicionais por diversos motivos. Isso significa que, às vezes, o nome do índice pode corresponder a dois padrões de modelo diferentes! O Elasticsearch precisa decidir qual das configurações desses modelos deve ser aplicada. Felizmente, esse dilema pode ser resolvido usando a prioridade do modelo.</p><h2>Como criar modelos de componentes</h2><p>Aprendemos sobre modelos de índice na parte anterior deste artigo. Existem algumas desvantagens em criar modelos com a configuração já integrada – uma delas é que a configuração não pode ser exportada para outros modelos. Se desejarmos ter uma configuração semelhante, por exemplo, para modelos relacionados a clientes (*clientes), talvez tenhamos que recriar todo o modelo. Isso significa que podemos estar criando dezenas deles em uma organização típica (e você pode ter alguns outros dependendo do ambiente).</p><p>Como sempre buscamos a reutilização, o Elasticsearch redesenhou os modelos levando isso em consideração. Os modelos de componentes atendem a essa necessidade. Se você tem experiência em DevOps, provavelmente precisará criar índices com uma configuração predefinida para cada um dos ambientes. Em vez de aplicar manualmente cada uma dessas configurações de forma tediosa, você pode criar um modelo de componente para cada um dos ambientes.</p><p>Um modelo de componente nada mais é do que um bloco reutilizável de configurações que podemos usar para criar mais modelos de índice. Note que os modelos de componentes não têm utilidade a menos que sejam combinados com modelos de índice. Eles são expostos através de um endpoint _component_template. Vamos ver como tudo isso se encaixa.</p><h3>Configurações em um modelo de índice</h3><p>Vamos extrair as configurações que definimos anteriormente em nosso modelo de índice e criar um modelo de componente a partir delas. Espera-se que o settings_component_template tenha cinco shards primários com duas réplicas por shard primário. O primeiro passo, como mostra o código abaixo, é declarar e executar um modelo de componente com essa configuração.</p>PUT _component_template/settings_component_template
{
  "template":{
    "settings":{
      "number_of_shards":5,
      "number_of_replicas":2
    }
  }
}<p>Como mostra o código acima, usamos o endpoint _component_template para criar um modelo de componente. O corpo da solicitação contém as informações do modelo em um objeto de modelo. O modelo settings_component_template agora está disponível para uso em outros locais nos modelos de índice. Uma diferença notável é que este modelo não define nenhum padrão de índice; é simplesmente um bloco de código que configura algumas propriedades para nós.</p><h3>Modelo de mapeamento</h3><p>Da mesma forma, vamos criar outro modelo. Desta vez, vamos extrair o esquema de mapeamento que definimos anteriormente nos modelos de índice independentes. O código abaixo mostra o script:</p>PUT _component_template/mappings_component_template
{
  "template": {
    "mappings": {
      "properties": {
        "order_date": {
          "type": "date",
          "format":"dd-MM-yyyy"
        }
      }
    }
  }
}<h3>Modelo de aliases</h3><p>Seguindo a mesma linha de raciocínio, também podemos ter um modelo de componente com os aliases – dois aliases (all_orders e sales_orders):</p>PUT _component_template/aliases_component_template
{
  "template": {
    "aliases": {
      "all_orders": {},
      "sales_orders":{}
    }
  }
}<h3>Modelo de índice componível</h3><p>Agora que temos esses três modelos de componentes, o próximo passo é colocá-los em uso. Podemos fazer isso permitindo que um modelo de índice, digamos, para pedidos de Natal, o utilize:</p>PUT _index_template/composed_orders_template
{
  "index_patterns": [
    "*orders"
  ],
  "priority": 500,
  "composed_of": [
    "settings_component_template",
    "mappings_component_template",
    "aliases_component_template"
  ]
}<p>A tag `composed_of` é uma coleção de todos os modelos de componentes que compõem este modelo. Neste caso, estamos escolhendo as configurações, os mapeamentos e os modelos de componentes de aliases. Também estamos aumentando a prioridade, então este modelo terá precedência sobre qualquer outro. Assim que o modelo estiver pronto, quaisquer índices que correspondam ao padrão *orders herdarão a configuração desses três modelos de componentes.</p><p>Dito isso, caso desejemos criar um novo modelo, digamos, para clientes, utilizando apenas um dos modelos existentes (settings_component_template) e um modelo de aliases recém-criado (aliases_component_template – veja abaixo), podemos fazê-lo da seguinte forma:</p>PUT _component_template/aliases_component_template2
{
  "template": {
    "aliases": {
      "all_customers": {}
    }
  }
}<p>O modelo de índice é o seguinte:</p>PUT _index_template/composed_customers_template
{
  "index_patterns": [
    "*customers*"
  ],
  "priority": 200,
  "composed_of": [
    "settings_component_template",
    "aliases_component_template2"
  ]
}<p>Você percebeu que o settings_component_template foi (re)utilizado em dois templates diferentes? Esse é o poder dos modelos de componentes.</p><h2>Prioridade do modelo de índice</h2><p>Existe a possibilidade de os desenvolvedores criarem vários modelos de índice sem analisar o estoque existente. É importante definir uma prioridade para cada um desses modelos, de forma que aquele com maior prioridade seja utilizado. Por exemplo, o modelo `my_orders_template_1` sobrescreve o modelo `my_orders_template_2` no seguinte trecho de código:</p>PUT _index_template/my_orders_template_1
{
  "index_patterns": ["*orders"],
  "priority": 1000,
  "template": { ... }
}
PUT _index_template/my_orders_template2
{
  "index_patterns": ["*orders"],
  "priority": 300,
  "template": { ... }
}<p>Quando você tem vários modelos que correspondem aos índices que estão sendo criados, o Elasticsearch aplica todas as configurações de todos os modelos correspondentes, mas sobrescreve qualquer configuração que tenha prioridade mais alta.</p><h2>Precedência dos modelos</h2><p>Por fim, você pode estar se perguntando sobre a precedência dos modelos – a configuração definida no modelo do componente substitui a definida no próprio modelo do índice principal? Ou vice-versa? Bem, existem algumas regras:</p><ul><li><p>Um índice criado com configurações explícitas tem precedência sobre tudo – isso significa que, se você criar um índice com configuração explícita, não espere que ela seja substituída pelos modelos.</p></li><li><p>Os modelos legados (modelos criados antes da versão 7.8) têm uma prioridade menor do que os modelos componíveis.</p></li></ul><h2>Resumo</h2><ul><li><p>Um índice contém mapeamentos, configurações e aliases: os mapeamentos definem o esquema dos campos, as configurações definem os parâmetros do índice, como o número de shards e réplicas, e os aliases fornecem nomes alternativos ao índice.</p></li><li><p>Os modelos permitem criar índices com configurações predefinidas. Ao atribuir um nome a um índice que corresponda ao padrão de índice definido em um modelo específico, esse índice será configurado automaticamente de acordo com o modelo.</p></li><li><p>O Elasticsearch introduziu modelos de índice componíveis na versão 7.8. Os modelos de índice combináveis permitem modularidade e versionamento dos modelos.</p></li><li><p>Os modelos componíveis consistem em nenhum ou mais modelos de componentes.</p></li><li><p>Um modelo de índice também pode ter sua própria configuração definida.</p></li><li><p>Um modelo de componente é um modelo reutilizável com configuração predefinida, assim como um modelo de índice composto.</p></li><li><p>No entanto, espera-se que os modelos de componentes façam parte de um modelo de índice; eles são inúteis se não forem "compostos" em um modelo de índice.</p></li><li><p>Os modelos de componentes não têm um padrão de índice definido neles – o que é mais um motivo pelo qual "se espera" que façam parte de um modelo de índice.</p></li><li><p>Cada um dos modelos tem uma prioridade – um número positivo. Quanto maior o número, maior a prioridade para a aplicação desse modelo.</p></li></ul>]]></content:encoded>
    <link>https://www.elastic.co/search-labs/blog/index-composable-templates</link>
    <guid isPermaLink="true">https://www.elastic.co/search-labs/blog/index-composable-templates</guid>
    <category><![CDATA[Dados de indexação]]></category>
    <dc:creator><![CDATA[Kofi Bartlett]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt98737a72caa74fe4/6a17f5b84b055d278d43236a/510750708df50bf79463586a1bbf35bf94acfa30-1200x628.png" length="0" type="image/png"/>
    <pubDate>Fri, 02 May 2025 00:00:00 GMT</pubDate>
  </item>
  <item>
    <title><![CDATA[Pesquisa no Elasticsearch por dois campos]]></title>
    <description><![CDATA[Explore técnicas de busca por dois campos, incluindo consultas de múltiplas correspondências, consultas booleanas e reforço de campos em tempo de consulta.]]></description>
    <content:encoded><![CDATA[<p>A busca em múltiplos campos no Elasticsearch é um requisito comum em muitas aplicações. Neste artigo, exploraremos técnicas avançadas para realizar buscas por dois campos, incluindo consultas com múltiplas correspondências, consultas booleanas e otimização de campos em tempo de consulta. Essas técnicas ajudarão você a criar resultados de pesquisa mais precisos e relevantes para seus usuários.</p><h2>Técnicas avançadas para realizar buscas por dois campos</h2><h3>1. Consulta com múltiplas correspondências</h3><p>Uma consulta de correspondência múltipla permite pesquisar uma única sequência de consulta em vários campos. Isso é útil quando você deseja encontrar documentos que contenham a string de consulta fornecida em qualquer um dos dois campos. Aqui está um exemplo de uma consulta de correspondência múltipla que busca o termo “exemplo” nos campos “título” ou “descrição”:</p>{
  "query": {
    "multi_match": {
      "query": "example",
      "fields": ["title", "description"]
    }
  }
}<h3>2. Consulta booleana</h3><p>Uma consulta booleana permite combinar várias consultas usando lógica booleana. Você pode usar a cláusula “should” para pesquisar documentos que correspondam à consulta em qualquer um dos dois campos. Aqui está um exemplo de uma consulta booleana que busca o termo “exemplo” nos campos “título” e “descrição”:</p>{
  "query": {
    "bool": {
      "should": [
        {"match": {"title": "example"}},
        {"match": {"description": "example"}}
      ]
    }
  }
}<h3>3. Reforço de campos em tempo de consulta</h3><p>Às vezes, você pode querer dar mais importância a um campo em detrimento de outro durante a pesquisa. Você pode conseguir isso aplicando um fator de reforço ao campo no momento da consulta. Um valor de reforço mais alto dá mais peso ao campo, tornando-o mais propenso a influenciar a pontuação final da pesquisa. Aqui está um exemplo de uma consulta com múltiplas correspondências e um fator de reforço aplicado ao campo "título":</p>{
  "query": {
    "multi_match": {
      "query": "example",
      "fields": ["title^3", "description"]
    }
  }
}<p>Neste exemplo, o campo "título" tem um fator de reforço de 3, tornando-o três vezes mais importante que o campo "descrição" na determinação da pontuação de pesquisa.</p><h3>4. Combinando consultas com diferentes fatores de otimização</h3><p>Você também pode combinar várias consultas com diferentes fatores de reforço usando uma consulta booleana. Isso permite ajustar a importância de cada campo nos resultados da pesquisa. Aqui está um exemplo de uma consulta booleana com diferentes fatores de ponderação aplicados aos campos “título” e “descrição”:</p>{
  "query": {
    "bool": {
      "should": [
        {"match": {"title": {"query": "example", "boost": 3}}},
        {"match": {"description": {"query": "example", "boost": 1}}}
      ]
    }
  }
}<p>Neste exemplo, o campo "título" tem um fator de reforço de 3, enquanto o campo "descrição" tem um fator de reforço de 1.</p><h2>Conclusão</h2><p>A busca por dois campos no Elasticsearch pode ser realizada usando técnicas avançadas como consultas de correspondência múltipla, consultas booleanas e otimização de campos em tempo de consulta. Ao combinar essas técnicas, você pode criar resultados de pesquisa mais precisos e relevantes para seus usuários. Experimente diferentes combinações de consultas e fatores de otimização para encontrar a configuração de pesquisa ideal para o seu caso de uso específico.</p>]]></content:encoded>
    <link>https://www.elastic.co/search-labs/blog/elasticsearch-search-by-two-fields</link>
    <guid isPermaLink="true">https://www.elastic.co/search-labs/blog/elasticsearch-search-by-two-fields</guid>
    <category><![CDATA[Noções básicas]]></category>
    <category><![CDATA[DSL de consulta]]></category>
    <dc:creator><![CDATA[Kofi Bartlett]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltda47d75430c4fa7c/6a17f5cae3179149242d5963/d5d04bbcfc3925f48f3487ea4c7e0dd2205316d0-720x420.jpg" length="0" type="image/jpeg"/>
    <pubDate>Wed, 30 Apr 2025 00:00:00 GMT</pubDate>
  </item>
  <item>
    <title><![CDATA[Utilização do tamanho do heap do Elasticsearch e coleta de lixo da JVM]]></title>
    <description><![CDATA[Explorando o uso do tamanho do heap do Elasticsearch e a coleta de lixo da JVM, incluindo as melhores práticas e como resolver problemas quando o uso da memória heap está muito alto ou quando o desempenho da JVM não é ideal.]]></description>
    <content:encoded><![CDATA[<p>O tamanho do heap é a quantidade de RAM alocada para a Máquina Virtual Java de um nó do Elasticsearch.</p><p>A partir da versão 7.11, o Elasticsearch define automaticamente, por padrão, o tamanho do heap da JVM com base nas funções e na memória total de um nó. Para a maioria dos ambientes de produção, recomenda-se o uso do dimensionamento padrão. No entanto, se você quiser definir manualmente o tamanho do heap da JVM, como regra geral, você deve definir -Xms e -Xmx com o MESMO valor, que deve ser 50% da sua RAM total disponível, sujeito a um máximo de (aproximadamente) 31 GB.</p><p>Um tamanho de heap maior dará ao seu nó mais memória para operações de indexação e pesquisa. No entanto, seu nó também requer memória para cache, portanto, usar 50% mantém um equilíbrio saudável entre os dois. Pelo mesmo motivo, em produção, você deve evitar usar outros processos que consomem muita memória no mesmo nó que o Elasticsearch.</p><p>Normalmente, a utilização da memória heap seguirá um padrão em dente de serra, oscilando entre cerca de 30 e 70% da capacidade máxima da heap. Isso ocorre porque a JVM aumenta gradualmente a porcentagem de uso do heap até que o processo de coleta de lixo libere memória novamente. O uso elevado da memória heap ocorre quando o processo de coleta de lixo não consegue acompanhar. Um indicador de alto uso da memória heap é quando a coleta de lixo é incapaz de reduzir o uso da memória heap para cerca de 30%.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt03908d8eea824755/6a17dbe63e03d71e314f2b3e/0a17a67cc589a3c1fbf9e918eadc119df7bd7619-858x278.png" alt="" /><p>Na imagem acima, você pode ver um padrão típico de dente de serra no heap da JVM.</p><p>Você também verá que existem dois tipos de coleta de lixo: coleta de lixo jovem e coleta de lixo antiga.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt0d527a7905c78a45/6a17dbe84b055d09484320c2/8df5c24c4894404de4617be7a13683c9027d607d-875x281.png" alt="" /><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt681db7f60d9dbe40/6a17dbe97f6f152b9bc099f0/e01eb2537310b052580411153b8eddc187d97687-890x264.png" alt="" /><p>Em uma JVM saudável, a coleta de lixo deve idealmente atender às seguintes condições:</p><ul><li><p>O GC jovem é processado rapidamente (em 50 ms).</p></li><li><p>O coletor de lixo jovem não é executado com frequência (cerca de 10 segundos).</p></li><li><p>O GC antigo é processado rapidamente (em menos de 1 segundo).</p></li><li><p>A coleta de lixo antiga não é executada com frequência (uma vez a cada 10 minutos ou mais).</p></li></ul><h3><strong>Como resolver problemas quando o uso da memória heap está muito alto ou quando o desempenho da JVM não está ideal</strong></h3><p>Existem diversos motivos pelos quais o uso da memória heap pode aumentar:</p><h4><strong>Sobrefragmentação</strong></h4><p>Consulte o documento sobre sobreparticionamento <a href="https://www.elastic.co/docs/deploy-manage/production-guidance/optimize-performance/size-shards#sizing-shard-guidelines">aqui</a>.</p><h4><strong>Tamanhos de agregação grandes</strong></h4><p>Para evitar tamanhos de agregação muito grandes, mantenha o número de buckets de agregação (tamanho) em suas consultas no mínimo.</p>GET /_search
{
   "aggs" : {
       "products" : {
           "terms" : {
               "field" : "product",
               "size" : 5
                          }
       }
   }
}<p>Você pode usar o registro de consultas lentas (logs lentos) e implementá-lo em um índice específico usando o seguinte.</p>PUT /my_index/_settings
{
   "index.search.slowlog.threshold.query.warn": "10s",
   "index.search.slowlog.threshold.query.info": "5s",
   "index.search.slowlog.threshold.query.debug": "2s",
   "index.search.slowlog.threshold.query.trace": "500ms",
   "index.search.slowlog.threshold.fetch.warn": "1s",
   "index.search.slowlog.threshold.fetch.info": "800ms",
   "index.search.slowlog.threshold.fetch.debug": "500ms",
   "index.search.slowlog.threshold.fetch.trace": "200ms",
   "index.search.slowlog.level": "info"
}<p>Consultas que demoram muito para retornar resultados provavelmente são as que consomem mais recursos.</p><h4><strong>Tamanho excessivo do índice de volume</strong></h4><p>Se você estiver enviando solicitações grandes, isso pode ser a causa de um alto consumo de memória heap. Tente reduzir o tamanho das solicitações de indexação em lote.</p><h4><strong>Problemas de mapeamento</strong></h4><p>Em particular, se você usar “fielddata: true”, isso pode consumir grande parte da memória heap da sua JVM.</p><h4><strong>Tamanho do heap configurado incorretamente</strong></h4><p>O tamanho do heap pode ser definido manualmente por:</p><p>Definindo a variável de ambiente:</p>ES_JAVA_OPTS="-Xms2g -Xmx2g"<p>Edite o arquivo jvm.options no diretório de configuração do Elasticsearch:</p>-Xms2g
-Xmx2g<p>A configuração da variável de ambiente tem prioridade sobre a configuração do arquivo.</p><p>É necessário reiniciar o nó para que a configuração seja considerada.</p><h4><strong>A nova proporção da JVM foi configurada incorretamente.</strong></h4><p>Geralmente NÃO é necessário configurar isso, pois o Elasticsearch define esse valor por padrão. Este parâmetro define a proporção de espaço disponível para objetos de “nova geração” e de “geração antiga” na JVM.</p><p>Se você perceber que as coletas de lixo antigas estão se tornando muito frequentes, pode tentar definir esse valor especificamente no arquivo jvm.options no diretório de configuração do Elasticsearch.</p>-XX:NewRatio=3<h3><strong>Quais são as melhores práticas para gerenciar o uso do tamanho do heap e a coleta de lixo da JVM em um cluster Elasticsearch de grande porte?</strong></h3><p>As melhores práticas para gerenciar o uso do tamanho do heap e a coleta de lixo da JVM em um cluster Elasticsearch de grande porte consistem em garantir que o tamanho do heap seja definido para, no máximo, 50% da RAM disponível e que as configurações de coleta de lixo da JVM sejam otimizadas para o caso de uso específico. É importante monitorar o tamanho do heap e as métricas de coleta de lixo para garantir que o cluster esteja funcionando de forma otimizada. Especificamente, é importante monitorar o tamanho do heap da JVM, o tempo de coleta de lixo e as pausas na coleta de lixo. Além disso, é importante monitorar o número de ciclos de coleta de lixo e o tempo gasto nessa atividade. Ao monitorar essas métricas, é possível identificar quaisquer problemas potenciais com o tamanho do heap ou com as configurações de coleta de lixo e tomar medidas corretivas, se necessário.</p>]]></content:encoded>
    <link>https://www.elastic.co/search-labs/blog/elasticsearch-heap-size-jvm-garbage-collection</link>
    <guid isPermaLink="true">https://www.elastic.co/search-labs/blog/elasticsearch-heap-size-jvm-garbage-collection</guid>
    <category><![CDATA[Noções básicas]]></category>
    <dc:creator><![CDATA[Kofi Bartlett]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltc58290fbc9f4efb9/6a1705f97d8d67cae970e632/b162c28623b9070fd1980bcd891b9dd1e868f2f0-720x421.jpg" length="0" type="image/jpeg"/>
    <pubDate>Tue, 22 Apr 2025 00:00:00 GMT</pubDate>
  </item>
  <item>
    <title><![CDATA[Como aumentar o número de shards primários no Elasticsearch]]></title>
    <description><![CDATA[Aprenda como aumentar o número de shards principais no Elasticsearch usando as APIs split e reindex para ter o redimensionamento ideal de shards.]]></description>
    <content:encoded><![CDATA[<p>Não é possível aumentar o número de shards primários de um índice existente, o que significa que um índice precisa ser recriado se você quiser aumentar a quantidade de shards primários. Geralmente, existem dois métodos utilizados nessas situações: a API _reindex e a API _split.</p><p>A API _split costuma ser um método mais rápido do que a API _reindex. <strong>A indexação</strong> <strong>deve ser interrompida</strong> antes de ambas as operações; caso contrário, as contagens de documentos em source_index e target_index serão diferentes.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt46dd6abe0e6fe1eb/6a17e368148009d6a7b486d3/aa0ae010c2f5691ca00440fb453ed6b47bacd24f-1200x628.png" alt="Aumentando o número de shards no Elasticsearch ao recriar um índice" /><h2>Método 1 – usando a API dividida</h2><p>A API de divisão é usada para criar um novo índice com o número desejado de shards primários, copiando as configurações e mapeando um índice existente. O número desejado de fragmentos primários pode ser definido durante a criação. As seguintes configurações devem ser verificadas antes de implementar a API dividida:</p><ol><li><p>O índice de origem deve ser somente leitura. Isso significa que o processo de indexação precisa ser interrompido.</p></li><li><p>O número de shards primários no índice de destino deve ser um múltiplo do número de shards primários no índice de origem. Por exemplo, se o índice de origem tiver 5 shards primários, o número de shards primários do índice de destino pode ser definido como 10, 15, 20 e assim por diante.</p></li></ol><p>Observação: Se apenas o número do fragmento primário precisar ser alterado, a API de divisão é preferível, pois é muito mais rápida do que a API de reindexação.</p><h3>Implementando a API dividida</h3><p>Criar um índice de teste:</p>POST test_split_source/_doc
{
  "test": "test"
}<p>O índice de origem deve ser somente leitura para poder ser dividido:</p>PUT test_split_source/_settings
{
  "index.blocks.write": true
}<p>As configurações e os mapeamentos serão copiados automaticamente do índice de origem:</p>POST /test_split_source/_split/test_split_target
{
  "settings": {
    "index.number_of_shards": 3
  }
}<p>Você pode verificar o progresso com:</p>GET _cat/recovery/test_split_target?v&amp;h=index,shard,time,stage,files_percent,files_total<p>Como as configurações e os mapeamentos são copiados dos índices de origem, o índice de destino é somente leitura. Vamos habilitar a operação de escrita para o índice de destino:</p>PUT test_split_target/_settings
{
    "index.blocks.write": null
}<p>Verifique a contagem de documentos (docs.count) nos índices de origem e destino antes de excluir o índice original:</p>GET _cat/indices/test_split*?v&amp;h=index,pri,rep,docs.count<p>O nome do índice e o nome do alias não podem ser iguais. Você precisa excluir o índice de origem e adicionar o nome do índice de origem como um alias para o índice de destino:</p>DELETE test_split_source
PUT /test_split_target/_alias/test_split_source<p>Após adicionar o alias <strong>test_split_source</strong> ao índice <strong>test_split_target</strong> , você deve testá-lo com:</p>GET test_split_source
POST test_split_source/_doc
{
  "test": "test"
}<h2>Método 2 – usando a API de reindexação</h2><p>Ao criar um novo índice com a API Reindex, é possível definir qualquer número de shards primários. Após a criação de um novo índice com o número desejado de shards primários, todos os dados do índice de origem podem ser reindexados para esse novo índice.</p><p>Além dos recursos de API dividida, os dados podem ser manipulados usando o ingest_pipeline no AP de reindexação. Com o pipeline de ingestão, somente os campos especificados que correspondem ao filtro serão indexados no índice de destino usando a consulta. O conteúdo dos dados pode ser alterado usando um script simples, e vários índices podem ser mesclados em um único índice.</p><h3>Implementando a API de reindexação</h3><p>Criar um reindexador de teste:</p>POST test_reindex_source/_doc
{
    "test": "test"
}<p>Copie as configurações e os mapeamentos do índice de origem:</p>GET test_reindex_source<p>Crie um índice de destino com configurações, mapeamentos e a quantidade desejada de fragmentos (shards):</p>PUT test_reindex_target
{
  "mappings" : {},
  "settings": {
    "number_of_shards": 10,
    "number_of_replicas": 0,
    "refresh_interval": -1
  }
}<p>*Nota: definir number_of_replicas: 0 e refresh_interval: -1 aumentará a velocidade de reindexação.</p><p>Inicie o processo de reindexação. Definir requests_per_second=-1 e slices=auto ajustará a velocidade de reindexação.</p>POST _reindex?requests_per_second=-1&amp;slices=auto&amp;wait_for_completion=false
{
  "source": {
    "index": "test_reindex_source"
  },
  "dest": {
    "index": "test_reindex_target"
  }
}<p>Você verá o task_id ao executar a API de reindexação. Copie isso e verifique com a API _tasks:</p>GET _tasks/&lt;task_id&gt;<p>Atualize as configurações após a conclusão da reindexação:</p>PUT test_reindex_target/_settings
{
  "number_of_replicas": 1,
  "refresh_interval": "1s"
}<p>Antes de excluir o índice original, verifique o número de documentos (docs.count) nos índices de origem e destino; eles devem ser iguais.</p>GET _cat/indices/test_reindex_*?v&amp;h=index,pri,rep,docs.count<p>O nome do índice e o nome do alias não podem ser iguais. Exclua o índice de origem e adicione o nome do índice de origem como um alias para o índice de destino:</p>DELETE test_reindex_source
PUT /test_reindex_target/_alias/test_reindex_source<p>Após adicionar o alias test_split_source ao índice test_split_target, teste-o usando:</p>GET test_reindex_source<h2>Resumo</h2><p>Se você deseja aumentar o número de shards primários de um índice existente, precisa recriar as configurações e os mapeamentos para um novo índice. Existem dois métodos principais para fazer isso: a API de reindexação e a API de divisão. A indexação ativa deve ser interrompida antes de usar qualquer um dos métodos.</p>]]></content:encoded>
    <link>https://www.elastic.co/search-labs/blog/elasticsearch-increase-primary-shard-count</link>
    <guid isPermaLink="true">https://www.elastic.co/search-labs/blog/elasticsearch-increase-primary-shard-count</guid>
    <category><![CDATA[Noções básicas]]></category>
    <dc:creator><![CDATA[Kofi Bartlett]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blta8aa774fc00d7233/6a17e223dbb4ff68b3fb5611/7034b76019a0cba52c25eda29fceb18afc96ed0b-720x420.png" length="0" type="image/png"/>
    <pubDate>Thu, 17 Apr 2025 00:00:00 GMT</pubDate>
  </item>
  <item>
    <title><![CDATA[Como migrar dados entre diferentes versões do Elasticsearch e entre clusters]]></title>
    <description><![CDATA[Explorando métodos para transferência de dados entre versões e clusters do Elasticsearch.]]></description>
    <content:encoded><![CDATA[<p>Quando você deseja atualizar um cluster do Elasticsearch, às vezes é mais fácil criar um novo cluster separado e transferir dados do cluster antigo para o novo. Isso oferece aos usuários a vantagem de poder testar todos os seus dados e configurações no novo cluster com todos os seus aplicativos, sem qualquer risco de tempo de inatividade ou perda de dados.</p><p>As desvantagens dessa abordagem são que ela requer alguma duplicação de hardware e pode criar dificuldades ao tentar transferir e sincronizar todos os dados sem problemas.</p><p>Também pode ser necessário realizar um procedimento semelhante se você precisar migrar aplicativos de um data center para outro.</p><p>Neste artigo, discutiremos e detalharemos três maneiras de transferir dados entre clusters do Elasticsearch.</p><p><strong>Como migrar dados entre clusters do Elasticsearch?</strong></p><p>Há 3 maneiras de transferir dados entre clusters do Elasticsearch:</p><ol><li><p><a href="https://www.elastic.co/pt/search-labs/blog/elasticsearch-migrate-data-versions-clusters#1.-reindexing-data-from-a-remote-cluster">Reindexação de um cluster remoto</a></p></li><li><p><a href="https://www.elastic.co/pt/search-labs/blog/elasticsearch-migrate-data-versions-clusters#2.-transferring-data-using-snapshots">Transferindo dados usando snapshots</a></p></li><li><p><a href="https://www.elastic.co/pt/search-labs/blog/elasticsearch-migrate-data-versions-clusters#3.-transferring-data-using-logstash">Transferindo dados usando Logstash</a></p></li></ol><p>Usar snapshots geralmente é a maneira mais rápida e confiável de transferir dados. No entanto, tenha em mente que você só pode restaurar um snapshot em um cluster de uma versão igual ou superior e nunca com uma diferença de mais de uma versão principal. Isso significa que você pode restaurar um snapshot 6.x em um cluster 7.x, mas não em um cluster 8.x.</p><p>Se precisar aumentar em mais de uma versão principal, você precisará reindexar ou usar o Logstash.</p><p>Agora, vamos analisar detalhadamente cada uma das três opções para transferir dados entre clusters do Elasticsearch.</p><h2>1. Reindexando dados de um cluster remoto</h2><p>Antes de começar a reindexar, lembre-se de que você precisará configurar mapeamentos apropriados para todos os índices no novo cluster. Para fazer isso, você deve criar os índices diretamente com os mapeamentos apropriados ou usar modelos de índice.</p><h3>Reindexação remota — configuração necessária</h3><p>Para reindexar remotamente, você deve adicionar a configuração abaixo ao arquivo elasticsesearch.yml do cluster que está recebendo os dados, que, em sistemas Linux, geralmente está localizado aqui: /etc/elasticsearch/elasticsearch.yml. A configuração a ser adicionada é a seguinte:</p>reindex.remote.whitelist: "192.168.1.11:9200"<p>Se estiver usando SSL, você deve adicionar o certificado CA a cada nó e incluir o seguinte no comando para cada nó em elasticsearch.yml:</p>reindex.ssl.certificate_authorities: “/path/to/ca.pem”<p>Como alternativa, você pode adicionar a linha abaixo a todos os nós do Elasticsearch para desabilitar a verificação SSL. Entretanto, essa abordagem é menos recomendada, pois não é tão segura quanto a opção anterior:</p>reindex.remote.whitelist: "192.168.1.11:9200"
reindex.ssl.verification_mode: none
systemctl restart elasticsearch service <p>Você precisará fazer essas modificações em cada nó e executar uma reinicialização contínua. Para mais informações sobre como fazer isso, consulte <a href="https://www.elastic.co/pt/guide/en/elasticsearch/reference/8.17/restart-cluster.html#restart-cluster-rolling">nosso guia</a>.</p><h3>Comando de reindexação</h3><p>Depois de definir o host remoto no arquivo elasticsearch.yml e adicionar os certificados SSL, se necessário, você pode começar a reindexar os dados com o comando abaixo:</p>POST _reindex
{
  "source": {
    "remote": {
      "host": "http://192.168.1.11:9200",
      "username": "elastic",
      "password": "123456",
     "socket_timeout": "1m",
      "connect_timeout": "1m"

    },
    "index": "companydatabase"
  },
  "dest": {
    "index": "my-new-index-000001"
  }
}<p>Ao fazer isso, você pode enfrentar erros de tempo limite, então pode ser útil estabelecer valores generosos para tempos limite em vez de depender de padrões.</p><p>Agora, vamos dar uma olhada em alguns outros erros comuns que você pode encontrar ao reindexar remotamente.</p><h3>Erros comuns ao reindexar remotamente</h3><h4>1. Reindexação não permitida</h4>{
  "error": {
    "root_cause": [
      {
        "type": "illegal_argument_exception",
        "reason": "[192.168.1.11:9200] not whitelisted in reindex.remote.whitelist"
      }
    ],
    "type": "illegal_argument_exception",
    "reason": "[192.168.1.11:9200] not whitelisted in reindex.remote.whitelist"
  },
  "status": 400
}<p>Se você encontrar esse erro, isso indica que você não definiu o endereço IP do host remoto ou o DNS do nome do nó no Elasticsearch conforme descrito acima ou esqueceu de reiniciar os serviços do Elasticsearch.</p><p>Para corrigir isso no cluster do Elasticsearch, você precisa adicionar o host remoto a todos os nós do Elasticsearch e reiniciar os serviços do Elasticsearch.</p><h4>2. Exceção de handshake SSL</h4>{
  "error": {
    "root_cause": [
      {
        "type": "s_s_l_handshake_exception",
        "reason": "PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target"
      }
    ],
    "type": "s_s_l_handshake_exception",
    "reason": "PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target",
    "caused_by": {
      "type": "validator_exception",
      "reason": "PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target",
      "caused_by": {
        "type": "sun_cert_path_builder_exception",
        "reason": "unable to find valid certification path to requested target"
      }
    }
  },
  "status": 500
}<p>Este erro significa que você esqueceu de adicionar reindex.ssl.certificate_authorities ao elasticsearch.yml, conforme descrito acima. Para adicioná-lo:</p>#elasticsearch.yml
reindex.ssl.certificate_authorities: "/path/to/ca.pem"<h2>2. Transferindo dados usando snapshots</h2><p>Lembre-se, como mencionado acima, você só pode restaurar um snapshot em um cluster de uma versão igual ou superior e nunca com uma diferença de mais de uma versão principal</p><p>Se precisar aumentar em mais de uma versão principal, você precisará reindexar ou usar o Logstash.</p><p>As seguintes etapas são necessárias para transferir dados por meio de snapshots:</p><p>Etapa 1. Adicionando o plugin do repositório ao primeiro cluster do Elasticsearch – Para transferir dados entre clusters por meio de snapshots, você precisa garantir que o repositório seja acessível tanto pelo cluster novo quanto pelo antigo. Repositórios de armazenamento em nuvem como AWS, Google e Azure geralmente são ideais para isso. Para tirar instantâneos, consulte <a href="https://www.elastic.co/pt/guide/en/elasticsearch/reference/current/snapshot-restore.html">nosso guia</a> e siga os passos descritos.</p><p>Etapa 2. Reinicie o serviço Elasticsearch (reinicialização contínua).</p><p>Etapa 3. Crie um repositório para o primeiro cluster do Elasticsearch.</p><p>Etapa 4 - Adicione o plugin do repositório ao segundo cluster do Elasticsearch.</p><p>Etapa 5 - Adicionar repositório como somente leitura ao segundo cluster do Elasticsearch – Você precisará adicionar um repositório repetindo as mesmas etapas executadas para criar o primeiro cluster do Elasticsearch.</p><p>Observação importante: ao conectar o segundo cluster do Elasticsearch ao mesmo repositório do AWS S3, você deve definir o repositório como um repositório somente leitura:</p>PUT _snapshot/my_s3_repository
{
  "type": "s3",
  "settings": {
    "bucket": "my-analytic-data",
    "endpoint": "s3.eu-de.cloud-object-storage.appdomain.cloud",
    "readonly": "true"
  }
}<p>Isso é importante porque você quer evitar o risco de misturar versões do Elasticsearch dentro do mesmo repositório de snapshots.</p><p>Etapa 6 - Restaurando dados para o segundo cluster do Elasticsearch – Após seguir as etapas acima, você pode restaurar os dados e transferi-los para o novo cluster. Siga as etapas descritas <a href="https://www.elastic.co/pt/guide/en/elasticsearch/reference/current/snapshot-restore.html">neste artigo</a> para restaurar dados no novo cluster. </p><h2>3. Transferindo dados usando Logstash</h2><p>Antes de começar a transferir os dados com o logstash, lembre-se de que você precisará configurar mapeamentos apropriados para todos os índices no novo cluster. Para fazer isso, você precisará criar os índices diretamente ou usar modelos de índice.</p><p>Para transferir dados entre dois clusters do Elasticsearch, você pode configurar um servidor Logstash temporário e usá-lo para transferir seus dados entre dois clusters. Para clusters pequenos, uma instância de 2 GB de RAM deve ser suficiente. Para clusters maiores, você pode usar CPUs de quatro núcleos com 8 GB de RAM.</p><p>Para obter orientações sobre como instalar o Logstash, <a href="https://www.elastic.co/pt/guide/en/logstash/current/installing-logstash.html">clique aqui</a>.</p><h3>Configuração do Logstash para transferência de dados de um cluster para outro</h3><p>Uma configuração básica para copiar um único índice do cluster A para o cluster B é:</p>iinput
{
elasticsearch
      {
        hosts =&gt; ["192.168.1.11:9200"]
        index =&gt; "index_name"
       docinfo =&gt; true      
      }
}

output 
{
  elasticsearch {
        hosts =&gt; "https://192.168.1.12:9200"
        index =&gt; "index_name"
        
  }
}<p>Para um Elasticsearch seguro, você pode usar a configuração abaixo:</p>input
{
  elasticsearch
      {
        hosts =&gt; ["192.168.1.11:9200"]
        index =&gt; "index_name"
        docinfo =&gt; true 
        user =&gt; "elastic"
        password =&gt; "elastic_password"
        ssl =&gt; true
        ssl_certificate_verification =&gt; false
            
      }
}

output 
{
  elasticsearch {
        hosts =&gt; "https://192.168.1.12:9200"
        index =&gt; "index_name"
        user =&gt; "elastic"
        password =&gt; "elastic_password"
        ssl =&gt; true
        ssl_certificate_verification =&gt; false
  }
}<h3>Metadados de índice</h3><p>Os comandos acima gravarão em um único índice nomeado. Se você quiser transferir vários índices e preservar os nomes dos índices, será necessário adicionar a seguinte linha à saída do Logstash:</p>index =&gt; "%{[@metadata][_index]}"<p>Além disso, se você quiser preservar a identificação original do documento, será necessário adicionar:</p>document_id =&gt; "%{[@metadata][_id]}"<p>Tenha em mente que definir o ID do documento tornará a transferência de dados significativamente mais lenta, portanto, preserve o ID original somente se necessário.</p><h2>Sincronização de atualizações</h2><p>Todos os métodos descritos acima levarão um período de tempo relativamente longo, e você poderá descobrir que os dados no cluster original foram atualizados enquanto aguardava a conclusão do processo.</p><p>Existem várias estratégias para permitir a sincronização de quaisquer atualizações que possam ter ocorrido durante o processo de transferência de dados, e você deve pensar sobre essas questões antes de iniciar o processo. Em particular, você precisa pensar sobre:</p><ul><li><p>Qual método você usa para identificar quaisquer dados que foram atualizados/adicionados desde o início do processo de transferência de dados (por exemplo, um campo “last_update_time” nos dados)?</p></li><li><p>Que método você pode usar para transferir o último pedaço de dados?</p></li><li><p>Existe risco de registros serem duplicados? Geralmente, existe, a menos que o método que você está usando defina o ID do documento durante a reindexação para um valor conhecido).</p></li></ul><p>Os diferentes métodos para habilitar a sincronização de atualizações são descritos abaixo.</p><h3>1. Utilização de sistemas de filas</h3><p>Alguns sistemas de ingestão/atualização usam filas que permitem que você “reproduza” modificações de dados recebidas nos últimos x dias. Isso pode fornecer um meio de sincronizar quaisquer alterações realizadas. </p><h3>2. Reindexar remotamente</h3><p>Repita o processo de reindexação para todos os itens em que “last_update_time” &gt; x dias atrás. Você pode fazer isso adicionando um parâmetro “consulta” à solicitação de reindexação.</p><h3>3. Logstash</h3><p>Na entrada do Logstash, você pode adicionar uma consulta para filtrar todos os itens em que “last_update_time” &gt; x dias atrás. No entanto, esse processo causará duplicatas em dados não temporais, a menos que você tenha definido o document_id.</p><h3>4. Instantâneos</h3><p>Não é possível restaurar apenas parte de um índice, então você teria que usar um dos outros métodos de transferência de dados descritos acima (ou um script) para atualizar quaisquer alterações que tenham ocorrido desde que o processo de transferência de dados foi realizado.</p><p>No entanto, a restauração de snapshots é um processo muito mais rápido do que a reindexação/Logstash, então pode ser possível suspender as atualizações por um breve período de tempo enquanto os snapshots são transferidos para evitar o problema completamente.</p>]]></content:encoded>
    <link>https://www.elastic.co/search-labs/blog/elasticsearch-migrate-data-versions-clusters</link>
    <guid isPermaLink="true">https://www.elastic.co/search-labs/blog/elasticsearch-migrate-data-versions-clusters</guid>
    <category><![CDATA[Noções básicas]]></category>
    <dc:creator><![CDATA[Kofi Bartlett]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltfc041ebca11476c6/6a16f70560084b31b93c4344/01fde3b1d714f12bf8673140c9f2f940d443de31-1440x823.jpg" length="0" type="image/jpeg"/>
    <pubDate>Mon, 14 Apr 2025 00:00:00 GMT</pubDate>
  </item>
  </channel>
</rss>