<?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/es/search-labs/author/kofi-bartlett</link>
    </image>
    <link>https://www.elastic.co/es/search-labs/author/kofi-bartlett</link>
    <atom:link href="https://www.elastic.co/es/search-labs/rss/author/kofi-bartlett.xml" rel="self" type="application/rss+xml"/>
    <language><![CDATA[es]]></language>
    <lastBuildDate>Mon, 28 Sep 2026 05:13:21 GMT</lastBuildDate>
  <item>
    <title><![CDATA[Visualización de campos en un índice de Elasticsearch]]></title>
    <description><![CDATA[Explorando técnicas para mostrar campos en un índice de Elasticsearch.
]]></description>
    <content:encoded><![CDATA[<p>En este artículo, hablaremos de cómo mostrar campos en un índice de Elasticsearch. Esto puede ser útil para entender la estructura de tus datos, identificar campos específicos y solucionar problemas. Vamos a tratar los siguientes temas:</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">Uso de la </a>API<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><a href="https://www.elastic.co/search-labs/blog/displaying-fields-in-an-elasticsearch-index#1.-using-the--mapping-api-to-retrieve-field-information"> para recuperar información de campo</a></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">Uso de la </a>API<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><a href="https://www.elastic.co/search-labs/blog/displaying-fields-in-an-elasticsearch-index#2.-using-the--search-api-to-display-field-values"> para mostrar los valores de los campos</a></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">Filtrado de campos usando el </a><a href="https://www.elastic.co/search-labs/blog/displaying-fields-in-an-elasticsearch-index#3.-filtering-fields-using-the-fields-parameter"> parámetrofields</a></p></li><li><p><a href="https://www.elastic.co/search-labs/blog/displaying-fields-in-an-elasticsearch-index#4.-displaying-nested-fields">Visualización de campos anidados</a></p></li></ol><h2>1. Uso de la API _mapping para recuperar información de campo</h2><p>La API <code>_mapping</code> permite recuperar la definición de mapeo para un índice o varios <a href="https://opster.com/guides/elasticsearch/glossary/elasticsearch-index/">índices</a>. Esto incluye información sobre los campos, sus tipos de datos y otras propiedades. Para recuperar el mapeo de un índice específico, emplee la siguiente petición:</p>GET /&lt;index_name&gt;/_mapping<p>Por ejemplo, si tienes un índice llamado <code>my_index</code>, puedes recuperar su mapeo con la siguiente petición:</p>GET /my_index/_mapping<p>La respuesta incluirá la definición de mapeo para el índice, que contiene información sobre los campos y sus propiedades.</p><p>También es posible recuperar el mapeo de un campo específico. Esto puede ser útil si tu mapeo es bastante grande y solo quieres centrarte en un campo específico. Para recuperar el mapeo de un campo específico, emplee la siguiente petición:</p>GET /my_index/_mapping/field/my_field<p>También puedes recuperar los mapeos de varios campos separando sus nombres con comas, como en la siguiente petición:</p>GET /my_index/_mapping/field/my_field_1,my_field_2,my_field_3<h2>2. Uso de la API _search para mostrar los valores de los campos</h2><p>Para mostrar los valores de los campos en un índice de Elasticsearch, puedes usar la API <code>_search</code> . Por defecto, la API <code>_search</code> devuelve el campo <code>_source</code> , que contiene el documento JSON original que se indexó. Para mostrar solo campos específicos, puedes usar el parámetro <code>_source</code> en la solicitud de búsqueda.</p><p>Aquí tienes un ejemplo de una solicitud de búsqueda que devuelve los valores de los campos <code>title</code> y <code>author</code> para documentos en el índice <code>my_index</code> :</p>GET /my_index/_search
{
  "query": {
    "match_all": {}
  },
  "_source": ["title", "author"]
}<p>En este ejemplo, el parámetro <code>_source</code> especifica los campos que se deben devolver.</p><h2>3. Filtrado de campos usando el parámetro de campos</h2><p>También puedes usar el parámetro <code>fields</code> para filtrar los campos que aparecen en la respuesta de búsqueda. Esto puede ser útil si solo necesitas campos específicos y quieres reducir el tamaño de la respuesta. El parámetro <code>fields</code> acepta una matriz de nombres de campos o patrones comodines.</p><p>Por ejemplo, para devolver solo los campos <code>title</code> y <code>author</code> de los documentos en el índice de <code>my_index</code> , puedes usar la siguiente solicitud de búsqueda:</p>GET /my_index/_search
{
  "query": {
    "match_all": {}
  },
  "fields": ["title", "author"],
  "_source": false
}<p>Ten en cuenta que el parámetro <code>_source</code> está configurado como falso para no devolver el documento fuente.</p><p>Para devolver todos los campos con un <code>text</code> tipo de dato, puedes usar un patrón comodín como este:</p>GET /my_index/_search
{
  "query": {
    "match_all": {}
  },
  "fields": ["*.text"],
  "_source": false
}<h2>4. Visualización de campos anidados</h2><p>Si tu índice contiene campos anidados, puedes usar la notación de puntos para especificar el camino de campo anidado en el parámetro <code>fields</code> . Por ejemplo, si tienes un campo anidado llamado <code>address.city</code>, puedes incluirlo en la respuesta de búsqueda así:</p>GET /my_index/_search
{
  "query": {
    "match_all": {}
  },
  "fields": ["title", "author", "address.city"],
  "_source": false
}<p>En este ejemplo, la respuesta de búsqueda incluirá los valores de los campos <code>title</code>, <code>author</code> <code>address.city</code> .</p><h2>Conclusión</h2><p>En conclusión, se puede lograr mostrar campos en un índice de Elasticsearch empleando la API <code>_mapping</code> para recuperar información de campos y la API <code>_search</code> para mostrar los valores de campo. Puedes filtrar los campos que aparecen en la respuesta de búsqueda usando los parámetros de <code>_source</code> o <code>fields</code> y mostrar los campos anidados usando la notación de puntos. Estas técnicas pueden ayudarte a entender la estructura de tus datos, identificar campos específicos y 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[Datos de índice]]></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[Cómo optimizar el espacio en disco y el uso de Elasticsearch]]></title>
    <description><![CDATA[Aprende a prevenir y manejar los casos en los que el disco de Elasticsearch está demasiado lleno (sobreutilización) y cuando la capacidad del disco está infrautilizada para optimizar los costos del clúster.]]></description>
    <content:encoded><![CDATA[<p>La gestión de discos es importante en cualquier base de datos, y Elasticsearch no es una excepción. Si no tienes suficiente espacio en disco disponible, Elasticsearch dejará de asignar fragmentos al nodo. Esto acabará impidiéndote poder escribir datos en el clúster, con el riesgo potencial de pérdida de datos en tu aplicación. Por otro lado, si tienes demasiado espacio en disco, entonces estás pagando por más recursos de los que necesitas.</p><h2>Antecedentes sobre las marcas de agua</h2><p>Hay varios umbrales de "marca de agua" en tu clúster de Elasticsearch que te ayudan a rastrear el espacio disponible en disco. A medida que el disco se llena en un nodo, el primer umbral que se cruzará será la "marca de agua de disco bajo". El segundo umbral será entonces el "umbral alto de marca de agua en disco". Finalmente, se alcanzará la "fase de inundación de disco". Una vez superado este umbral, el clúster bloqueará la escritura en TODOS los índices que tengan un fragmento (primario o réplica) en el nodo que pasó la marca de agua. Las lecturas (búsquedas) seguirán siendo posibles.</p><h2>Cómo prevenir y manejar casos cuando el disco está demasiado lleno (sobreutilización)</h2><p>Existen varios métodos para gestionar casos cuando tu disco de Elasticsearch está demasiado lleno:</p><ol><li><p><strong>Eliminar</strong> <strong>datos antiguos:</strong> Normalmente, los datos no deben conservar indefinidamente. Una forma de evitar y solucionar que el disco esté demasiado lleno es cerciorar de que, cuando los datos alcancen cierta edad, se archiven y eliminen de forma fiable. Una forma de hacerlo es usando <a href="https://www.elastic.co/docs/manage-data/lifecycle/index-lifecycle-management">ILM</a>.</p></li><li><p><strong>Agregar capacidad de almacenamiento:</strong> Si no puedes eliminar los datos, quizá quieras agregar más nodos de datos o aumentar el tamaño de los discos para conservar todos los datos sin afectar negativamente al rendimiento. Si necesitas agregar capacidad de almacenamiento al clúster, deberías considerar si necesitas agregar solo capacidad de almacenamiento, o tanto capacidad de almacenamiento como RAM y recursos de CPU en proporción (ver la sección sobre <a href="https://www.elastic.co/search-labs/blog/optimize-elasticsearch-disk-space-and-usage#the-relationship-between-disk-size,-ram-and-cpu">la proporción entre tamaño de disco, RAM y CPU</a> más abajo).</p></li></ol><h2>Cómo agregar capacidad de almacenamiento a tu clúster de Elasticsearch</h2><ol><li><p><strong>Aumentar el número de nodos de datos: </strong>Recuerda que los nuevos nodos deben tener el mismo tamaño que los nodos existentes y la misma versión de Elasticsearch.</p></li><li><p><strong>Aumentar el tamaño de los nodos existentes: </strong>En entornos basados en la nube, suele ser fácil aumentar el tamaño del disco y la RAM/CPU en los nodos existentes.</p></li><li><p><strong>Aumenta solo el tamaño del disco: </strong>En entornos basados en la nube, a menudo es relativamente fácil aumentar el tamaño del disco.</p></li><li><p><a href="https://www.elastic.co/docs/deploy-manage/tools/snapshot-and-restore"><strong>Instantánea</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>y</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>restauración</strong></a><strong>:</strong> Si estás dispuesto a permitir que se recuperen datos antiguos a petición en un proceso automatizado desde copias de seguridad, puedes hacer instantáneas de índices antiguos, eliminarlos y restaurar datos temporalmente a petición de las instantáneas. </p></li><li><p><strong>Reducir réplicas por fragmento:</strong> Otra opción para reducir los datos es reducir el número de réplicas de cada fragmento. Para alta disponibilidad, te gustaría tener una réplica por fragmento, pero cuando los datos envejecen, podrías trabajar sin réplicas. Esto normalmente podría funcionar si los datos son persistentes o si tienes una copia de seguridad que restaurar si es necesario.</p></li><li><p><strong>Crea alertas:</strong> Para evitar que los discos se llenen en el futuro y actuar de forma proactiva, deberías crear alertas basadas en el uso del disco que te avisen cuando el disco empiece a llenar. </p></li></ol><h2>Cómo prevenir y gestionar casos en los que la capacidad del disco está infrautilizada</h2><p>Si la capacidad de tu disco está infrautilizada, existen varias opciones para reducir el volumen de almacenamiento en tu clúster.</p><h3>Cómo reducir el volumen de almacenamiento en un clúster de Elasticsearch</h3><p>Existen varios métodos para reducir el volumen de almacenamiento de un clúster.</p><p><strong>1. Reducir el número de nodos de datos</strong></p><p>Si quieres reducir el almacenamiento de datos y también reducir los recursos de RAM y CPU en la misma proporción, esta es la estrategia más sencilla. Desmantelar nodos innecesarios probablemente suponga el mayor ahorro de costos.</p><p>Antes de desactivar el nodo, deberías:</p><ul><li><p>Cerciorar de que el nodo a desmantelar no sea necesario como nodo MAESTRO. Siempre deberías tener al menos tres nodos con el rol de nodo MAESTRO.</p></li><li><p>Migra los fragmentos de datos fuera del nodo para ser desmantelados.</p></li></ul><p><strong>2. Sustituir nodos existentes por nodos más pequeños</strong></p><p>Si no puedes reducir aún más el número de nodos (normalmente 3 sería una configuración mínima), entonces quizá quieras reducir el tamaño de los nodos existentes. Recuerda que es recomendable cerciorar de que todos los nodos de datos tengan la misma memoria RAM y tamaño de disco, ya que los fragmentos se equilibran en función del número de fragmentos por nodo.</p><p>El proceso sería:</p><ul><li><p>Agregar nuevos nodos más pequeños al clúster</p></li><li><p>Migra los fragmentos lejos de los nodos para ser desmantelados</p></li><li><p>Apaga los nodos antiguos</p></li></ul><p><strong>3. Reducir el tamaño del disco en los nodos</strong></p><p>Si SOLO quieres reducir el tamaño del disco en los nodos sin cambiar la RAM o la CPU total del clúster, entonces puedes reducir el tamaño del disco para cada nodo. Reducir el tamaño del disco en un nodo Elasticsearch no es un proceso trivial.</p><p>La forma más sencilla de hacerlo suele ser:</p><ul><li><p>Migrar fragmentos desde el nodo</p></li><li><p>Detener el nodo</p></li><li><p>Montar un nuevo volumen de datos en el nodo con el tamaño adecuado</p></li><li><p>Copiar todos los datos del volumen de disco antiguo al volumen nuevo</p></li><li><p>Desacoplar el antiguo volumen A</p></li><li><p>Nodo inicial y migra fragmentos de vuelta a nodo</p></li></ul><p>Esto requiere que tengas suficiente capacidad en los otros nodos para almacenar temporalmente los fragmentos extra del nodo durante este proceso. En muchos casos, el costo de gestionar este proceso puede superar los posibles ahorros en el uso del disco. Por esta razón, puede ser más sencillo reemplazar el nodo por completo por uno nuevo con el tamaño de disco deseado (ver "Sustituir nodos existentes por nodos más pequeños" arriba).</p><p>Al pagar por recursos innecesarios, el costo obviamente puede reducir optimizando la utilización de los recursos.</p><h2>La relación entre el tamaño del disco, la RAM y la CPU</h2><p>La proporción ideal de capacidad de disco respecto a RAM en tu clúster dependerá de tu caso de uso particular. Por esta razón, al considerar cambios en tu capacidad de almacenamiento, también deberías considerar si las relaciones actuales de disco/RAM/CPU están adecuadamente equilibradas y si, como consecuencia, necesitas agregar o reducir RAM y CPU en la misma proporción.</p><p>Los requisitos de RAM y CPU dependen del volumen de actividad <a href="https://opster.com/guides/elasticsearch/glossary/elasticsearch-indexing/">de indexación</a> , el número y tipo de consultas, y también de la cantidad de datos que se están buscando y agregando. Esto suele ser proporcional a la cantidad de datos almacenados en el clúster y, por tanto, también debe estar relacionado con el tamaño del disco.</p><p>La proporción entre la capacidad del disco y la RAM puede cambiar según el caso de uso. Consulta algunos ejemplos aquí:</p><p></p><p>Actividad en el índice</p><p>Retención</p><p>Actividad de búsqueda</p><p>Capacidad del disco</p><p>CARNERO</p><p>Aplicación de búsqueda empresarial</p><p>Ingestión moderada de logarítmic</p><p>Largo</p><p>Luz</p><p>2TB</p><p>32GB</p><p>Monitorización de aplicaciones</p><p>Ingesta intensiva de troncos</p><p>Corto</p><p>Luz</p><p>1TB</p><p>32GB</p><p>Comercio electrónico</p><p>Indexación de datos de luz</p><p>Indefinido</p><p>Pesado</p><p>500GB</p><p>32GB</p><p><em>Recuerda que modificar la configuración de las máquinas de nodos debe hacer con cuidado, ya que puede implicar tiempo de inactividad de nodos y debes cerciorarte de que los fragmentos no empiecen a migrar a otros nodos ya sobreextendidos.</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[Conceptos básicos]]></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[Cómo configurar el número de réplicas en un índice de Elasticsearch]]></title>
    <description><![CDATA[Aprende a configurar el parámetro number_of_replicas en un índice de Elasticsearch para mejorar el rendimiento en las búsquedas y ofrecer resistencia ante fallos de nodos. 
]]></description>
    <content:encoded><![CDATA[<p>Elasticsearch está diseñado para ser un sistema distribuido que puede manejar una gran cantidad de datos y ofrecer una alta disponibilidad. Una de las características clave que permite esto es el concepto de replicación de índice, que está regulado por la configuración <code>number_of_replicas</code> . Este artículo profundizará en los detalles de este escenario, sus participaciones y cómo configurarlo correctamente.</p><h2>El papel de las réplicas en Elasticsearch</h2><p>En Elasticsearch, un índice es una colección de documentos que se dividen en múltiples fragmentos primarios. Cada fragmento primario es un índice Apache Lucene autosuficiente, y los documentos dentro de un índice se distribuyen entre todos los fragmentos primarios. Para garantizar una alta disponibilidad y redundancia de datos, Elasticsearch permite que cada fragmento tenga una o más copias, conocidas como réplicas.

La configuración <code>number_of_replicas</code> controla el número de fragmentos réplica (copias) que Elasticsearch crea para cada fragmento principal en un índice. Por defecto, Elasticsearch crea una réplica para cada shard primario, pero esto puede cambiar según los requisitos de tu sistema.</p><h2>Configuración de la number_of_replicas</h2><p>La configuración de <code>number_of_replicas</code> puede configurar en el momento de la creación del índice o actualizar más adelante. Así es como puedes configurarlo durante la creación del índice:</p>PUT /my_index
{
  "settings": {
    "number_of_replicas": 2
  }
}<p>En este ejemplo, Elasticsearch creará dos réplicas para cada fragmento primario en el índice de <code>my_index</code> .</p><p>Para actualizar la configuración de <code>number_of_replicas</code> de un índice existente, puedes usar la API <code>_settings</code> :</p>PUT /my_index/_settings
{
  "number_of_replicas": 3
}<p>Este comando actualizará el índice de <code>my_index</code> para tener tres réplicas por cada fragmento primario.</p><h2>Participaciones del entorno number_of_replicas</h2><p>La configuración <code>number_of_replicas</code> tiene un impacto significativo en el rendimiento y la resiliencia de tu <a href="https://opster.com/guides/elasticsearch/glossary/elasticsearch-cluster/">clúster</a> de Elasticsearch. Aquí tienes algunos puntos clave a tener en cuenta:</p><ol><li><p><strong>Redundancia y disponibilidad de datos:</strong> Aumentar la <code>number_of_replicas</code> mejora la disponibilidad de tus datos creando más copias de cada fragmento. Si un nodo falla, Elasticsearch aún puede servir datos de los fragmentos réplica en los <a href="https://opster.com/guides/elasticsearch/glossary/elasticsearch-node/">nodos</a> restantes.</p></li><li><p><strong>Rendimiento en la búsqueda:</strong> Los fragmentos réplica pueden atender solicitudes de lectura, por lo que tener más réplicas puede mejorar el rendimiento de búsqueda al distribuir la carga entre más fragmentos.</p></li><li><p><strong>Escribe la interpretación:</strong> Sin embargo, cada operación de escritura debe realizar en cada copia de un fragmento. Por lo tanto, un <code>number_of_replicas</code> mayor puede ralentizar el rendimiento <a href="https://opster.com/guides/elasticsearch/glossary/elasticsearch-indexing/">de la indexación</a> , ya que aumenta el número de operaciones que deben realizar por cada escritura.</p></li><li><p><strong>Requisitos de almacenamiento:</strong> Más réplicas significan más espacio de almacenamiento. Debes cerciorarte de que tu clúster tenga suficiente capacidad para almacenar las réplicas adicionales.</p></li><li><p><strong>Resiliencia ante el fallo de nodos:</strong> El <code>number_of_replicas</code> debería establecer teniendo en cuenta el número de nodos en tu clúster. Si el <code>number_of_replicas</code> es igual o mayor que el número de nodos, tu clúster puede tolerar el fallo de varios nodos sin pérdida de datos.</p></li></ol><h2>Mejores prácticas para establecer number_of_replicas</h2><p>La configuración óptima de <code>number_of_replicas</code> depende de los requisitos específicos de tu sistema. Sin embargo, aquí tienes algunas buenas prácticas generales:</p><ul><li><p>Para un clúster de un solo nodo, <code>number_of_replicas</code> debe estar en 0, ya que no hay otros nodos que almacenen réplicas.</p></li><li><p>Para un clúster multinodo, <code>number_of_replicas</code> debe estar configurado al menos en 1 para garantizar redundancia de datos y alta disponibilidad.</p></li><li><p>Si el rendimiento en las búsquedas es una prioridad, considera aumentar la <code>number_of_replicas</code>. Sin embargo, ten en cuenta el equilibrio entre el rendimiento de escritura y los requisitos de almacenamiento.</p></li><li><p>Cerciórate siempre de que tu clúster tenga suficiente capacidad para almacenar las réplicas adicionales.</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[Conceptos básicos]]></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[Excluyendo campos de Elasticsearch de la indexación]]></title>
    <description><![CDATA[Aprende a configurar Elasticsearch para excluir campos, las principales razones para excluir campos de indexación y las mejores prácticas a seguir.]]></description>
    <content:encoded><![CDATA[<p>En Elasticsearch, la indexación se refiere al proceso de almacenar y organizar los datos de una manera que los hace fácilmente consultables. Aunque indexar todos los campos de un documento puede ser útil en algunos casos, hay situaciones en las que podrías querer excluir ciertos campos de la indexación. Esto puede ayudar a mejorar el rendimiento, reducir los costos de almacenamiento y minimizar el tamaño total de tu índice de Elasticsearch.</p><p>En este artículo, hablaremos de las razones por las que excluye campos de la indexación, cómo configurar Elasticsearch para excluir campos específicos y algunas buenas prácticas a seguir al hacerlo.</p><h2>Razones para excluir campos de la indexación</h2><ol><li><p><strong>Rendimiento: </strong>Indexar todos los campos de un documento puede aumentar el tiempo de indexación y ralentizar el rendimiento de búsqueda. Excluyendo campos que no son necesarios para búsqueda o agregación, puedes mejorar el rendimiento general de tu clúster de Elasticsearch.</p></li><li><p><strong>Almacenamiento: </strong>Los campos de indexación consumen espacio de almacenamiento. Excluir campos que no son necesarios para búsqueda o agregación puede ayudar a reducir los requisitos de almacenamiento de tu clúster de Elasticsearch.</p></li><li><p><strong>Tamaño del índice: </strong>El tamaño de un índice de Elasticsearch está directamente relacionado con el número de campos indexados. Al excluir campos innecesarios, puedes minimizar el tamaño de tu índice, lo que puede llevar a un rendimiento de búsqueda e indexación más rápido.</p></li></ol><h2>Configuración de Elasticsearch para excluir campos</h2><p>Para excluir un campo de la indexación en Elasticsearch, puedes usar la propiedad "index" en el mapeo del campo. Al poner la propiedad "index" en "false", Elasticsearch no indexará el campo, y no será buscable ni estará disponible para agregaciones.</p><p>Aquí tienes un ejemplo de cómo excluir un campo de la indexación usando el mapeo Elasticsearch:</p>PUT /my_index
{
  "mappings": {
    "properties": {
      "field_to_exclude": {
        "type": "text",
        "index": false
      }
    }
  }
}<p>En este ejemplo, estamos creando un nuevo índice llamado "my_index" con un solo campo llamado "field_to_exclude". Al poner la propiedad "index" en "false", le decimos a Elasticsearch que no indexe este campo. Sin embargo, el campo seguirá estando disponible en el documento fuente.</p><h2>Mejores prácticas para excluir campos de la indexación</h2><ol><li><p><strong>Analiza tus datos: </strong>Antes de excluir campos de la indexación, es esencial analizar tus datos y entender qué campos son necesarios para la búsqueda y agregación. Esto te ayudará a tomar decisiones informadas sobre qué campos excluir.</p></li><li><p><strong>Prueba tus cambios: </strong>Al excluir campos de la indexación, es fundamental probar tus cambios para cerciorarte de que la funcionalidad de búsqueda y agregación sigue funcionando como se espera. Esto puede ayudarte a evitar problemas inesperados o de rendimiento.</p></li><li><p><strong>Rendimiento del monitor:</strong> Luego de excluir campos de la indexación, monitoriza el rendimiento de tu clúster de Elasticsearch para cerciorarte de que los cambios tuvieron el efecto deseado. Esto puede ayudarte a identificar posibles optimizaciones adicionales que puedan ser necesarias.</p></li><li><p><strong>Emplea filtrado de fuente:</strong> Si necesitas almacenar un campo en Elasticsearch pero no quieres que sea buscable ni disponible para agregaciones, considera usar filtrado de fuente. Esto te permite almacenar el campo en el campo _source pero excluirlo del índice.</p></li></ol><h2>Conclusión</h2><p>Excluir campos de la indexación en Elasticsearch puede ayudar a mejorar el rendimiento, reducir los costos de almacenamiento y minimizar el tamaño total de tu índice. Analizando cuidadosamente tus datos y entendiendo qué campos son necesarios para la búsqueda y agregación, puedes tomar decisiones informadas sobre cuáles excluir. Prueba siempre tus cambios y monitoriza el rendimiento de tu clúster de Elasticsearch para cerciorarte de que tus optimizaciones tienen el efecto deseado.</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[Datos de índice]]></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[Eliminar un campo de un documento en Elasticsearch]]></title>
    <description><![CDATA[Aprende a eliminar campos de los documentos de Elasticsearch mediante la API de actualización, scripts o reindexación para eliminaciones individuales y masivas.]]></description>
    <content:encoded><![CDATA[<p>En Elasticsearch, es un requisito común eliminar un campo de un documento. Esto puede ser útil cuando quieres eliminar información innecesaria o desactualizada de tu índice. En este artículo, discutiremos diferentes métodos para eliminar un campo de un documento en Elasticsearch, junto con ejemplos e instrucciones paso a paso. </p><h2>Método 1: Uso de la API de actualización</h2><p>La <a href="https://www.elastic.co/docs/reference/elasticsearch/rest-apis/update-document">API de actualización</a> te permite actualizar un documento mediante un script que modifica el código fuente del documento. Puedes usar esta API para eliminar un campo de un documento al configurarlo como nulo. Aquí tienes una guía paso a paso sobre cómo hacerlo:</p><p>1. Identifica el índice, el tipo de documento (si se emplea Elasticsearch 6.x o anterior) y el ID del documento que se desea actualizar.</p><p>2. Usar la API Update con un script que ponga el campo en null, o mejor aún, que lo elimine del documento fuente. El siguiente ejemplo demuestra cómo eliminar el campo "field_to_delete" de un documento con ID "1" en el índice "my_index":</p>POST /my_index/_update/1
{
  "script": "ctx._source.remove('field_to_delete')"
}<p>3. Ejecutar la solicitud. Si tiene éxito, Elasticsearch devolverá una respuesta indicando que el documento fue actualizado.</p><p>Nota: Este método solo elimina el campo del documento especificado. El campo seguirá existiendo en el mapeo y en otros documentos del índice.</p><h2>Método 2: Reindexación con una fuente modificada</h2><p>Si deseas eliminar un campo de todos los documentos de una indexación, puedes usar la <a href="https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-reindex">API de reindexación</a> para crear una indexación nueva con la fuente modificada. Aquí te explicamos cómo hacerlo:</p><p>1. Crear un nuevo índice con los mismos ajustes y asignaciones que el índice original. Puedes usar la API Get Index para recuperar la configuración y mapeo del índice original.</p><p>2. Emplear la API Reindex para copiar documentos del índice original al nuevo índice, eliminando el campo del código fuente. El siguiente ejemplo demuestra cómo eliminar el campo "field_to_delete" de todos los documentos en el índice "my_index":</p>POST /_reindex
{
  "source": {
    "index": "my_index"
  },
  "dest": {
    "index": "new_index"
  },
  "script": {
    "source": "ctx._source.remove('field_to_delete')"
  }
}<p>
3. Verificar que el nuevo índice contiene los documentos correctos con el campo eliminado.</p><p>4. Si todo parece bien, puedes eliminar el índice original y, si es necesario, agregar un alias al nuevo índice con el nombre del índice original.</p><h2>Método 3: Actualización del mapping y la reindexación</h2><p>Si quieres eliminar un campo del mapeo y todos los documentos de un índice, puedes actualizar el mapeo y luego volver a indexar los documentos. Así es como se hace:</p><p>1. Crear un nuevo índice con la misma configuración que el índice original.</p><p>2. Recuperar los mapeos del índice original usando la API Get Mapping.</p><p>3. Modifica los mapeos eliminando el campo que quieres eliminar.</p><p>4. Aplicar los mapeos modificados al nuevo índice usando la API de Put Maping.</p><p>5. Emplear la API Reindex para copiar documentos del índice original al nuevo índice, como se describe en el Método 2.</p><p>6. Verificar que el nuevo índice contiene los documentos correctos sin eliminar el campo y que el campo no esté presente en el mapeo.</p><p>7. Si todo se ve bien, puedes eliminar la indexación original y, si es necesario, agregar un alias a la indexación nueva con el nombre de la original.</p><h2>Conclusión</h2><p>En este artículo, discutimos tres métodos para eliminar un campo de un documento en Elasticsearch: usar la API Update, reindexar con un código fuente modificado y actualizar el mapeo y el reindexado. Cada método tiene sus propios casos de uso y compromisos, así que elige el que mejor se adapte a tus necesidades. Recuerda siempre probar tus cambios y verificar los resultados antes de aplicarlos a entornos de producción.</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[Conceptos básicos]]></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[Entendiendo el puntaje de Elasticsearch y la API Explain]]></title>
    <description><![CDATA[Aprende sobre los mecanismos de puntuación de Elasticsearch y la función de puntuación práctica para la auditoría de la relevancia de búsquedas y mejorar la clasificación de documentos con la API Explain.]]></description>
    <content:encoded><![CDATA[<p>Elasticsearch es un poderoso motor de búsqueda que proporciona resultados rápidos y relevantes calculando un puntaje para cada documento del índice. Este puntaje es un factor crucial para determinar el orden de los resultados de búsqueda. En este artículo, profundizaremos en el mecanismo de puntaje de Elasticsearch y exploraremos la API Explica, que ayuda a comprender el proceso de puntaje.</p><h2>Mecanismos de puntaje en Elasticsearch</h2><p>Elasticsearch emplea por defecto un modelo de puntaje llamado Practical Scoring Function (BM25). Este modelo se basa en la teoría probabilística de recuperación de información y tiene en cuenta factores como la frecuencia de términos, la frecuencia inversa de documentos y la normalización longitud-campo. Hablemos brevemente de estos factores:</p><ol><li><p><strong>Frecuencia de término (TF):</strong> Esto representa el número de veces que un término aparece en un documento. Una mayor frecuencia de término indica una relación más fuerte entre el término y el documento.</p></li><li><p><strong>Frecuencia inversa del documento (IDF):</strong> Este factor mide la importancia de un término en toda la colección documental. Un término que aparece en muchos documentos se considera menos importante, mientras que un término que aparece en menos documentos se considera más importante.</p></li><li><p><strong>Normalización de longitud de campo</strong>: Este factor tiene en cuenta la longitud del campo en el que aparece el término. Los campos más cortos tienen más peso, ya que el término se considera más significativo en un campo más corto.</p></li></ol><h2>Usando la API Explain</h2><p>La API Explain en Elasticsearch es una herramienta valiosa para entender el proceso de puntaje. Proporciona una explicación detallada de cómo se calculó el puntaje de un documento específico. Para usar la API Explic, necesitas enviar una solicitud GET al siguiente endpoint:</p>GET /&lt;index&gt;/_explain/&lt;document_id&gt;<p>En el cuerpo de la solicitud, debes proporcionar la consulta para la que quieres entender el puntaje. Aquí tienes un ejemplo:</p>{
  "query": {
    "match": {
      "title": "elasticsearch"
    }
  }
}<p>La respuesta de la API Explain incluirá un desglose detallado del proceso de puntaje, incluyendo los factores individuales (TF, IDF y la normalización de la longitud del campo) y sus contribuciones al puntaje final. Aquí tienes una respuesta de ejemplo:</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>En este ejemplo, la respuesta muestra que el puntaje de 1,2 es un producto del valor IDF (2,2) y el valor tfNorm (0,5). La explicación detallada ayuda a entender los factores que contribuyen al puntaje y puede ser útil para afinar la relevancia en la búsqueda.</p><h2>Conclusión</h2><p>El puntaje de elasticsearch es un aspecto fundamental para proporcionar resultados de búsqueda relevantes. Al comprender los mecanismos de puntaje y emplear la API Explice, puedes obtener información sobre los factores que afectan a los resultados de búsqueda y optimizar tus consultas para mejorar la relevancia y el rendimiento.</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[Conceptos básicos]]></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[Plantillas de índice en Elasticsearch: Cómo usar plantillas componibles]]></title>
    <description><![CDATA[Explora cómo crear plantillas de índice componibles y de componentes en Elasticsearch para garantizar mappings consistentes y automatizar la configuración de la indexación.]]></description>
    <content:encoded><![CDATA[<p>Un índice de Elasticsearch puede configurar mediante mapeo, ajustes y alias: </p><ul><li><p>Las definiciones de mapeo especifican el esquema de datos.</p></li><li><p>Los ajustes ajustan el tamaño del fragmento y las frecuencias de refresco. </p></li><li><p>Se emplean alias para dar nombres alternativos al índice.</p></li></ul><p>Cuando indexamos un documento por primera vez o creamos un índice vacío usando la API Create Index, el índice se creará con la configuración predeterminada, sin esquema de datos y sin alias. Estos valores por defecto funcionan bastante bien en entornos de desarrollo y pruebas, pero puede que necesitemos personalizar nuestros índices para entornos de producción.</p><p>Trabajar con los mapeos y ajustes predeterminados en producción puede resultar en un índice y un rendimiento de búsqueda deficientes. Instanciar índices manualmente es un proceso tedioso y que consume mucho tiempo. Recrear tales índices en cualquier entorno es especialmente poco práctico si disponemos de un esquema de mapeo elaborado, así como de configuraciones y alias personalizados.</p><p>Por suerte, Elasticsearch nos proporciona una herramienta para aplicar automáticamente una configuración predefinida al crear índices en forma de plantillas <em>de índices</em> <em>.</em></p><h2>Plantillas de índice</h2><p>Las plantillas de índice nos permiten crear índices con una configuración definida por el usuario. Un índice puede extraer la configuración de estas plantillas, por ejemplo un número determinado de fragmentos y réplicas o mapeos de campos, durante su instanciación. Se definirá una plantilla con un patrón de nombre y alguna configuración en él. Si el nombre del índice coincide con el patrón de nombres de la plantilla, el nuevo índice se creará con la configuración definida en la plantilla.</p><p>Elasticsearch mejoró su funcionalidad de plantillas en la versión 7.8 con plantillas componibles. Esta versión más reciente ofrece plantillas de índice mucho más reutilizables, como se demuestra en este artículo.</p><h3>Tipos de plantillas de indexación</h3><p>Las plantillas de índice pueden clasificar en dos categorías:</p><ul><li><p><strong>Plantillas de índice (o plantillas de índice composable):</strong> Las plantillas de índice componibles pueden existir por sí solas o estar compuestas por no tener o más plantillas componentes (ver la segunda categoría).</p></li><li><p><strong>Plantillas de componentes:</strong> La plantilla de componentes es una plantilla <em>reutilizable</em> por sí sola que define la configuración requerida. Normalmente se espera que la plantilla de componentes esté asociada a una plantilla de índice. Cada una de las plantillas de componentes puede anexar con una o varias plantillas de índice. </p></li></ul><p>Como puedes ver en la imagen de abajo, las plantillas índice A y B comparten entre sí las plantillas de componentes (en este caso solo una, la Plantilla 3). Una plantilla de índice puede consistir en ninguna o muchas plantillas de componentes y cada una de las plantillas de componentes puede asociar a ninguna o a muchas plantillas de índice. Ambos tipos de plantillas pueden existir por separado, sin embargo, las plantillas de componentes no sirven a menos que estén adjuntas a una plantilla de índice.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt7fca132e0eb86c50/6a17f5b7ec0f8982a65a678c/96c0aac29d3992e54a79be34e14cf909e0ca2ea9-1202x556.png" alt="Plantillas de índice en Elasticsearch y sus componentes." /><p>La idea general es desarrollar un catálogo de plantillas de componentes para que una organización las emplee para diversas necesidades (por ejemplo, especificar las distintas plantillas de componentes para entornos individuales) y anexarlas a varios índices mediante las plantillas de índices componibles.</p><h2>Cómo crear plantillas componibles (indexadas)</h2><p>Elasticsearch proporciona un punto final _index_template para gestionar plantillas de índice. El usuario proporciona todos los mapeos, ajustes y alias necesarios junto con un patrón de nombres de índice en esta plantilla. Vamos a repasar un ejemplo de cómo crear una plantilla para una aplicación de microservicios <em>client-order-service</em> que es responsable de la lógica de generación de pedidos. </p><p>Supongamos que nuestro requisito es crear una plantilla para pedidos de clientes, representada con un patrón que incluye comodines: *pedidos. Se espera que esta plantilla tenga ciertos mapeos y configuraciones, como el campo order_date, así como fragmentos y números de réplica.</p><p>Cualquier índice que se empareje con esta plantilla durante su creación hereda las configuraciones definidas en esta plantilla. Por ejemplo, un índice de black_friday_orders tendrá el campo order_date, los fragmentos se pondrán en 5 y las réplicas en 2. Además, <em>todos</em> los índices creados a partir de esta plantilla heredan también un único <a href="https://opster.com/guides/elasticsearch/glossary/elasticsearch-alias/">nombre de alias</a> . Creemos este orders_template con un patrón de índice definido como *orders y con un esquema de mapeo que consiste en un solo campo de oder_date con un formato de fecha predefinido dd-MM-yyyy. El código que aparece a continuación muestra cómo crear esta plantilla 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>Cuando ejecutas esta consulta en DevTools de Kibana, la plantilla se crea con el patrón índice *orders junto con el mapeo predefinido, los ajustes y un alias. El index_patterns es una variedad de patrones de coincidencia; cualquier índice que coincida con este patrón derivará la configuración de la plantilla. Puedes ejecutar lo siguiente para recuperar la plantilla persistente que debería reiterar lo que hicimos:</p>GET _index_template/orders_template <p>También hay una prioridad, un número positivo, definido al crear el atributo de plantilla definido en la plantilla: cada plantilla se define con una prioridad para que cualquier cambio conflictivo de diferentes plantillas se resuelva usando este valor con precedencia dada al valor de mayor prioridad. A continuación profundizaremos en la prioridad de las plantillas.</p><h2>Crear un índice con la plantilla</h2><p>Ahora que tenemos una plantilla – un plano para crear índices – el siguiente paso es crear un índice. Cuando el nombre del índice coincide con el patrón dado, las configuraciones con plantilla se aplican automáticamente. Para demostrar el punto, como muestra el código de abajo, creemos un índice completamente nuevo llamado: blackfriday_orders:</p>PUT blackfriday_orders<p>Como el nombre del índice (blackfriday_orders) coincide con el patrón de nombres definido en la plantilla (es decir, *órdenes), el índice debería obtener todas las configuraciones derivadas de la plantilla. Recuperemos este índice recién creado y compruebemos si esto es realmente cierto ejecutando el siguiente código:</p>GET blackfriday_orders<p>Esto debería volver:</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>Como indica la respuesta, la configuración del blackfriday_orders fue heredada de la plantilla. Podemos probar con varias combinaciones de los índices que hereden con éxito la configuración plantillada:</p>PUT blackfriday_orders
PUT americaorders
PUT cancelled--orders
PUT undefined101orders<p>Sin embargo, los siguientes índices no heredarán la configuración ya que el nombre no coincidirá con el patrón:</p>PUT blackfriday_orders2
PUT open_orders_
PUT allorders_total<p>Algo importante a recordar es que todos los índices derivados de una plantilla tienen el mismo alias – all_orders – en este caso. Existe un beneficio en tener este alias: podemos consultar simplemente con este único alias en lugar de en múltiples í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>Aunque creamos una plantilla para *pedidos, se espera que cualquier índice coincidente adopte la configuración de la plantilla. Normalmente, consciente o inconscientemente, los equipos pueden crear algunas plantillas más por diversas razones. Esto significa que a veces el nombre del índice puede coincidir con dos patrones de plantilla diferentes. Elasticsearch tiene que decidir cuál de las configuraciones de esas plantillas debe aplicar. Afortunadamente, este dilema puede resolver usando la prioridad de la plantilla.</p><h2>Cómo crear plantillas de componentes</h2><p>Aprendimos sobre las plantillas de índice en la parte anterior de este artículo. Hay un par de desventajas al crear las plantillas con la configuración incorporada; una de ellas es que la configuración no es exportable para otras plantillas. Si queremos tener una configuración similar, por ejemplo para plantillas relacionadas con clientes (*clientes), puede que tengamos que recrear toda la plantilla. Eso significa que podemos estar creando docenas de ellos en una organización típica (además puede que tengas algunos más según los entornos).</p><p>Como siempre esperamos la reutilización, Elasticsearch rediseñó las plantillas teniendo en cuenta la reutilización. Las plantillas de componentes cumplen con ese requisito. Si vienes de un entorno DevOps, lo más probable es que tengas que crear índices con una configuración preestablecida para cada uno de los entornos. En lugar de aplicar manualmente cada una de estas configuraciones, puedes crear una plantilla de componentes para cada uno de los entornos.</p><p>Una plantilla de componentes no es más que un bloque reutilizable de configuraciones que podemos usar para crear más plantillas de índice. Ten en cuenta que las plantillas de componentes no tienen valor a menos que estén agrupadas con plantillas de índice. Se exponen a través de un punto final _component_template. Veamos cómo encaja todo esto.</p><h3>Configuraciones en una plantilla de índice</h3><p>Vamos a extraer los ajustes que definimos en nuestra plantilla de índice antes y crear una plantilla de componente a partir de ella. Se espera que el settings_component_template tenga cinco fragmentos principales con dos réplicas por fragmento principal. El primer paso, como muestra la lista de código a continuación, es declarar y ejecutar una plantilla de componente con esta configuración.</p>PUT _component_template/settings_component_template
{
  "template":{
    "settings":{
      "number_of_shards":5,
      "number_of_replicas":2
    }
  }
}<p>Como muestra el código anterior, usamos el punto final _component_template para crear una plantilla de componentes. El cuerpo de la solicitud contiene la información de la plantilla en un objeto plantilla. El settings_component_template ya está disponible para su uso en otras partes de las plantillas del índice. Una diferencia notable es que esta plantilla no define ningún patrón de índice; Simplemente es un bloque de código que configura algunas propiedades para nosotros.</p><h3>Plantilla de mapeo</h3><p>De la misma manera, creemos otra plantilla. Esta vez, extraigamos el esquema de mapeo que definimos antes en las plantillas de índice independientes. El código siguiente muestra el guion:</p>PUT _component_template/mappings_component_template
{
  "template": {
    "mappings": {
      "properties": {
        "order_date": {
          "type": "date",
          "format":"dd-MM-yyyy"
        }
      }
    }
  }
}<h3>Plantilla de alias</h3><p>Siguiendo el mismo flujo, también podemos tener una plantilla de componentes con los alias – dos alias (all_orders y sales_orders):</p>PUT _component_template/aliases_component_template
{
  "template": {
    "aliases": {
      "all_orders": {},
      "sales_orders":{}
    }
  }
}<h3>Plantilla de índice componible</h3><p>Ahora que tenemos estas tres plantillas de componentes, el siguiente paso es ponerlas en práctica. Podemos hacerlo dejando que una plantilla de índice para, por ejemplo, christmas_orders, la emplee:</p>PUT _index_template/composed_orders_template
{
  "index_patterns": [
    "*orders"
  ],
  "priority": 500,
  "composed_of": [
    "settings_component_template",
    "mappings_component_template",
    "aliases_component_template"
  ]
}<p>La etiqueta composed_of es una colección de todas las plantillas de componentes que conforman esta plantilla. En este caso, elegimos las plantillas de componentes de configuración, mapeo y alias. También estamos subiendo la prioridad, así que esta plantilla supera a cualquier otra. Una vez que la plantilla está lista, cualquier índice que coincida con el patrón *orders heredará la configuración de estas tres plantillas componentes.</p><p>Dicho esto, si deseamos crear una nueva plantilla, por ejemplo clientes, con solo una de las plantillas existentes (settings_component_template) y una nueva (aliases_component_template – ver más abajo), podemos hacerlo con:</p>PUT _component_template/aliases_component_template2
{
  "template": {
    "aliases": {
      "all_customers": {}
    }
  }
}<p>La plantilla del índice es la siguiente:</p>PUT _index_template/composed_customers_template
{
  "index_patterns": [
    "*customers*"
  ],
  "priority": 200,
  "composed_of": [
    "settings_component_template",
    "aliases_component_template2"
  ]
}<p>¿Viste que el settings_component_template se ha (re)empleado en dos plantillas diferentes? Ese es el poder de las plantillas de componentes.</p><h2>Prioridad de la plantilla de indexación</h2><p>Existe la posibilidad de que los desarrolladores creen múltiples plantillas de índice sin mirar el stock existente. Es importante establecer una prioridad en cada una de estas plantillas para que se emplee la de mayor prioridad. Por ejemplo, el my_orders_template_1 anula la my_orders_template_2 en el siguiente fragmento 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>Cuando tienes varias plantillas que coinciden con los índices que se están creando, Elasticsearch aplica todas las configuraciones de todas las plantillas coincidentes pero anula cualquier cosa que tenga mayor prioridad.</p><h2>Precedencia de plantillas</h2><p>Por último, puede que te preguntes por la precedencia de las plantillas: ¿la configuración definida en la plantilla de componentes anula la que aparece en la plantilla principal del índice? ¿O al revés? Bueno, hay algunas reglas:</p><ul><li><p>Un índice creado con configuraciones tiene prioridad explícita sobre todo; esto significa que si creas un índice con configuración explícita, no esperes que las plantillas las sobreescriban.</p></li><li><p>Las plantillas heredadas (plantillas creadas antes de la versión 7.8) tienen una prioridad inferior a las plantillas componibles.</p></li></ul><h2>Resumen</h2><ul><li><p>Un índice contiene mapeos, configuraciones y alias: los mapeos definen el esquema de campos, los ajustes establecen los parámetros del índice como el número de fragmentos y réplicas, y los alias dan nombres alternativos al índice.</p></li><li><p>Las plantillas nos permiten crear índices con configuraciones predefinidas. Nombrar un índice con un nombre que coincida con el patrón de índice definido en una plantilla específica configurará automáticamente ese índice según la plantilla.</p></li><li><p>Elasticsearch introdujo plantillas de índice componibles en la versión 7.8. Las plantillas de índice componibles permiten modularidad y versionado de las plantillas.</p></li><li><p>Las plantillas componibles consisten en no tener o más plantillas de componentes.</p></li><li><p>Una plantilla de índice también puede tener su propia configuración definida.</p></li><li><p>Una plantilla de componente es una plantilla reutilizable con configuración predefinida, igual que una plantilla de índice componible.</p></li><li><p>Sin embargo, se espera que las plantillas de componentes formen parte de una plantilla de índice; No sirven de nada si no están "compuestas" en una plantilla de índice.</p></li><li><p>Las plantillas de componentes no tienen un patrón de índice definido, lo que es otra razón por la que se "espera" que formen parte de una plantilla de índice.</p></li><li><p>Cada una de las plantillas tiene una prioridad: un número positivo. Cuanto mayor sea el número, mayor es la precedencia para que se aplique esa plantilla.</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[Datos de índice]]></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[Búsqueda de elasticsearch mediante dos campos]]></title>
    <description><![CDATA[Explora técnicas para buscar por dos campos, incluidas consultas multi-coincidencia, consultas booleanas y aumento de campos en tiempo de consulta.]]></description>
    <content:encoded><![CDATA[<p>Buscar en varios campos en Elasticsearch es un requisito común en muchas aplicaciones. En este artículo, exploraremos técnicas avanzadas para realizar búsquedas por dos campos, incluyendo consultas multi-coincidencia, consultas bool y aumento de campos en tiempo de consulta. Estas técnicas te ayudarán a crear resultados de búsqueda más precisos y relevantes para tus usuarios.</p><h2>Técnicas avanzadas para realizar búsquedas en dos campos</h2><h3>1. Consulta multi-coincidencia</h3><p>Una consulta multi-coincidencia te permite buscar una sola cadena de consulta en varios campos. Esto es útil cuando quieres encontrar documentos que contengan la cadena de consulta dada en cualquiera de los dos campos. Aquí tienes un ejemplo de consulta multi-coincidencia que busca el término "ejemplo" en los campos "título" o "descripción":</p>{
  "query": {
    "multi_match": {
      "query": "example",
      "fields": ["title", "description"]
    }
  }
}<h3>2. Consulta de bool</h3><p>Una consulta bool permite combinar varias consultas usando lógica booleana. Puedes usar la cláusula "debería" para buscar documentos que coincidan con la consulta en cualquiera de los dos campos. Aquí tienes un ejemplo de consulta bool que busca el término "ejemplo" en los campos "título" y "descripción":</p>{
  "query": {
    "bool": {
      "should": [
        {"match": {"title": "example"}},
        {"match": {"description": "example"}}
      ]
    }
  }
}<h3>3. Aumento de campos en tiempo de consulta</h3><p>A veces, puede que quieras dar más importancia a un campo que a otro durante la búsqueda. Puedes conseguirlo aplicando un factor de mejora al campo en el momento de la consulta. Un valor de aumento más alto da más peso al campo, haciendo que sea más probable que influya en el puntaje final de búsqueda. Aquí tienes un ejemplo de consulta multi-coincidencia con un factor de impulso aplicado al campo "título":</p>{
  "query": {
    "multi_match": {
      "query": "example",
      "fields": ["title^3", "description"]
    }
  }
}<p>En este ejemplo, el campo "título" tiene un factor de mejora de 3, lo que lo hace tres veces más importante que el campo "descripción" para determinar el puntaje de búsqueda.</p><h3>4. Combinar consultas con diferentes factores de impulso</h3><p>También puedes combinar varias consultas con diferentes factores de boost usando una consulta bool. Esto te permite afinar la importancia de cada campo en los resultados de búsqueda. Aquí tienes un ejemplo de consulta bool con diferentes factores de boost aplicados a los campos "título" y "descripción":</p>{
  "query": {
    "bool": {
      "should": [
        {"match": {"title": {"query": "example", "boost": 3}}},
        {"match": {"description": {"query": "example", "boost": 1}}}
      ]
    }
  }
}<p>En este ejemplo, el campo "título" tiene un factor de mejora de 3, mientras que el campo de "descripción" tiene un factor de aumento de 1.</p><h2>Conclusión</h2><p>La búsqueda mediante dos campos en Elasticsearch se puede lograr mediante técnicas avanzadas como consultas multi-coincidencia, consultas bool y aumento de campos en tiempo de consulta. Combinando estas técnicas, puedes crear resultados de búsqueda más precisos y relevantes para tus usuarios. Experimenta con diferentes combinaciones de consultas y factores de mejora para encontrar la configuración óptima de búsqueda para tu 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[Conceptos básicos]]></category>
    <category><![CDATA[Búsqueda en DSL]]></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[Uso del tamaño del montón de Elasticsearch y recogida de basura de la JVM]]></title>
    <description><![CDATA[Explorando el uso del tamaño del heap en Elasticsearch y la recogida de basura de la JVM, incluyendo las mejores prácticas y cómo resolver problemas cuando el uso de memoria del heap es demasiado alto o cuando el rendimiento de la JVM no es óptimo.]]></description>
    <content:encoded><![CDATA[<p>El tamaño del heap es la cantidad de RAM asignada a la Máquina Virtual Java de un nodo Elasticsearch.</p><p>A partir de la versión 7.11, Elasticsearch por defecto establece automáticamente el tamaño del montón de la JVM en función de los roles y la memoria total de un nodo. Se recomienda usar el tamaño por defecto para la mayoría de entornos de producción. Sin embargo, si quieres configurar manualmente el tamaño del montón de tu JVM, como regla general deberías poner -Xms y -Xmx al MISMO valor, que debería ser el 50% de tu RAM disponible total, sujeto a un máximo (aproximadamente) 31GB.</p><p>Un tamaño de heap mayor le dará a tu nodo más memoria para las operaciones de indexación y búsqueda. Sin embargo, tu nodo también requiere memoria para la caché, así que usar el 50% mantiene un equilibrio saludable entre ambos. Por esta misma razón, en producción deberías evitar usar otros procesos que consumen mucho memoria en el mismo nodo que Elasticsearch.</p><p>Normalmente, el uso del montón sigue un patrón de dientes de sierra, oscilando entre alrededor del 30 y el 70% del montón máximo empleado. Esto se debe a que la JVM aumenta de forma constante el porcentaje de uso del montón hasta que el proceso de recogida de basura libera memoria de nuevo. El alto uso del montón ocurre cuando el proceso de recogida de basura no puede seguir el ritmo. Un indicador de un alto uso del montón es cuando la recolección de basura no es capaz de reducir el uso del montón a alrededor del 30%.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt03908d8eea824755/6a17dbe63e03d71e314f2b3e/0a17a67cc589a3c1fbf9e918eadc119df7bd7619-858x278.png" alt="" /><p>En la imagen de arriba, puedes ver un diente de sierra normal del montón de JVM.</p><p>También verás que hay dos tipos de recogida de basura: GC joven y vieja.</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>En una JVM saludable, la recogida de basura debería cumplir idealmente las siguientes condiciones:</p><ul><li><p>El GC joven se procesa rápidamente (en menos de 50 ms).</p></li><li><p>La GC joven no se ejecuta con frecuencia (unos 10 segundos).</p></li><li><p>El GC antiguo se procesa rápidamente (en menos de 1 segundo).</p></li><li><p>El GC antiguo no se ejecuta con frecuencia (una vez cada 10 minutos o más).</p></li></ul><h3><strong>Cómo resolver cuando el uso de memoria del heap es demasiado alto o cuando el rendimiento de la JVM no es óptimo</strong></h3><p>Puede haber varias razones por las que el uso de memoria heap puede aumentar:</p><h4><strong>Fragmentación de fragmentos</strong></h4><p>Por favor, consulta el documento sobre <a href="https://www.elastic.co/docs/deploy-manage/production-guidance/optimize-performance/size-shards#sizing-shard-guidelines">sobrefragmentación aquí</a>.</p><h4><strong>Grandes tamaños de agregación</strong></h4><p>Para evitar grandes tamaños de agregación, mantén al mínimo el número de cubos de agregación (tamaño) en tus consultas.</p>GET /_search
{
   "aggs" : {
       "products" : {
           "terms" : {
               "field" : "product",
               "size" : 5
                          }
       }
   }
}<p>Puedes usar el registro lento de consultas (registros lentos) e implementarlo en un índice específico usando lo siguiente.</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>Las consultas que tardan mucho en devolver los resultados suelen ser las que requieren muchos recursos.</p><h4><strong>Tamaño excesivo del índice de volumen</strong></h4><p>Si envías peticiones grandes, esto puede ser una causa de un alto consumo de heaps. Prueba a reducir el tamaño de las solicitudes de índice masivo.</p><h4><strong>Problemas de cartografía</strong></h4><p>En individuo, si usas "fielddata: true", entonces puede ser un usuario importante de tu montón JVM.</p><h4><strong>Tamaño del montón incorrectamente configurado</strong></h4><p>El tamaño del heap puede definir manualmente por:</p><p>Establecer la variable de entorno:</p>ES_JAVA_OPTS="-Xms2g -Xmx2g"<p>Editar el archivo jvm.options en tu directorio de configuración de Elasticsearch:</p>-Xms2g
-Xmx2g<p>La configuración de la variable ambiental tiene prioridad sobre la configuración de archivo.</p><p>Es necesario resetear el nodo para tener en cuenta la configuración.</p><h4><strong>Nuevo ratio de JVM configurado incorrectamente</strong></h4><p>Generalmente NO es necesario establecer esto, ya que Elasticsearch establece este valor por defecto. Este parámetro define la proporción de espacio disponible para objetos de "nueva generación" y "generación antigua" en la JVM.</p><p>Si ves que el antiguo GC se está volviendo muy frecuente, puedes probar a establecer específicamente este valor en el archivo jvm.options de tu directorio de configuración de Elasticsearch.</p>-XX:NewRatio=3<h3><strong>¿Cuáles son las mejores prácticas para gestionar el uso del tamaño del heap y la recogida de basura de la JVM en un gran clúster de Elasticsearch?</strong></h3><p>Las mejores prácticas para gestionar el uso del tamaño del heap y la recolección de basura de la JVM en un gran clúster de Elasticsearch son cerciorar que el tamaño del heap esté fijado en un máximo del 50% de la RAM disponible, y que la configuración de recogida de basura de la JVM esté optimizada para el caso de uso específico. Es importante monitorizar el tamaño del montón y las métricas de recogida de basura para cerciorar de que el clúster funciona de forma óptima. En concreto, es importante monitorizar el tamaño del montón de la JVM, el tiempo de recogida de basura y las pausas en la recogida. Además, es importante controlar el número de ciclos de recogida de basura y el tiempo dedicado a la recogida. Al monitorizar estas métricas, es posible identificar posibles problemas con el tamaño del montón o la configuración de recogida de basura y tomar medidas correctivas si es necesario.</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[Conceptos básicos]]></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[Cómo aumentar el conteo de fragmentos primarios en Elasticsearch]]></title>
    <description><![CDATA[Aprende cómo aumentar la cantidad de shards primarios en Elasticsearch usando las API split y reindex para un escalado óptimo de shards.]]></description>
    <content:encoded><![CDATA[<p>No es posible aumentar el número de fragmentos primarios de un índice existente, lo que significa que hay que recrear un índice si quieres aumentar el número de fragmentos primarios. En estas situaciones se emplean generalmente dos métodos: la API _reindex y la API _split.</p><p>La API _split suele ser un método más rápido que la API _reindex. <strong>La indexación</strong> <strong>debe detener</strong> antes de ambas operaciones, de lo contrario, el source_index y el target_index el recuentos de documentos variarán.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt46dd6abe0e6fe1eb/6a17e368148009d6a7b486d3/aa0ae010c2f5691ca00440fb453ed6b47bacd24f-1200x628.png" alt="Mayor cantidad de shards en Elasticsearch al recrear un índice" /><h2>Método 1 – usando la API dividida</h2><p>La API dividida se emplea para crear un nuevo índice con el número deseado de fragmentos primarios copiando los ajustes y mapeando un índice existente. El número deseado de fragmentos primarios puede establecer durante la creación. Se deben comprobar las siguientes configuraciones antes de implementar la API de división:</p><ol><li><p>El índice de origen debe ser de solo lectura. Esto significa que el proceso de indexación debe detener.</p></li><li><p>El número de fragmentos primarios en el índice objetivo debe ser un múltiplo del número de fragmentos primarios en el índice fuente. Por ejemplo, si el índice fuente tiene 5 fragmentos primarios, los fragmentos primarios del índice objetivo pueden establecer en 10, 15, 20, y así sucesivamente.</p></li></ol><p>Nota: Si solo es necesario cambiar el número principal del fragmento, se prefiere la API dividida porque es mucho más rápida que la API de Reindex.</p><h3>Implementación de la API de división</h3><p>Crea un índice de prueba:</p>POST test_split_source/_doc
{
  "test": "test"
}<p>El índice fuente debe ser de solo lectura para poder dividir:</p>PUT test_split_source/_settings
{
  "index.blocks.write": true
}<p>Los ajustes y mapeos se copiarán automáticamente desde el índice fuente:</p>POST /test_split_source/_split/test_split_target
{
  "settings": {
    "index.number_of_shards": 3
  }
}<p>Puedes consultar el progreso con:</p>GET _cat/recovery/test_split_target?v&amp;h=index,shard,time,stage,files_percent,files_total<p>Como los ajustes y mapeos se copian de los índices fuente, el índice destino es de solo lectura. Activemos la operación de escritura para el índice objetivo:</p>PUT test_split_target/_settings
{
    "index.blocks.write": null
}<p>Consulta el índice de origen y destino docs.count antes de eliminar el índice original:</p>GET _cat/indices/test_split*?v&amp;h=index,pri,rep,docs.count<p>El nombre del índice y el nombre del alias no pueden ser iguales. Necesitas eliminar el índice fuente y agregar el nombre del índice fuente como alias al índice objetivo:</p>DELETE test_split_source
PUT /test_split_target/_alias/test_split_source<p>Luego de agregar el <strong>alias test_split_source</strong> al <strong>índice de test_split_target</strong> , deberías probarlo con:</p>GET test_split_source
POST test_split_source/_doc
{
  "test": "test"
}<h2>Método 2 – usando la API de reindex</h2><p>Al crear un nuevo índice con la API Reindex, se puede obtener cualquier número de conteos de fragmentos primarios. Tras crear un nuevo índice con el número previsto de fragmentos primarios, todos los datos del índice fuente pueden reindexar a este nuevo índice.</p><p>Además de las funciones de API dividida, los datos pueden manipular usando el ingest_pipeline en el AP de reindexación. Con la tubería de ingest, solo los campos especificados que encajen con el filtro se indexarán en el índice objetivo usando la consulta. El contenido de los datos puede modificar usando un script sencillo, y varios índices pueden fusionar en un solo índice.</p><h3>Implementación de la API de reindex</h3><p>Crea un reindexado de prueba:</p>POST test_reindex_source/_doc
{
    "test": "test"
}<p>Copia la configuración y los mapeos del índice fuente:</p>GET test_reindex_source<p>Crea un índice objetivo con ajustes, mapeos y el número de fragmentos deseado:</p>PUT test_reindex_target
{
  "mappings" : {},
  "settings": {
    "number_of_shards": 10,
    "number_of_replicas": 0,
    "refresh_interval": -1
  }
}<p>*Nota: ajustar number_of_replicas: 0 y refresh_interval: -1 aumentará la velocidad de reindexación.</p><p>Inicia el proceso de reindexación. Configurar requests_per_second=-1 y slices=auto ajustará la velocidad de reindexación.</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>Verás el task_id cuando ejecutes la API de reindex. Cópila y comprueba con _tasks API:</p>GET _tasks/&lt;task_id&gt;<p>Actualiza la configuración después de que termine el reindexado:</p>PUT test_reindex_target/_settings
{
  "number_of_replicas": 1,
  "refresh_interval": "1s"
}<p>Consulta el índice fuente y destino docs.count antes de borrar el índice original, debería ser el mismo:</p>GET _cat/indices/test_reindex_*?v&amp;h=index,pri,rep,docs.count<p>El nombre del índice y el nombre del alias no pueden ser iguales. Elimina el índice fuente y agrega el nombre del índice fuente como alias al índice objetivo:</p>DELETE test_reindex_source
PUT /test_reindex_target/_alias/test_reindex_source<p>Luego de agregar el alias test_split_source al índice de test_split_target, pruébalo usando:</p>GET test_reindex_source<h2>Resumen</h2><p>Si quieres aumentar el recuento de fragmentos primarios de un índice existente, necesitas recrear los ajustes y asignaciones a un nuevo índice. Hay 2 métodos principales para hacerlo: la API de reindex y la API de split. La indexación activa debe detener antes de usar cualquiera de los 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[Conceptos básicos]]></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[Cómo migrar datos entre diferentes versiones de Elasticsearch y entre clusters]]></title>
    <description><![CDATA[Exploración de métodos para transferir datos entre versiones y clústeres de Elasticsearch.]]></description>
    <content:encoded><![CDATA[<p>Cuando deseas actualizar un clúster de Elasticsearch, a veces es más fácil crear un clúster nuevo e independiente y transferir datos del clúster anterior al nuevo. Esto brinda a los usuarios el beneficio de poder probar todos sus datos y configuraciones en el nuevo clúster con todas sus aplicaciones sin ningún riesgo de tiempo de inactividad o pérdida de datos.</p><p>Las desventajas de ese enfoque son que requiere cierta duplicación de hardware y podría crear dificultades al intentar transferir y sincronizar sin problemas todos los datos.</p><p>También puede ser necesario realizar un procedimiento similar si necesita migrar aplicaciones de un centro de datos a otro.</p><p>En este artículo, analizaremos y detallaremos tres formas de transferir datos entre clústeres de Elasticsearch.</p><p><strong>¿Cómo migrar datos entre clusters de Elasticsearch?</strong></p><p>Hay 3 formas de transferir datos entre clústeres de Elasticsearch:</p><ol><li><p><a href="https://www.elastic.co/es/search-labs/blog/elasticsearch-migrate-data-versions-clusters#1.-reindexing-data-from-a-remote-cluster">Reindexación desde un clúster remoto</a></p></li><li><p><a href="https://www.elastic.co/es/search-labs/blog/elasticsearch-migrate-data-versions-clusters#2.-transferring-data-using-snapshots">Transferencia de datos mediante instantáneas</a></p></li><li><p><a href="https://www.elastic.co/es/search-labs/blog/elasticsearch-migrate-data-versions-clusters#3.-transferring-data-using-logstash">Transferencia de datos mediante Logstash</a></p></li></ol><p>El uso de instantáneas suele ser la forma más rápida y confiable de transferir datos. Sin embargo, tenga en cuenta que solo puede restaurar una instantánea en un clúster de una versión igual o superior y nunca con una diferencia de más de una versión principal. Esto significa que puede restaurar una instantánea 6.x en un clúster 7.x, pero no en un clúster 8.x.</p><p>Si necesita aumentar en más de una versión principal, deberá volver a indexar o usar Logstash.</p><p>Ahora, veamos en detalle cada una de las tres opciones para transferir datos entre clústeres de Elasticsearch.</p><h2>1. Reindexación de datos de un clúster remoto</h2><p>Antes de comenzar a volver a indexar, recuerde que deberá configurar asignaciones adecuadas para todos los índices del nuevo clúster. Para ello, debe crear los índices directamente con las asignaciones adecuadas o emplear plantillas de índice.</p><h3>Reindexación desde remoto: se requiere configuración</h3><p>Para poder reindexar desde remoto, debe agregar la siguiente configuración al archivo elasticseearch.yml para el clúster que recibe los datos, que, en los sistemas Linux, generalmente se encuentra aquí: /etc/elasticsearch/elasticsearch.yml. La configuración a agregar es la siguiente:</p>reindex.remote.whitelist: "192.168.1.11:9200"<p>Si emplea SSL, debe agregar el certificado de CA a cada nodo e incluir lo siguiente en el comando para cada nodo de elasticsearch.yml:</p>reindex.ssl.certificate_authorities: “/path/to/ca.pem”<p>Alternativamente, puede agregar la siguiente línea a todos los nodos de Elasticsearch para deshabilitar la verificación SSL. Sin embargo, ese enfoque es menos recomendable ya que no es tan seguro como la opción anterior:</p>reindex.remote.whitelist: "192.168.1.11:9200"
reindex.ssl.verification_mode: none
systemctl restart elasticsearch service <p>Deberá realizar estas modificaciones en cada nodo y realizar un resetear continuo. Para obtener más información sobre cómo hacerlo, consulte <a href="https://www.elastic.co/es/guide/en/elasticsearch/reference/8.17/restart-cluster.html#restart-cluster-rolling">nuestra guía</a>.</p><h3>Comando de reindexación</h3><p>Luego de definir el host remoto en el archivo elasticsearch.yml y agregar los certificados SSL si es necesario, puede comenzar a reindexar datos con el siguiente comando:</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>Al hacerlo, es posible que se enfrente a errores de tiempo de espera, por lo que puede ser útil establecer valores generosos para los tiempos de espera en lugar de depender de los valores predeterminados.</p><p>Ahora, echemos un vistazo a algunos otros errores comunes que puede encontrar al reindexar desde el control remoto.</p><h3>Errores comunes al reindexar desde el control remoto</h3><h4>1. Reindexación no incluida en la lista blanca</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>Si encuentra este error, muestra que no definió la dirección IP del host remoto o el nombre DNS del nodo en Elasticsearch como se describió anteriormente u olvidó resetear los servicios de Elasticsearch.</p><p>Para solucionar eso para el clúster de Elasticsearch, debe agregar el host remoto a todos los nodos de Elasticsearch y resetear los servicios de Elasticsearch.</p><h4>2. Excepción de protocolo de enlace 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 error significa que olvidó agregar el reindex.ssl.certificate_authorities a elasticsearch.yml como se describió anteriormente. Para agregarlo:</p>#elasticsearch.yml
reindex.ssl.certificate_authorities: "/path/to/ca.pem"<h2>2. Transferencia de datos mediante instantáneas</h2><p>Recuerde, como se mencionó anteriormente, solo puede restaurar una instantánea en un clúster de una versión igual o superior y nunca con una diferencia de más de una versión principal</p><p>Si necesita aumentar en más de una versión principal, deberá volver a indexar o usar Logstash.</p><p>Se requieren los siguientes pasos para transferir datos a través de instantáneas:</p><p>Paso 1. Agregar el complemento del repositorio al primer clúster de Elasticsearch: para transferir datos entre clústeres a través de instantáneas, debe cerciorar de que se pueda acceder al repositorio tanto desde los clústeres nuevos como desde los antiguos. Los repositorios de espacio en la nube como AWS, Google y Azure son generalmente ideales para esto. Para tomar instantáneas, consulte <a href="https://www.elastic.co/es/guide/en/elasticsearch/reference/current/snapshot-restore.html">nuestra guía</a> y siga los pasos que describe.</p><p>Paso 2. Resetear el servicio Elasticsearch (resetear continuo).</p><p>Paso 3. Crea un repositorio para el primer cluster de Elasticsearch.</p><p>Paso 4- Agrega el plugin del repositorio al segundo clúster de Elasticsearch.</p><p>Paso 5: Agregar repositorio como de solo lectura al segundo clúster de Elasticsearch: deberá agregar un repositorio repitiendo los mismos pasos que realizó para crear el primer clúster de Elasticsearch.</p><p>Nota importante: Al conectar el segundo clúster de Elasticsearch al mismo repositorio de AWS S3, debe definir el repositorio como un repositorio de solo lectura:</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>Esto es importante porque desea evitar el riesgo de mezclar versiones de Elasticsearch dentro del mismo repositorio de instantáneas.</p><p>Paso 6- Restauración de datos en el segundo clúster de Elasticsearch: luego de seguir los pasos anteriores, puede restaurar los datos y transferirlos al nuevo clúster. Siga los pasos descritos en <a href="https://www.elastic.co/es/guide/en/elasticsearch/reference/current/snapshot-restore.html">este artículo</a> para restaurar los datos en el nuevo clúster. </p><h2>3. Transferencia de datos mediante Logstash</h2><p>Antes de comenzar a transferir los datos con logstash, recuerde que deberá configurar las asignaciones adecuadas para todos los índices del nuevo clúster. Para ello, deberá crear los índices directamente o emplear plantillas de índice.</p><p>Para transferir datos entre dos clústeres de Elasticsearch, puedes configurar un servidor temporal de Logstash y usarlo para transferir tus datos entre dos clústeres. Para clústeres pequeños, una instancia de RAM de 2 GB debería ser suficiente. Para clústeres más grandes, puede usar CPU de cuatro núcleos con 8 GB de RAM.</p><p>Para obtener orientación sobre la instalación de Logstash, <a href="https://www.elastic.co/es/guide/en/logstash/current/installing-logstash.html">consulte aquí</a>.</p><h3>Configuración de Logstash para transferir datos de un clúster a otro</h3><p>Una configuración básica para copiar un solo índice del clúster A al clúster B es:</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 elasticsearch seguro, puede usar la siguiente configuración:</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>Metadatos de índice</h3><p>Los comandos anteriores escribirán en un único índice con nombre. Si desea transferir varios índices y conservar los nombres de índice, deberá agregar la siguiente línea a la salida de Logstash:</p>index =&gt; "%{[@metadata][_index]}"<p>Además, si desea conservar la identificación original del documento, deberá agregar:</p>document_id =&gt; "%{[@metadata][_id]}"<p>Tenga en cuenta que configurar el ID del documento hará que la transferencia de datos sea significativamente más lenta, así que solo conserve el ID original si es necesario.</p><h2>Sincronización de actualizaciones</h2><p>Todos los métodos descritos anteriormente tardarán un periodo de tiempo relativamente largo y es posible que los datos del clúster original se actualizaron mientras espera que se complete el proceso.</p><p>Existen varias estrategias para habilitar la sincronización de cualquier actualización que pueda ocurrir durante el proceso de transferencia de datos, y debe pensar en estos problemas antes de iniciar ese proceso. En individuo, debe pensar en:</p><ul><li><p>¿Qué método tiene para identificar cualquier dato que se actualizó/agregado desde el inicio del proceso de transferencia de datos (por ejemplo, un campo "last_update_time" en los datos)?</p></li><li><p>¿Qué método puede emplear para transferir el último dato?</p></li><li><p>¿Existe el riesgo de que se dupliquen los registros? Por lo general, lo hay, a menos que el método que está empleando establezca el ID del documento durante la reindexación en un valor conocido).</p></li></ul><p>A continuación se describen los diferentes métodos para habilitar la sincronización de actualizaciones.</p><h3>1. Uso de sistemas de colas</h3><p>Algunos sistemas de ingesta/actualización emplean colas que permiten "reproducir" las modificaciones de datos recibidas en los últimos x días. Eso puede proporcionar un medio para sincronizar cualquier cambio realizado. </p><h3>2. Reindexar desde remoto</h3><p>Repita el proceso de reindexación para todos los elementos en los que "last_update_time" &gt; hace x días. Para ello, agregue un parámetro "query" a la solicitud de reindexación.</p><h3>3. Logstash</h3><p>En la entrada de Logstash, puede agregar una consulta para filtrar todos los elementos donde "last_update_time" &gt; hace x días. Sin embargo, este proceso provocará duplicados en los datos que no sean de seriales temporales a menos que estableció el document_id.</p><h3>4. Instantáneas</h3><p>No es posible restaurar solo una parte de un índice, por lo que tendría que usar uno de los otros métodos de transferencia de datos descritos anteriormente (o un script) para actualizar los cambios que se produjeron desde que se llevó a cabo el proceso de transferencia de datos.</p><p>Sin embargo, la restauración de instantáneas es un proceso mucho más rápido que la reindexación/Logstash, por lo que puede ser posible suspender las actualizaciones durante un breve periodo de tiempo mientras se transfieren las instantáneas para evitar el problema por completo.</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[Conceptos básicos]]></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>