<?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/fr/search-labs/author/kofi-bartlett</link>
    </image>
    <link>https://www.elastic.co/fr/search-labs/author/kofi-bartlett</link>
    <atom:link href="https://www.elastic.co/fr/search-labs/rss/author/kofi-bartlett.xml" rel="self" type="application/rss+xml"/>
    <language><![CDATA[fr]]></language>
    <lastBuildDate>Mon, 28 Sep 2026 02:31:15 GMT</lastBuildDate>
  <item>
    <title><![CDATA[Affichage des champs dans un index Elasticsearch]]></title>
    <description><![CDATA[Exploration des techniques d'affichage des champs dans un index Elasticsearch.
]]></description>
    <content:encoded><![CDATA[<p>Dans cet article, nous verrons comment afficher des champs dans un index Elasticsearch. Cela peut être utile pour comprendre la structure de vos données, identifier des champs spécifiques et résoudre des problèmes. Nous aborderons les sujets suivants :</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">Utilisation de l'</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><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 pour récupérer des informations sur les champs</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">Utilisation de l'</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><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 pour afficher les valeurs des champs</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">Filtrage des champs à l'aide du </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><a href="https://www.elastic.co/search-labs/blog/displaying-fields-in-an-elasticsearch-index#3.-filtering-fields-using-the-fields-parameter"> paramètre</a></p></li><li><p><a href="https://www.elastic.co/search-labs/blog/displaying-fields-in-an-elasticsearch-index#4.-displaying-nested-fields">Affichage des champs imbriqués</a></p></li></ol><h2>1. Utilisation de l'API _mapping pour récupérer des informations sur les champs</h2><p>L'API <code>_mapping</code> vous permet de récupérer la définition du mappage pour un ou plusieurs <a href="https://opster.com/guides/elasticsearch/glossary/elasticsearch-index/">index.</a> Il s'agit d'informations sur les champs, leurs types de données et d'autres propriétés. Pour récupérer le mappage d'un index spécifique, utilisez la requête suivante :</p>GET /&lt;index_name&gt;/_mapping<p>Par exemple, si vous avez un index nommé <code>my_index</code>, vous pouvez récupérer son mapping avec la requête suivante :</p>GET /my_index/_mapping<p>La réponse comprendra la définition du mappage pour l'index, qui contient des informations sur les champs et leurs propriétés.</p><p>Il est également possible de récupérer la cartographie d'un champ spécifique. Cela peut s'avérer utile si votre cartographie est assez vaste et que vous souhaitez vous concentrer sur un domaine spécifique. Pour récupérer la correspondance d'un champ spécifique, utilisez la requête suivante :</p>GET /my_index/_mapping/field/my_field<p>Vous pouvez également récupérer les correspondances de plusieurs champs en séparant leurs noms par des virgules, comme dans la requête suivante :</p>GET /my_index/_mapping/field/my_field_1,my_field_2,my_field_3<h2>2. Utilisation de l'API _search pour afficher les valeurs des champs</h2><p>Pour afficher les valeurs des champs d'un index Elasticsearch, vous pouvez utiliser l'API <code>_search</code>. Par défaut, l'API <code>_search</code> renvoie le champ <code>_source</code>, qui contient le document JSON original qui a été indexé. Pour n'afficher que des champs spécifiques, vous pouvez utiliser le paramètre <code>_source</code> dans la requête de recherche.</p><p>Voici un exemple de demande de recherche qui renvoie les valeurs des champs <code>title</code> et <code>author</code> pour les documents de l'index <code>my_index</code>:</p>GET /my_index/_search
{
  "query": {
    "match_all": {}
  },
  "_source": ["title", "author"]
}<p>Dans cet exemple, le paramètre <code>_source</code> spécifie les champs à renvoyer.</p><h2>3. Filtrer les champs à l'aide du paramètre fields</h2><p>Vous pouvez également utiliser le paramètre <code>fields</code> pour filtrer les champs renvoyés dans la réponse de recherche. Cela peut être utile si vous n'avez besoin que de champs spécifiques et que vous souhaitez réduire la taille de la réponse. Le paramètre <code>fields</code> accepte un tableau de noms de champs ou de caractères génériques.</p><p>Par exemple, pour obtenir uniquement les champs <code>title</code> et <code>author</code> pour les documents de l'index <code>my_index</code>, vous pouvez utiliser la requête de recherche suivante :</p>GET /my_index/_search
{
  "query": {
    "match_all": {}
  },
  "fields": ["title", "author"],
  "_source": false
}<p>Notez que le paramètre <code>_source</code> est fixé à false afin de ne pas renvoyer le document source.</p><p>Pour obtenir tous les champs dont le type de données est <code>text</code>, vous pouvez utiliser un motif joker comme celui-ci :</p>GET /my_index/_search
{
  "query": {
    "match_all": {}
  },
  "fields": ["*.text"],
  "_source": false
}<h2>4. Affichage des champs imbriqués</h2><p>Si votre index contient des champs imbriqués, vous pouvez utiliser la notation point pour spécifier le chemin du champ imbriqué dans le paramètre <code>fields</code>. Par exemple, si vous disposez d'un champ imbriqué nommé <code>address.city</code>, vous pouvez l'inclure dans la réponse de recherche comme suit :</p>GET /my_index/_search
{
  "query": {
    "match_all": {}
  },
  "fields": ["title", "author", "address.city"],
  "_source": false
}<p>Dans cet exemple, la réponse de la recherche comprendra les valeurs des champs <code>title</code>, <code>author</code> et <code>address.city</code>.</p><h2>Conclusion</h2><p>En conclusion, l'affichage des champs dans un index Elasticsearch peut être réalisé en utilisant l'API <code>_mapping</code> pour récupérer les informations sur les champs et l'API <code>_search</code> pour afficher les valeurs des champs. Vous pouvez filtrer les champs renvoyés dans la réponse de recherche à l'aide des paramètres <code>_source</code> ou <code>fields</code> et afficher les champs imbriqués à l'aide de la notation par points. Ces techniques peuvent vous aider à comprendre la structure de vos données, à identifier des champs spécifiques et à résoudre des problèmes.</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[Indexer des données]]></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[Comment optimiser l'espace disque et l'utilisation d'Elasticsearch ?]]></title>
    <description><![CDATA[Découvrez comment prévenir et gérer les cas où le disque Elasticsearch est trop plein (surutilisation) et ceux où sa capacité est sous-utilisée afin d'optimiser les coûts du cluster.]]></description>
    <content:encoded><![CDATA[<p>La gestion des disques est importante pour toute base de données, et Elasticsearch ne fait pas exception. Si vous n'avez pas assez d'espace disque disponible, Elasticsearch arrêtera d'allouer des shards au nœud. Cela vous empêchera éventuellement d'écrire des données dans le cluster, avec le risque potentiel de perte de données dans votre application. En revanche, si vous disposez de trop d'espace disque, vous payez pour plus de ressources que vous n'en avez besoin.</p><h2>Historique des filigranes</h2><p>Il existe différents seuils "en filigrane" sur votre cluster Elasticsearch qui vous aident à suivre l'espace disque disponible. Lorsque le disque d'un nœud se remplit, le premier seuil à être franchi est le "filigrane de disque faible". Le deuxième seuil sera alors le "seuil de filigrane de disque élevé". Enfin, le "stade de l'inondation du disque" sera atteint. Une fois ce seuil dépassé, le cluster bloque l'écriture dans TOUS les index qui ont un shard (primaire ou réplique) sur le nœud qui a passé le filigrane. Les lectures (recherches) restent possibles.</p><h2>Comment prévenir et gérer les cas où le disque est trop plein (surutilisation) ?</h2><p>Il existe plusieurs méthodes pour gérer les cas où le disque Elasticsearch est trop plein :</p><ol><li><p><strong>Supprimer les</strong> <strong>anciennes données :</strong> En général, les données ne doivent pas être conservées indéfiniment. L'un des moyens de prévenir et de résoudre le problème des disques trop pleins est de veiller à ce que les données atteignant un certain âge soient archivées et supprimées de manière fiable. L'un des moyens d'y parvenir est d'utiliser l'<a href="https://www.elastic.co/docs/manage-data/lifecycle/index-lifecycle-management">ILM</a>.</p></li><li><p><strong>Augmenter la capacité de stockage :</strong> Si vous ne pouvez pas supprimer les données, vous pouvez ajouter des nœuds de données supplémentaires ou augmenter la taille des disques afin de conserver toutes les données sans nuire aux performances. Si vous devez ajouter de la capacité de stockage à la grappe, vous devez déterminer si vous devez ajouter uniquement de la capacité de stockage, ou à la fois de la capacité de stockage et des ressources RAM et CPU en proportion (voir la section sur le <a href="https://www.elastic.co/search-labs/blog/optimize-elasticsearch-disk-space-and-usage#the-relationship-between-disk-size,-ram-and-cpu">rapport entre la taille du disque, la RAM et le CPU</a> ci-dessous).</p></li></ol><h2>Comment ajouter de la capacité de stockage à votre cluster Elasticsearch ?</h2><ol><li><p><strong>Augmentez le nombre de nœuds de données : </strong>N'oubliez pas que les nouveaux nœuds doivent être de la même taille que les nœuds existants et de la même version d'Elasticsearch.</p></li><li><p><strong>Augmenter la taille des nœuds existants : </strong>Dans les environnements en nuage, il est généralement facile d'augmenter la taille du disque et la RAM/CPU sur les nœuds existants.</p></li><li><p><strong>Augmentez uniquement la taille du disque : </strong>Dans les environnements en nuage, il est souvent relativement facile d'augmenter la taille du disque.</p></li><li><p><a href="https://www.elastic.co/docs/deploy-manage/tools/snapshot-and-restore"><strong>Instantané</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>et</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>restauration</strong></a><strong>:</strong> Si vous souhaitez que les anciennes données soient récupérées sur demande dans le cadre d'un processus automatisé à partir des sauvegardes, vous pouvez prendre des clichés des anciens index, les supprimer et restaurer temporairement les données sur demande à partir des clichés. </p></li><li><p><strong>Réduire le nombre de répliques par groupe :</strong> Une autre option pour réduire les données consiste à réduire le nombre de répliques de chaque groupe. Pour des raisons de haute disponibilité, il est préférable d'avoir une réplique par bloc de données, mais lorsque les données vieillissent, il est possible de se passer de répliques. Cela peut généralement fonctionner si les données sont persistantes ou si vous disposez d'une sauvegarde à restaurer en cas de besoin.</p></li><li><p><strong>Créer des alertes :</strong> Afin d'éviter que les disques ne se remplissent à l'avenir et d'agir de manière proactive, vous devriez créer des alertes basées sur l'utilisation du disque qui vous préviendront lorsque le disque commencera à se remplir. </p></li></ol><h2>Comment prévenir et traiter les cas où la capacité du disque est sous-utilisée ?</h2><p>Si la capacité de votre disque est sous-utilisée, il existe plusieurs options pour réduire le volume de stockage de votre cluster.</p><h3>Comment réduire le volume de stockage d'un cluster Elasticsearch ?</h3><p>Il existe plusieurs méthodes pour réduire le volume de stockage d'un cluster.</p><p><strong>1. Réduire le nombre de nœuds de données</strong></p><p>Si vous souhaitez réduire le stockage des données et réduire les ressources RAM et CPU dans la même proportion, il s'agit de la stratégie la plus simple. Le déclassement des nœuds inutiles devrait permettre de réaliser les économies les plus importantes.</p><p>Avant de mettre le nœud hors service, vous devez.. :</p><ul><li><p>Assurez-vous que le nœud à mettre hors service n'est pas nécessaire en tant que nœud MASTER. Vous devez toujours avoir au moins trois nœuds ayant le rôle de nœud MASTER.</p></li><li><p>Migrer les blocs de données hors du nœud à mettre hors service.</p></li></ul><p><strong>2. Remplacer les nœuds existants par des nœuds plus petits</strong></p><p>Si vous ne pouvez pas réduire davantage le nombre de nœuds (en général, 3 est une configuration minimale), vous pouvez alors réduire la taille des nœuds existants. Il est conseillé de veiller à ce que tous les nœuds de données aient la même mémoire RAM et la même taille de disque, étant donné que l'équilibre des ensembles est basé sur le nombre d'ensembles par nœud.</p><p>La procédure serait la suivante :</p><ul><li><p>Ajouter de nouveaux nœuds plus petits à la grappe</p></li><li><p>Faire migrer les shards à l'écart des nœuds à déclasser</p></li><li><p>Arrêter les anciens nœuds</p></li></ul><p><strong>3. Réduire la taille des disques sur les nœuds</strong></p><p>Si vous souhaitez uniquement réduire la taille des disques sur les nœuds sans modifier la mémoire vive ou l'unité centrale de la grappe, vous pouvez réduire la taille des disques pour chaque nœud. La réduction de la taille du disque sur un nœud Elasticsearch n'est pas un processus trivial.</p><p>La manière la plus simple de le faire est généralement d'effectuer les opérations suivantes :</p><ul><li><p>Migrations de shards depuis le nœud</p></li><li><p>Arrêter le nœud</p></li><li><p>Monter un nouveau volume de données sur le nœud avec la taille appropriée</p></li><li><p>Copier toutes les données de l'ancien volume de disque vers le nouveau volume</p></li><li><p>Détacher l'ancien volume A</p></li><li><p>Démarrer le nœud et migrer les unités de stockage vers le nœud</p></li></ul><p>Pour ce faire, vous devez disposer d'une capacité suffisante sur les autres nœuds pour stocker temporairement les fragments supplémentaires du nœud au cours de ce processus. Dans de nombreux cas, le coût de la gestion de ce processus peut dépasser les économies potentielles en termes d'utilisation du disque. Pour cette raison, il peut être plus simple de remplacer le nœud par un nouveau nœud ayant la taille de disque souhaitée (voir "Remplacer les nœuds existants par des nœuds plus petits" ci-dessus).</p><p>Lorsque vous payez pour des ressources inutiles, il est évident que vous pouvez réduire les coûts en optimisant l'utilisation de vos ressources.</p><h2>La relation entre la taille du disque, la mémoire vive et le processeur</h2><p>Le rapport idéal entre la capacité des disques et la mémoire vive dans votre cluster dépend de votre cas d'utilisation particulier. C'est pourquoi, lorsque vous envisagez de modifier votre capacité de stockage, vous devez également vous demander si vos ratios actuels Disque/RAM/CPU sont bien équilibrés et si, par conséquent, vous devez également ajouter/réduire la RAM/CPU dans les mêmes proportions.</p><p>Les besoins en RAM et en CPU dépendent du volume de l'activité d'<a href="https://opster.com/guides/elasticsearch/glossary/elasticsearch-indexing/">indexation</a>, du nombre et du type de requêtes, ainsi que de la quantité de données recherchées et agrégées. Elle est souvent proportionnelle à la quantité de données stockées sur la grappe, et doit donc également être liée à la taille du disque.</p><p>Le rapport entre la capacité du disque et la mémoire vive peut varier en fonction du cas d'utilisation. Voir quelques exemples ici :</p><p></p><p>Activité de l'indice</p><p>Conservation</p><p>Activité de recherche</p><p>Capacité du disque</p><p>RAM</p><p>Application de recherche d'entreprise</p><p>Ingestion modérée de billes</p><p>Longues</p><p>Lumière</p><p>2TB</p><p>32GB</p><p>Surveillance des applications</p><p>Ingestion intensive de bois</p><p>Court</p><p>Lumière</p><p>1TB</p><p>32GB</p><p>Commerce électronique</p><p>Indexation des données légères</p><p>Indéfinie</p><p>Lourd</p><p>500GB</p><p>32GB</p><p><em>N'oubliez pas que la modification de la configuration des machines des nœuds doit être effectuée avec précaution, car elle peut entraîner l'arrêt du nœud et vous devez veiller à ce que les fragments ne commencent pas à migrer vers vos autres nœuds déjà surchargés.</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[Les bases]]></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[Comment configurer le nombre de réplicas dans un index Elasticsearch]]></title>
    <description><![CDATA[Apprenez à configurer le number_of_replicas dans un index Elasticsearch afin d'améliorer les performances de rechercher et de renforcer la résilience en cas de panne de node. 
]]></description>
    <content:encoded><![CDATA[<p>Elasticsearch est conçu pour être un système distribué capable de gérer un grand nombre de données et d'assurer une haute disponibilité. L'une des fonctions clés qui permet cela est le concept de réplication d'index, qui est contrôlé par le paramètre <code>number_of_replicas</code>. Cet article aborde les détails de ce paramètre, ses implications et la manière de le configurer correctement.</p><h2>Le rôle des répliques dans Elasticsearch</h2><p>Dans Elasticsearch, un index est une collection de documents qui sont répartis sur plusieurs shards primaires. Chaque groupe primaire est un index Apache Lucene autonome, et les documents d'un index sont répartis entre tous les groupes primaires. Pour garantir la haute disponibilité et la redondance des données, Elasticsearch permet à chaque nuage d'avoir une ou plusieurs copies, appelées répliques.

Le paramètre <code>number_of_replicas</code> contrôle le nombre de répliques (copies) qu'Elasticsearch crée pour chaque réplique primaire d'un index. Par défaut, Elasticsearch crée une réplique pour chaque shard primaire, mais cela peut être modifié en fonction des besoins de votre système.</p><h2>Configuration du nombre de répliques (number_of_replicas)</h2><p>Le paramètre <code>number_of_replicas</code> peut être configuré au moment de la création de l'index ou mis à jour ultérieurement. Voici comment vous pouvez le définir lors de la création de l'index :</p>PUT /my_index
{
  "settings": {
    "number_of_replicas": 2
  }
}<p>Dans cet exemple, Elasticsearch créera deux réplicas pour chaque fichier primaire de l'index <code>my_index</code>.</p><p>Pour mettre à jour le paramètre <code>number_of_replicas</code> d'un index existant, vous pouvez utiliser l'API <code>_settings</code>:</p>PUT /my_index/_settings
{
  "number_of_replicas": 3
}<p>Cette commande mettra à jour l'index <code>my_index</code> pour qu'il y ait trois réplicas pour chaque groupe primaire.</p><h2>Implications du paramètre number_of_replicas (nombre de répliques)</h2><p>Le paramètre <code>number_of_replicas</code> a un impact significatif sur les performances et la résilience de votre <a href="https://opster.com/guides/elasticsearch/glossary/elasticsearch-cluster/">cluster</a> Elasticsearch. Voici quelques points clés à prendre en considération :</p><ol><li><p><strong>Redondance et disponibilité des données :</strong> L'augmentation du site <code>number_of_replicas</code> améliore la disponibilité de vos données en créant davantage de copies de chaque groupe de données. Si un nœud tombe en panne, Elasticsearch peut toujours servir des données à partir des répliques sur les <a href="https://opster.com/guides/elasticsearch/glossary/elasticsearch-node/">nœuds</a> restants.</p></li><li><p><strong>Performances de recherche :</strong> Les répliques peuvent répondre à des demandes de lecture. Le fait de disposer d'un plus grand nombre de répliques peut donc améliorer les performances en matière de recherche en répartissant la charge sur un plus grand nombre de répliques.</p></li><li><p><strong>Performance d'écriture :</strong> Cependant, chaque opération d'écriture doit être exécutée sur chaque copie d'un groupe de données. Par conséquent, une adresse <code>number_of_replicas</code> plus élevée peut ralentir les performances d'<a href="https://opster.com/guides/elasticsearch/glossary/elasticsearch-indexing/">indexation</a> car elle augmente le nombre d'opérations à effectuer pour chaque écriture.</p></li><li><p><strong>Exigences en matière de stockage :</strong> Plus il y a de répliques, plus il y a d'espace de stockage. Vous devez vous assurer que votre cluster dispose d'une capacité suffisante pour stocker les répliques supplémentaires.</p></li><li><p><strong>Résilience en cas de défaillance d'un nœud :</strong> Le site <code>number_of_replicas</code> doit être défini en fonction du nombre de nœuds de votre cluster. Si le site <code>number_of_replicas</code> est égal ou supérieur au nombre de nœuds, votre cluster peut tolérer la défaillance de plusieurs nœuds sans perte de données.</p></li></ol><h2>Bonnes pratiques pour définir le nombre de répliques (number_of_replicas)</h2><p>Le réglage optimal de <code>number_of_replicas</code> dépend des exigences spécifiques de votre système. Toutefois, voici quelques bonnes pratiques générales :</p><ul><li><p>Pour un cluster à un seul nœud, <code>number_of_replicas</code> doit être fixé à 0, car il n'y a pas d'autres nœuds pour contenir des répliques.</p></li><li><p>Pour un cluster à plusieurs nœuds, <code>number_of_replicas</code> doit être réglé sur au moins 1 pour assurer la redondance des données et la haute disponibilité.</p></li><li><p>Si la performance de la recherche est une priorité, envisagez d'augmenter le site <code>number_of_replicas</code>. Toutefois, il convient de garder à l'esprit le compromis entre les performances d'écriture et les exigences en matière de stockage.</p></li><li><p>Assurez-vous toujours que votre cluster dispose d'une capacité suffisante pour stocker les répliques supplémentaires.</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[Les bases]]></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[Exclusion des champs Elasticsearch de l'indexation]]></title>
    <description><![CDATA[Apprenez comment configurer Elasticsearch pour exclure des champs, les principales raisons d'exclure des champs de l'indexation, et les bonnes pratiques à suivre.]]></description>
    <content:encoded><![CDATA[<p>Dans Elasticsearch, l'indexation fait référence au processus de stockage et d'organisation des données de manière à les rendre facilement consultables. Si l'indexation de tous les champs d'un document peut s'avérer utile dans certains cas, il peut arriver que vous souhaitiez exclure certains champs de l'indexation. Cela permet d'améliorer les performances, de réduire les coûts de stockage et de minimiser la taille globale de votre index Elasticsearch.</p><p>Dans cet article, nous examinerons les raisons d'exclure des champs de l'indexation, comment configurer Elasticsearch pour exclure des champs spécifiques et quelques bonnes pratiques à suivre pour ce faire.</p><h2>Raisons d'exclure des champs de l'indexation</h2><ol><li><p><strong>Performance : </strong>L'indexation de tous les champs d'un document peut augmenter le temps d'indexation et ralentir les performances de recherche. En excluant les champs qui ne sont pas nécessaires à la recherche ou à l'agrégation, vous pouvez améliorer les performances globales de votre cluster Elasticsearch.</p></li><li><p><strong>Stockage : </strong>L'indexation des champs consomme de l'espace de stockage. L'exclusion des champs qui ne sont pas nécessaires à la recherche ou à l'agrégation peut contribuer à réduire les besoins en stockage de votre cluster Elasticsearch.</p></li><li><p><strong>Taille de l'index : </strong>La taille d'un index Elasticsearch est directement liée au nombre de champs indexés. En excluant les champs inutiles, vous pouvez réduire la taille de votre index, ce qui permet d'accélérer les performances de recherche et d'indexation.</p></li></ol><h2>Configurer Elasticsearch pour exclure des champs</h2><p>Pour exclure un champ de l'indexation dans Elasticsearch, vous pouvez utiliser la propriété "index" dans le mappage du champ. En définissant la propriété "index" à "false", Elasticsearch n'indexera pas le champ, et il ne sera pas consultable ni disponible pour les agrégations.</p><p>Voici un exemple d'exclusion d'un champ de l'indexation à l'aide du mappage Elasticsearch :</p>PUT /my_index
{
  "mappings": {
    "properties": {
      "field_to_exclude": {
        "type": "text",
        "index": false
      }
    }
  }
}<p>Dans cet exemple, nous créons un nouvel index appelé "my_index" avec un seul champ appelé "field_to_exclude". En définissant la propriété "index" à "false", nous indiquons à Elasticsearch de ne pas indexer ce champ. Le champ reste cependant disponible dans le document source.</p><h2>Meilleures pratiques pour exclure des champs de l'indexation</h2><ol><li><p><strong>Analysez vos données : </strong>Avant d'exclure des champs de l'indexation, il est essentiel d'analyser vos données et de comprendre quels champs sont nécessaires à la recherche et à l'agrégation. Cela vous aidera à prendre des décisions éclairées sur les champs à exclure.</p></li><li><p><strong>Testez vos modifications : </strong>Lorsque vous excluez des champs de l'indexation, il est essentiel de tester vos modifications pour vous assurer que vos fonctionnalités de recherche et d'agrégation fonctionnent toujours comme prévu. Cela peut vous aider à éviter des problèmes inattendus ou des problèmes de performance.</p></li><li><p><strong>Contrôlez les performances :</strong> Après avoir exclu des champs de l'indexation, surveillez les performances de votre cluster Elasticsearch pour vous assurer que vos modifications ont eu l'effet escompté. Cela peut vous aider à identifier les optimisations supplémentaires qui pourraient être nécessaires.</p></li><li><p><strong>Utiliser le filtrage à la source :</strong> Si vous avez besoin de stocker un champ dans Elasticsearch mais que vous ne souhaitez pas qu'il soit consultable ou disponible pour les agrégations, envisagez d'utiliser le filtrage des sources. Cela vous permet de stocker le champ dans le champ _source mais de l'exclure de l'index.</p></li></ol><h2>Conclusion</h2><p>L'exclusion de champs de l'indexation dans Elasticsearch peut contribuer à améliorer les performances, à réduire les coûts de stockage et à minimiser la taille globale de votre index. En analysant soigneusement vos données et en comprenant quels champs sont nécessaires à la recherche et à l'agrégation, vous pouvez prendre des décisions éclairées sur les champs à exclure. Testez toujours vos modifications et surveillez les performances de votre cluster Elasticsearch pour vous assurer que vos optimisations ont l'effet escompté.</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[Indexer des données]]></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[Suppression d'un champ d'un document dans Elasticsearch]]></title>
    <description><![CDATA[Apprenez à supprimer des champs de documents Elasticsearch à l'aide de l'API de mise à jour, de scripts ou de la réindexation pour des suppressions uniques ou en masse.]]></description>
    <content:encoded><![CDATA[<p>Dans Elasticsearch, il est fréquent de devoir supprimer un champ d'un document. Cela peut s'avérer utile lorsque vous souhaitez supprimer des informations inutiles ou obsolètes de votre index. Dans cet article, nous aborderons différentes méthodes pour supprimer un champ d'un document dans Elasticsearch, avec des exemples et des instructions pas à pas. </p><h2>Méthode 1 : Utilisation de l'API de mise à jour</h2><p><a href="https://www.elastic.co/docs/reference/elasticsearch/rest-apis/update-document">API Update</a> vous permet de mettre à jour un document en fournissant un script qui modifie la source du document. Vous pouvez utiliser cette API pour supprimer un champ d'un document en lui attribuant la valeur null. Voici un guide étape par étape pour y parvenir :</p><p>1. Identifiez l'index, le type de document (si vous utilisez Elasticsearch 6.x ou une version antérieure) et l'ID du document que vous souhaitez mettre à jour.</p><p>2. Utilisez l'API de mise à jour avec un script qui définit le champ comme nul ou, mieux encore, le supprime du document source. L'exemple suivant montre comment supprimer le champ "field_to_delete" d'un document dont l'ID est "1" dans l'index "my_index" :</p>POST /my_index/_update/1
{
  "script": "ctx._source.remove('field_to_delete')"
}<p>3. Exécuter la demande. En cas de succès, Elasticsearch renvoie une réponse indiquant que le document a été mis à jour.</p><p>Note : Cette méthode ne supprime le champ que du document spécifié. Le champ existera toujours dans la cartographie et dans les autres documents de l'index.</p><h2>Méthode 2 : Réindexation avec une source modifiée</h2><p>Si vous souhaitez supprimer un champ de tous les documents d’un index, vous pouvez utiliser l’<a href="https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-reindex">API Reindex</a> pour créer un nouvel index avec la source modifiée. Voici comment procéder :</p><p>1. Créez un nouvel index avec les mêmes paramètres et mappages que l'index original. Vous pouvez utiliser l'API Get Index pour récupérer les paramètres et les mappages de l'index original.</p><p>2. Utilisez l'API Reindex pour copier les documents de l'index original vers le nouvel index, tout en supprimant le champ de la source. L'exemple suivant montre comment supprimer le champ "field_to_delete" de tous les documents de l'index "my_index" :</p>POST /_reindex
{
  "source": {
    "index": "my_index"
  },
  "dest": {
    "index": "new_index"
  },
  "script": {
    "source": "ctx._source.remove('field_to_delete')"
  }
}<p>
3. Vérifier que le nouvel index contient les documents corrects avec le champ supprimé.</p><p>4. Si tout semble correct, vous pouvez supprimer l'index original et, si nécessaire, ajouter un alias au nouvel index portant le nom de l'index original.</p><h2>Méthode 3 : Mise à jour du mapping et réindexation</h2><p>Si vous souhaitez supprimer un champ du mappage et de tous les documents d'un index, vous pouvez mettre à jour le mappage, puis réindexer les documents. Voici comment procéder :</p><p>1. Créez un nouvel index avec les mêmes paramètres que l'index original.</p><p>2. Récupérer les mappings de l'index original à l'aide de l'API "Get Mapping".</p><p>3. Modifiez les correspondances en supprimant le champ que vous souhaitez supprimer.</p><p>4. Appliquez les mappages modifiés au nouvel index à l'aide de l'API Put Mapping.</p><p>5. Utilisez l'API de réindexation pour copier les documents de l'index d'origine vers le nouvel index, comme décrit dans la méthode 2.</p><p>6. Vérifiez que le nouvel index contient les documents corrects avec le champ supprimé et que le champ n'est pas présent dans le mappage.</p><p>7. Si tout semble en ordre, vous pouvez supprimer l’index original et, si nécessaire, ajouter un alias au nouvel index avec le nom de l’index original.</p><h2>Conclusion</h2><p>Dans cet article, nous avons abordé trois méthodes pour supprimer un champ d'un document dans Elasticsearch : l'utilisation de l'API de mise à jour, la réindexation avec une source modifiée et la mise à jour du mappage et la réindexation. Chaque méthode a ses propres cas d'utilisation et ses propres compromis, choisissez donc celle qui répond le mieux à vos besoins. N'oubliez jamais de tester vos modifications et de vérifier les résultats avant de les appliquer aux environnements de production.</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[Les bases]]></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[Comprendre la notation Elasticsearch et l'API Explain]]></title>
    <description><![CDATA[Découvrez les mécanismes de notation d’Elasticsearch et la fonction pratique de notation pour réaliser un audit de la pertinence de la recherche et améliorer le classement des documents grâce à l’API Explain.]]></description>
    <content:encoded><![CDATA[<p>Elasticsearch est un moteur de recherche puissant qui fournit des résultats de recherche rapides et pertinents en calculant un score pour chaque document dans l'index. Ce score est un facteur crucial pour déterminer l'ordre des résultats de la recherche. Dans cet article, nous allons nous plonger dans le mécanisme de notation d'Elasticsearch et explorer l'API Explain, qui aide à comprendre le processus de notation.</p><h2>Mécanismes de notation dans Elasticsearch</h2><p>Elasticsearch utilise par défaut un modèle de notation appelé Practical Scoring Function (BM25). Ce modèle est basé sur la théorie probabiliste de la recherche d'informations et prend en compte des facteurs tels que la fréquence des termes, la fréquence inverse des documents et la normalisation de la longueur des champs. Examinons brièvement ces facteurs :</p><ol><li><p><strong>Fréquence des termes (TF) :</strong> Elle représente le nombre de fois qu'un terme apparaît dans un document. Une fréquence de terme plus élevée indique une relation plus forte entre le terme et le document.</p></li><li><p><strong>Fréquence inverse des documents (IDF) :</strong> Ce facteur mesure l'importance d'un terme dans l'ensemble de la collection de documents. Un terme qui apparaît dans de nombreux documents est considéré comme moins important, tandis qu'un terme qui apparaît dans moins de documents est considéré comme plus important.</p></li><li><p><strong>Normalisation de la longueur du champ</strong>: Ce facteur tient compte de la longueur du champ dans lequel le terme apparaît. Les champs plus courts ont plus de poids, car le terme est considéré comme plus significatif dans un champ plus court.</p></li></ol><h2>Utiliser l'API Expliciter</h2><p>L'API Explain d'Elasticsearch est un outil précieux pour comprendre le processus de notation. Il fournit une explication détaillée de la manière dont la note d'un document spécifique a été calculée. Pour utiliser l'API Expliciter, vous devez envoyer une requête GET au point de terminaison suivant :</p>GET /&lt;index&gt;/_explain/&lt;document_id&gt;<p>Dans le corps de la demande, vous devez indiquer la requête pour laquelle vous voulez comprendre la notation. En voici un exemple :</p>{
  "query": {
    "match": {
      "title": "elasticsearch"
    }
  }
}<p>La réponse de l'API Expliciter comprendra une ventilation détaillée du processus de notation, y compris les facteurs individuels (TF, IDF et normalisation de la longueur de champ) et leurs contributions à la note finale. Voici un exemple de réponse :</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>Dans cet exemple, la réponse montre que le score de 1,2 est un produit de la valeur IDF (2,2) et de la valeur tfNorm (0,5). L'explication détaillée permet de comprendre les facteurs contribuant à la note et peut être utile pour affiner la pertinence de la recherche.</p><h2>Conclusion</h2><p>La notation Elasticsearch est un aspect essentiel de la fourniture de résultats de recherche pertinents. En comprenant les mécanismes de notation et en utilisant l'API Explain, vous pouvez obtenir des informations sur les facteurs affectant les résultats de recherche et optimiser vos requêtes de recherche pour une meilleure pertinence et de meilleures performances.</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[Les bases]]></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[Modèles d'index dans Elasticsearch : Comment utiliser les modèles composables]]></title>
    <description><![CDATA[Découvrez comment créer des modèles d'index composables et de composants dans Elasticsearch pour garantir des mapping cohérents et automatiser la configuration de l'index.]]></description>
    <content:encoded><![CDATA[<p>Un index Elasticsearch peut être configuré par le biais de mappages, de paramètres et d'alias : </p><ul><li><p>Les définitions de mappage spécifient le schéma de données.</p></li><li><p>Les paramètres définissent la taille du groupe et les taux de rafraîchissement. </p></li><li><p>Les alias sont utilisés pour donner d'autres noms à l'index.</p></li></ul><p>Lorsque nous indexons un document pour la première fois ou que nous créons un index vide à l'aide de l'API Create Index, l'index est créé avec les paramètres par défaut, sans schéma de données et sans alias. Ces valeurs par défaut fonctionnent assez bien dans les environnements de développement et de test, mais il se peut que nous devions personnaliser nos indices pour les environnements de production.</p><p>L'utilisation des mappages et des paramètres par défaut en production peut entraîner des performances médiocres en matière d'indexation et de recherche. L'instanciation manuelle des indices est un processus fastidieux et chronophage. Recréer de tels index dans chaque environnement est particulièrement peu pratique si nous disposons d'un schéma de correspondance élaboré ainsi que de paramètres et d'alias personnalisés.</p><p>Heureusement, Elasticsearch met à notre disposition un outil permettant d'appliquer automatiquement une configuration prédéfinie lors de la création d'index sous la forme de  <em>modèles d' index.</em></p><h2>Modèles d'index</h2><p>Les modèles d'index nous permettent de créer des index avec une configuration définie par l'utilisateur. Lors de son instanciation, un index peut tirer la configuration de ces modèles, par exemple un nombre déterminé de shards et de réplicas ou des mappages de champs. Un modèle sera défini avec un modèle de nom et une certaine configuration. Si le nom de l'index correspond au modèle de dénomination du modèle, le nouvel index sera créé avec la configuration définie dans le modèle.</p><p>Elasticsearch a mis à jour sa fonctionnalité de modèle dans la version 7.8 avec des modèles composables. Cette nouvelle version permet de réutiliser beaucoup plus de modèles d'index, comme le montre cet article.</p><h3>Types de modèles d’index</h3><p>Les modèles d'index peuvent être classés en deux catégories :</p><ul><li><p><strong>Modèles d'index (ou modèles d'index composables)</strong>: Les modèles d'index composables peuvent exister seuls ou être composés d'un ou de plusieurs modèles de composants (voir la deuxième catégorie).</p></li><li><p><strong>Modèles de composants :</strong> Le modèle de composant est un modèle <em>réutilisable</em> qui définit la configuration requise. En général, le modèle de composant doit être associé à un modèle d'index. Chaque modèle de composant peut être associé à un ou plusieurs modèles d'index. </p></li></ul><p>Comme vous pouvez le voir dans l'image ci-dessous, les modèles d'index A et B partagent des modèles de composants (dans ce cas, un seul - le modèle 3) entre eux. Un modèle d'index peut être constitué d'un ou de plusieurs modèles de composants et chacun des modèles de composants peut être associé à un ou plusieurs modèles d'index. Les deux types de modèles peuvent exister seuls, mais les modèles de composants ne sont d'aucune utilité s'ils ne sont pas rattachés à un modèle d'index.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt7fca132e0eb86c50/6a17f5b7ec0f8982a65a678c/96c0aac29d3992e54a79be34e14cf909e0ca2ea9-1202x556.png" alt="Modèles d'index dans Elasticsearch et leurs composants." /><p>L'idée générale est de développer un catalogue de modèles de composants qu'une organisation peut utiliser pour divers besoins (par exemple, en spécifiant les différents modèles de composants pour des environnements individuels) et de les attacher à divers index via les modèles d'index composables.</p><h2>Comment créer des modèles composables (index)</h2><p>Elasticsearch fournit un point de terminaison _index_template pour gérer les modèles d'index. L'utilisateur fournit tous les mappages, paramètres et alias nécessaires ainsi qu'un modèle de nom d'index dans ce modèle. Prenons l'exemple de la création d'un modèle pour une application de microservice, <em>customer-order-service</em>, qui est responsable de la logique de génération des commandes. </p><p>Supposons que nous ayons besoin de créer un modèle pour les commandes des clients, représenté par un motif comportant des caractères génériques : *commandes. Ce modèle est censé contenir certains mappages et paramètres, tels que le champ order_date, ainsi que les numéros de shards et de réplicas.</p><p>Tout index qui est associé à ce modèle lors de sa création hérite des configurations définies dans ce modèle. Par exemple, un index black_friday_orders aura le champ order_date, les shards seront fixés à 5 et les réplicas à 2. En outre, <em>tous les</em> index créés à partir de ce modèle héritent également d'un nom d'<a href="https://opster.com/guides/elasticsearch/glossary/elasticsearch-alias/">alias</a> unique ! Créons ce modèle orders_template avec un modèle d'index défini comme *orders et avec un schéma de correspondance consistant en un seul champ oder_date avec un format de date prédéfini dd-MM-yyyy. Le code ci-dessous montre comment créer ce modèle d'index.</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>Lorsque vous exécutez cette requête dans les DevTools de Kibana, le modèle est créé avec le modèle d'index *orders ainsi que le mappage prédéfini, les paramètres et un alias. L'index_patterns est un tableau de motifs de correspondance ; tout index correspondant à ce motif sera dérivé de la configuration du modèle. Vous pouvez exécuter ce qui suit pour récupérer le modèle persisté qui devrait réitérer ce que nous avons fait :</p>GET _index_template/orders_template <p>Il existe également une priorité, un nombre positif, définie lors de la création de l'attribut de modèle défini sur le modèle : chaque modèle est défini avec une priorité de sorte que toute modification conflictuelle provenant de différents modèles sera résolue en utilisant cette valeur, la priorité étant donnée à la valeur de priorité la plus élevée. Nous nous pencherons plus en détail sur la priorité des modèles ci-dessous.</p><h2>Création d'un index avec le modèle</h2><p>Maintenant que nous disposons d'un modèle - un schéma directeur pour la création d'index - l'étape suivante consiste à créer un index. Lorsque le nom de l'index correspond au modèle donné, les configurations modèles sont appliquées automatiquement. Pour le prouver, comme le montre le code ci-dessous, créons un tout nouvel index nommé : blackfriday_orders :</p>PUT blackfriday_orders<p>Comme le nom de l'index (blackfriday_orders) correspond au modèle de dénomination défini dans le modèle (c'est-à-dire *orders), l'index doit obtenir toute la configuration dérivée du modèle. Récupérons cet index fraîchement créé et vérifions si c'est bien le cas en exécutant le code suivant :</p>GET blackfriday_orders<p>Il doit revenir :</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>Comme l'indique la réponse, la configuration de blackfriday_orders a été héritée du modèle. Nous pouvons essayer diverses combinaisons d'indices qui hériteront avec succès de la configuration modèle :</p>PUT blackfriday_orders
PUT americaorders
PUT cancelled--orders
PUT undefined101orders<p>Cependant, les indices suivants n'hériteront pas de la configuration car leur nom ne correspond pas au modèle :</p>PUT blackfriday_orders2
PUT open_orders_
PUT allorders_total<p>Il est important de se rappeler que tous les indices dérivés d'un modèle ont le même alias - all_orders - dans ce cas. L'avantage d'un tel alias est qu'il permet d'effectuer des requêtes sur cet alias unique plutôt que sur plusieurs indices.</p>GET blackfriday_orders,americaorders,undefined101orders/_search
GET all_orders/_search 
{
  "query": {
    "range": {
      "order_date": {
        "gte": "01-12-2021",
        "lte": "31-12-2021"
      }
    }
  }
}<p>Si nous créons un modèle pour les *commandes, tout index correspondant est censé adopter la configuration du modèle. En général, sciemment ou non, les équipes peuvent créer quelques modèles supplémentaires pour diverses raisons. Cela signifie que le nom de l'index peut parfois correspondre à deux modèles différents ! Elasticsearch doit décider quelles configurations de ces modèles il doit appliquer. Heureusement, ce dilemme peut être résolu en utilisant le modèle de priorité.</p><h2>Comment créer des modèles de composants</h2><p>Nous avons appris à connaître les modèles d'index dans la première partie de cet article. La création de modèles avec la configuration intégrée présente quelques inconvénients, notamment le fait que la configuration n'est pas exportable pour d'autres modèles. Si nous souhaitons disposer d'une configuration similaire, par exemple pour les modèles liés aux clients (*customers), nous devrons peut-être recréer l'ensemble du modèle. Cela signifie que nous pouvons en créer des dizaines dans une organisation typique (et vous pouvez en avoir quelques autres en fonction de l'environnement).</p><p>Comme nous cherchons toujours à faciliter la réutilisation, Elasticsearch a redessiné les modèles en gardant à l'esprit la réutilisation. Les modèles de composants répondent à cette exigence. Si vous venez d'un milieu DevOps, il est fort probable que vous ayez besoin de créer des indices avec une configuration prédéfinie pour chacun des environnements. Plutôt que d'appliquer manuellement chacune de ces configurations, vous pouvez créer un modèle de composant pour chacun des environnements.</p><p>Un modèle de composant n'est rien d'autre qu'un bloc réutilisable de configurations que nous pouvons utiliser pour créer d'autres modèles d'index. Notez que les modèles de composants n'ont aucune valeur s'ils ne sont pas associés à des modèles d'index. Ils sont exposés via un point de terminaison _component_template. Voyons comment tout cela s'articule.</p><h3>Paramètres dans un modèle d’index</h3><p>Extrayons les paramètres que nous avons définis dans notre modèle d'index plus tôt et créons un modèle de composant à partir de celui-ci. Le modèle settings_component_template est censé comporter cinq shards primaires avec deux réplicas par shard primaire. La première étape, comme le montre le code ci-dessous, consiste à déclarer et à exécuter un modèle de composant avec cette configuration.</p>PUT _component_template/settings_component_template
{
  "template":{
    "settings":{
      "number_of_shards":5,
      "number_of_replicas":2
    }
  }
}<p>Comme le montre le code ci-dessus, nous utilisons le point de terminaison _component_template pour créer un modèle de composant. Le corps de la demande contient les informations relatives au modèle dans un objet modèle. Le modèle settings_component_template peut désormais être utilisé ailleurs dans les modèles d'index. Une différence notable est que ce modèle ne définit aucun modèle d'index ; il s'agit simplement d'un bloc de code qui configure certaines propriétés pour nous.</p><h3>Modèle de correspondance</h3><p>De la même manière, créons un autre modèle. Cette fois, nous allons extraire le schéma de correspondance que nous avons défini précédemment dans les modèles d'index autonomes. Le code ci-dessous illustre le script :</p>PUT _component_template/mappings_component_template
{
  "template": {
    "mappings": {
      "properties": {
        "order_date": {
          "type": "date",
          "format":"dd-MM-yyyy"
        }
      }
    }
  }
}<h3>Modèle d'alias</h3><p>Dans le même ordre d'idées, nous pouvons également avoir un modèle de composant avec les alias - deux alias (all_orders et sales_orders) :</p>PUT _component_template/aliases_component_template
{
  "template": {
    "aliases": {
      "all_orders": {},
      "sales_orders":{}
    }
  }
}<h3>Modèle d'index composable</h3><p>Maintenant que nous disposons de ces trois modèles de composants, la prochaine étape consiste à les utiliser. Nous pouvons le faire en laissant un modèle d'index pour, par exemple, christmas_orders, l'utiliser :</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 balise composed_of est une collection de tous les modèles de composants qui constituent ce modèle. Dans ce cas, nous choisissons les paramètres, les mappings et les alias des modèles de composants. Nous avons également relevé le niveau de priorité afin que ce modèle l'emporte sur tous les autres. Une fois le modèle prêt, tous les indices correspondant au motif *orders hériteront de la configuration de ces trois modèles de composants.</p><p>Cela dit, si nous souhaitons créer un nouveau modèle, par exemple clients, avec un seul des modèles existants (settings_component_template) et un modèle alias nouvellement créé (aliases_component_template - voir ci-dessous), nous pouvons le faire à l'aide de :</p>PUT _component_template/aliases_component_template2
{
  "template": {
    "aliases": {
      "all_customers": {}
    }
  }
}<p>Le modèle d'index se présente comme suit :</p>PUT _index_template/composed_customers_template
{
  "index_patterns": [
    "*customers*"
  ],
  "priority": 200,
  "composed_of": [
    "settings_component_template",
    "aliases_component_template2"
  ]
}<p>Avez-vous vu que le modèle settings_component_template a été (ré)utilisé dans deux modèles différents ? C'est la force des modèles de composants.</p><h2>Priorité du modèle d’index</h2><p>Il est possible que les développeurs créent plusieurs modèles d'index sans tenir compte du stock existant. Il est important de définir une priorité pour chacun de ces modèles afin que celui qui a la priorité la plus élevée soit utilisé. Par exemple, le modèle my_orders_template_1 remplace le modèle my_orders_template_2 dans l'extrait de code suivant :</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>Lorsque plusieurs modèles correspondent aux index créés, Elasticsearch applique toutes les configurations de tous les modèles correspondants, mais remplace tout ce qui a une priorité plus élevée.</p><h2>Préséance des modèles</h2><p>Enfin, vous vous interrogez peut-être sur la préséance des modèles : la configuration définie dans le modèle de composant est-elle prioritaire par rapport à celle définie dans le modèle d'index principal lui-même ? Ou l'inverse ? Il y a des règles à respecter :</p><ul><li><p>Un index créé avec des configurations explicites a la priorité sur tout le reste - cela signifie que si vous créez un index avec des configurations explicites, ne vous attendez pas à ce qu'elles soient remplacées par les modèles.</p></li><li><p>Les anciens modèles (modèles créés avant la version 7.8) ont une priorité inférieure à celle des modèles composables.</p></li></ul><h2>Résumé</h2><ul><li><p>Un index contient des mappings, des paramètres et des alias : les mappings définissent le schéma des champs, les paramètres définissent les paramètres de l'index tels que le nombre de shards et de réplicas, et les alias donnent des noms alternatifs à l'index.</p></li><li><p>Les modèles permettent de créer des indices avec des configurations prédéfinies. Le fait de nommer un index avec un nom qui correspond au modèle d'index défini dans un modèle spécifique configurera automatiquement cet index conformément au modèle.</p></li><li><p>Elasticsearch a introduit les modèles d'index composables dans la version 7.8. Les modèles d'index composables permettent la modularité et le changement de version des modèles.</p></li><li><p>Les modèles composables sont constitués d'au moins un modèle de composant.</p></li><li><p>Un modèle d'index peut également avoir sa propre configuration.</p></li><li><p>Un modèle de composant est un modèle réutilisable avec une configuration prédéfinie, tout comme un modèle d'index composable.</p></li><li><p>Toutefois, les modèles de composants sont censés faire partie d'un modèle d'index ; ils sont inutiles s'ils ne sont pas "composés" dans un modèle d'index.</p></li><li><p>Les modèles de composants n'ont pas de modèle d'index défini, ce qui est une autre raison pour laquelle ils sont "censés" faire partie d'un modèle d'index.</p></li><li><p>Chaque modèle a une priorité - un nombre positif. Plus le nombre est élevé, plus l'application du modèle est prioritaire.</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[Indexer des données]]></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[Recherche Elasticsearch par deux champs]]></title>
    <description><![CDATA[Explorez les techniques de recherche par deux champs, y compris les requêtes multi-match, les requêtes booléennes et le renforcement de champ au moment de la requête.]]></description>
    <content:encoded><![CDATA[<p>La recherche sur plusieurs champs dans Elasticsearch est une exigence courante dans de nombreuses applications. Dans cet article, nous allons explorer des techniques avancées permettant d'effectuer des recherches sur deux champs, notamment les requêtes à correspondances multiples, les requêtes bool et l'augmentation du nombre de champs au moment de la requête. Ces techniques vous aideront à créer des résultats de recherche plus précis et plus pertinents pour vos utilisateurs.</p><h2>Techniques avancées pour effectuer des recherches sur deux champs</h2><h3>1. Requête multiple</h3><p>Une requête multiple vous permet de rechercher une seule chaîne de caractères dans plusieurs champs. Ceci est utile lorsque vous souhaitez trouver des documents qui contiennent la chaîne de requête donnée dans l'un ou l'autre des deux champs. Voici un exemple de requête multi-correspondance recherchant le terme "exemple" dans les champs "titre" ou "description" :</p>{
  "query": {
    "multi_match": {
      "query": "example",
      "fields": ["title", "description"]
    }
  }
}<h3>2. Requête Bool</h3><p>Une requête bool vous permet de combiner plusieurs requêtes en utilisant la logique booléenne. Vous pouvez utiliser la clause "devrait" pour rechercher les documents qui correspondent à la requête dans l'un ou l'autre des deux champs. Voici un exemple de requête bool recherchant le terme "exemple" dans les champs "titre" et "description" :</p>{
  "query": {
    "bool": {
      "should": [
        {"match": {"title": "example"}},
        {"match": {"description": "example"}}
      ]
    }
  }
}<h3>3. Renforcement des champs au moment de la requête</h3><p>Il peut arriver que vous souhaitiez accorder plus d'importance à un champ qu'à un autre lors de la recherche. Vous pouvez y parvenir en appliquant un facteur d'amplification au champ au moment de la requête. Une valeur de boost plus élevée donne plus de poids au champ, ce qui le rend plus susceptible d'influencer le résultat final de la recherche. Voici un exemple de requête à correspondances multiples avec un facteur d'amplification appliqué au champ "titre" :</p>{
  "query": {
    "multi_match": {
      "query": "example",
      "fields": ["title^3", "description"]
    }
  }
}<p>Dans cet exemple, le champ "titre" a un facteur d'amplification de 3, ce qui signifie qu'il est trois fois plus important que le champ "description" pour déterminer le score de recherche.</p><h3>4. Combinaison de requêtes avec différents facteurs d'amplification</h3><p>Vous pouvez également combiner plusieurs requêtes avec différents facteurs d'augmentation à l'aide d'une requête bool. Cela vous permet d'affiner l'importance de chaque champ dans les résultats de la recherche. Voici un exemple de requête bool avec différents facteurs de boost appliqués aux champs "titre" et "description" :</p>{
  "query": {
    "bool": {
      "should": [
        {"match": {"title": {"query": "example", "boost": 3}}},
        {"match": {"description": {"query": "example", "boost": 1}}}
      ]
    }
  }
}<p>Dans cet exemple, le champ "titre" a un facteur d'amplification de 3, tandis que le champ "description" a un facteur d'amplification de 1.</p><h2>Conclusion</h2><p>La recherche par deux champs dans Elasticsearch peut être réalisée à l'aide de techniques avancées telles que les requêtes à correspondances multiples, les requêtes bool et l'augmentation du nombre de champs au moment de la requête. En combinant ces techniques, vous pouvez créer des résultats de recherche plus précis et plus pertinents pour vos utilisateurs. Expérimentez différentes combinaisons de requêtes et de facteurs de stimulation pour trouver la configuration de recherche optimale pour votre cas d'utilisation spécifique.</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[Les bases]]></category>
    <category><![CDATA[Query 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[Utilisation de la taille du tas d'Elasticsearch et collecte des déchets de la JVM]]></title>
    <description><![CDATA[Exploration de l'utilisation de la taille du tas d'Elasticsearch et de la collecte des déchets de la JVM, y compris les meilleures pratiques et la manière de résoudre les problèmes lorsque l'utilisation de la mémoire du tas est trop élevée ou lorsque les performances de la JVM ne sont pas optimales.]]></description>
    <content:encoded><![CDATA[<p>La taille du tas est la quantité de RAM allouée à la machine virtuelle Java d'un nœud Elasticsearch.</p><p>Depuis la version 7.11, Elasticsearch définit par défaut automatiquement la taille du tas de la JVM en fonction des rôles et de la mémoire totale d'un nœud. L'utilisation du dimensionnement par défaut est recommandée pour la plupart des environnements de production. Toutefois, si vous souhaitez définir manuellement la taille du tas de votre JVM, vous devez en règle générale définir -Xms et -Xmx sur la MÊME valeur, soit 50% de votre RAM totale disponible, avec un maximum (approximatif) de 31 Go.</p><p>Une taille de tas plus importante permet à votre nœud de disposer de plus de mémoire pour les opérations d'indexation et de recherche. Cependant, votre nœud a également besoin de mémoire pour la mise en cache, de sorte que l'utilisation de 50% maintient un équilibre sain entre les deux. Pour cette même raison, en production, vous devez éviter d'utiliser d'autres processus gourmands en mémoire sur le même nœud qu'Elasticsearch.</p><p>En règle générale, l'utilisation du tas suit un schéma en dents de scie, oscillant entre 30 et 70% du tas maximum utilisé. En effet, la JVM augmente régulièrement le pourcentage d'utilisation du tas jusqu'à ce que le processus de ramassage des ordures libère à nouveau de la mémoire. Une forte utilisation du tas se produit lorsque le processus de ramassage des ordures n'arrive pas à suivre. Un indicateur d'une utilisation élevée du tas est lorsque le ramasse-miettes est incapable de réduire l'utilisation du tas à environ 30%.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt03908d8eea824755/6a17dbe63e03d71e314f2b3e/0a17a67cc589a3c1fbf9e918eadc119df7bd7619-858x278.png" alt="" /><p>Dans l'image ci-dessus, vous pouvez voir une dent de scie normale du tas de la JVM.</p><p>Vous verrez également qu'il existe deux types de ramassage d'ordures, le jeune et l'ancien GC.</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>Dans une JVM en bonne santé, le ramassage des ordures devrait idéalement répondre aux conditions suivantes :</p><ul><li><p>Le jeune GC est traité rapidement (dans les 50 ms).</p></li><li><p>Le jeune GC n'est pas exécuté fréquemment (environ 10 secondes).</p></li><li><p>L'ancienne CG est traitée rapidement (en moins d'une seconde).</p></li><li><p>L'ancienne CG n'est pas exécutée fréquemment (une fois toutes les 10 minutes ou plus).</p></li></ul><h3><strong>Comment résoudre le problème d'une utilisation trop importante de la mémoire du tas ou d'une performance non optimale de la JVM ?</strong></h3><p>Plusieurs raisons peuvent expliquer l'augmentation de l'utilisation de la mémoire du tas :</p><h4><strong>La surexploitation</strong></h4><p>Veuillez consulter le document sur le surdimensionnement <a href="https://www.elastic.co/docs/deploy-manage/production-guidance/optimize-performance/size-shards#sizing-shard-guidelines">ici.</a></p><h4><strong>Grandes tailles d'agrégation</strong></h4><p>Afin d'éviter des agrégations trop importantes, limitez au maximum le nombre d'agrégats (taille) dans vos requêtes.</p>GET /_search
{
   "aggs" : {
       "products" : {
           "terms" : {
               "field" : "product",
               "size" : 5
                          }
       }
   }
}<p>Vous pouvez utiliser la journalisation lente des requêtes (slow logs) et la mettre en œuvre sur un index spécifique en procédant comme suit.</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>Les requêtes qui prennent beaucoup de temps pour donner des résultats sont probablement celles qui consomment beaucoup de ressources.</p><h4><strong>Taille excessive de l'index en vrac</strong></h4><p>Si vous envoyez des requêtes volumineuses, cela peut être la cause d'une consommation élevée de la mémoire vive. Essayez de réduire la taille des demandes d'index en vrac.</p><h4><strong>Questions de cartographie</strong></h4><p>En particulier, si vous utilisez "fielddata : true", cela peut être un utilisateur majeur de la mémoire vive de votre JVM.</p><h4><strong>La taille du tas n'est pas correctement définie</strong></h4><p>La taille du tas peut être définie manuellement par :</p><p>Définition de la variable d'environnement :</p>ES_JAVA_OPTS="-Xms2g -Xmx2g"<p>Édition du fichier jvm.options dans le répertoire de configuration d'Elasticsearch :</p>-Xms2g
-Xmx2g<p>Le paramètre de la variable d'environnement est prioritaire sur le paramètre du fichier.</p><p>Il est nécessaire de redémarrer le nœud pour que le réglage soit pris en compte.</p><h4><strong>Le nouveau ratio de la JVM n'est pas correctement défini</strong></h4><p>Il n'est généralement PAS nécessaire de définir cette valeur, car Elasticsearch le fait par défaut. Ce paramètre définit le ratio de l'espace disponible pour les objets de "nouvelle génération" et d'"ancienne génération" dans la JVM.</p><p>Si vous constatez que les anciens GC deviennent très fréquents, vous pouvez essayer de définir spécifiquement cette valeur dans le fichier jvm.options de votre répertoire de configuration Elasticsearch.</p>-XX:NewRatio=3<h3><strong>Quelles sont les meilleures pratiques pour gérer l'utilisation de la taille du tas et la collecte des déchets de la JVM dans un grand cluster Elasticsearch ?</strong></h3><p>Les meilleures pratiques pour gérer l'utilisation de la taille du tas et le ramassage des ordures de la JVM dans un grand cluster Elasticsearch consistent à s'assurer que la taille du tas est fixée à un maximum de 50% de la RAM disponible et que les paramètres du ramassage des ordures de la JVM sont optimisés pour le cas d'utilisation spécifique. Il est important de surveiller la taille du tas et les mesures du ramassage des ordures pour s'assurer que le cluster fonctionne de manière optimale. Plus précisément, il est important de surveiller la taille du tas de la JVM, le temps de ramassage des ordures et les pauses de ramassage des ordures. En outre, il est important de surveiller le nombre de cycles de ramassage des ordures et le temps passé à les effectuer. En surveillant ces mesures, il est possible d'identifier tout problème potentiel lié à la taille du tas ou aux paramètres du ramassage des ordures et de prendre des mesures correctives si nécessaire.</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[Les bases]]></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[Comment augmenter le nombre de shards primaires dans Elasticsearch ?]]></title>
    <description><![CDATA[Apprenez à augmenter le nombre de partitions primaires dans Elasticsearch à l’aide des API split et reindex pour un dimensionnement optimal des partitions.]]></description>
    <content:encoded><![CDATA[<p>Il n'est pas possible d'augmenter le nombre de shards primaires d'un index existant, ce qui signifie qu'un index doit être recréé si vous souhaitez augmenter le nombre de shards primaires. Deux méthodes sont généralement utilisées dans ces situations : l'API _reindex et l'API _split.</p><p>L'API _split est souvent plus rapide que l'API _reindex. L<strong>'indexation</strong> <strong>doit être arrêtée</strong> avant les deux opérations, sinon les comptes des documents source_index et cible_index seront différents.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt46dd6abe0e6fe1eb/6a17e368148009d6a7b486d3/aa0ae010c2f5691ca00440fb453ed6b47bacd24f-1200x628.png" alt="Augmenter le nombre de partitions dans Elasticsearch en recréant un index" /><h2>Méthode 1 - utilisation de l'API fractionnée</h2><p>L'API de fractionnement est utilisée pour créer un nouvel index avec le nombre souhaité d'unités primaires en copiant les paramètres et en mappant un index existant. Le nombre désiré de fragments primaires peut être défini lors de la création. Les paramètres suivants doivent être vérifiés avant de mettre en œuvre l'API fractionnée :</p><ol><li><p>L'index source doit être en lecture seule. Cela signifie que le processus d'indexation doit être arrêté.</p></li><li><p>Le nombre de groupes primaires dans l'index cible doit être un multiple du nombre de groupes primaires dans l'index source. Par exemple, si l'index source dispose de 5 groupes primaires, les groupes primaires de l'index cible peuvent être définis comme suit : 10, 15, 20, et ainsi de suite.</p></li></ol><p>Remarque : si seul le numéro du fonds primaire doit être modifié, il est préférable d'utiliser l'API de fractionnement, qui est beaucoup plus rapide que l'API de réindexation.</p><h3>Mise en œuvre de l'API fractionnée</h3><p>Créer un index de test :</p>POST test_split_source/_doc
{
  "test": "test"
}<p>L'index source doit être en lecture seule pour pouvoir être scindé :</p>PUT test_split_source/_settings
{
  "index.blocks.write": true
}<p>Les paramètres et les correspondances seront copiés automatiquement à partir de l'index source :</p>POST /test_split_source/_split/test_split_target
{
  "settings": {
    "index.number_of_shards": 3
  }
}<p>Vous pouvez vérifier l'état d'avancement avec :</p>GET _cat/recovery/test_split_target?v&amp;h=index,shard,time,stage,files_percent,files_total<p>Étant donné que les paramètres et les mappages sont copiés à partir des index source, l'index cible est en lecture seule. Activons l'opération d'écriture pour l'index cible :</p>PUT test_split_target/_settings
{
    "index.blocks.write": null
}<p>Vérifier les index source et cible docs.count avant de supprimer l'index original :</p>GET _cat/indices/test_split*?v&amp;h=index,pri,rep,docs.count<p>Le nom de l'index et le nom de l'alias ne peuvent pas être identiques. Vous devez supprimer l'index source et ajouter le nom de l'index source comme alias à l'index cible :</p>DELETE test_split_source
PUT /test_split_target/_alias/test_split_source<p>Après avoir ajouté l'alias <strong>test_split_source</strong> à l'index <strong>test_split_target</strong>, vous devez le tester avec :</p>GET test_split_source
POST test_split_source/_doc
{
  "test": "test"
}<h2>Méthode 2 - utilisation de l'API de réindexation</h2><p>En créant un nouvel index à l'aide de l'API Reindex, il est possible d'indiquer n'importe quel nombre de comptes de tessons primaires. Après la création d'un nouvel index avec le nombre prévu de groupes primaires, toutes les données de l'index source peuvent être réindexées sur ce nouvel index.</p><p>Outre les fonctionnalités de l'API fractionnée, les données peuvent être manipulées à l'aide de la ligne de conduite ingest_pipeline dans l'API de réindexation. Avec le pipeline d'ingestion, seuls les champs spécifiés qui correspondent au filtre seront indexés dans l'index cible à l'aide de la requête. Le contenu des données peut être modifié à l'aide d'un script simple, et plusieurs index peuvent être fusionnés en un seul.</p><h3>Mise en œuvre de l'API de réindexation</h3><p>Créer un test de réindexation :</p>POST test_reindex_source/_doc
{
    "test": "test"
}<p>Copier les paramètres et les mappages de l'index source :</p>GET test_reindex_source<p>Créez un index cible avec des paramètres, des mappings et le nombre de tiroirs souhaité :</p>PUT test_reindex_target
{
  "mappings" : {},
  "settings": {
    "number_of_shards": 10,
    "number_of_replicas": 0,
    "refresh_interval": -1
  }
}<p>*Remarque : les paramètres number_of_replicas : 0 et refresh_interval : -1 augmentera la vitesse de réindexation.</p><p>Lancer le processus de réindexation. Les paramètres requests_per_second=-1 et slices=auto permettent d'ajuster la vitesse de réindexation.</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>Vous verrez l'identifiant de la tâche lorsque vous exécuterez l'API de réindexation. Copiez-le et vérifiez avec l'API _tasks :</p>GET _tasks/&lt;task_id&gt;<p>Mettre à jour les paramètres une fois la réindexation terminée :</p>PUT test_reindex_target/_settings
{
  "number_of_replicas": 1,
  "refresh_interval": "1s"
}<p>Vérifiez les index source et cible docs.count avant de supprimer l'index original, ils doivent être identiques :</p>GET _cat/indices/test_reindex_*?v&amp;h=index,pri,rep,docs.count<p>Le nom de l'index et le nom de l'alias ne peuvent pas être identiques. Supprimer l'index source et ajouter le nom de l'index source comme alias à l'index cible :</p>DELETE test_reindex_source
PUT /test_reindex_target/_alias/test_reindex_source<p>Après avoir ajouté l'alias test_split_source à l'index test_split_target, testez-le en utilisant :</p>GET test_reindex_source<h2>Résumé</h2><p>Si vous souhaitez augmenter le nombre de tessons primaires d'un index existant, vous devez recréer les paramètres et les correspondances avec un nouvel index. Il existe deux méthodes principales pour ce faire : l'API de réindexation et l'API de scission. L'indexation active doit être arrêtée avant d'utiliser l'une ou l'autre méthode.</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[Les bases]]></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[Comment migrer des données entre différentes versions d'Elasticsearch & entre clusters]]></title>
    <description><![CDATA[Exploration des méthodes de transfert de données entre les versions et les clusters d'Elasticsearch.]]></description>
    <content:encoded><![CDATA[<p>Lorsque vous souhaitez mettre à niveau un cluster Elasticsearch, il est parfois plus facile de créer un nouveau cluster séparé et de transférer les données de l'ancien cluster vers le nouveau. Les utilisateurs ont ainsi l'avantage de pouvoir tester toutes leurs données et configurations sur le nouveau cluster avec toutes leurs applications sans risque d'interruption ou de perte de données.</p><p>Les inconvénients de cette approche sont qu'elle nécessite une certaine duplication du matériel et qu'elle peut créer des difficultés lors du transfert et de la synchronisation de toutes les données.</p><p>Il peut également être nécessaire d'effectuer une procédure similaire si vous devez migrer des applications d'un centre de données à un autre.</p><p>Dans cet article, nous allons discuter et détailler trois façons de transférer des données entre les clusters Elasticsearch.</p><p><strong>Comment migrer des données entre clusters Elasticsearch ?</strong></p><p>Il existe trois façons de transférer des données entre les clusters Elasticsearch :</p><ol><li><p><a href="https://www.elastic.co/fr/search-labs/blog/elasticsearch-migrate-data-versions-clusters#1.-reindexing-data-from-a-remote-cluster">Réindexation à partir d'un cluster distant</a></p></li><li><p><a href="https://www.elastic.co/fr/search-labs/blog/elasticsearch-migrate-data-versions-clusters#2.-transferring-data-using-snapshots">Transfert de données à l'aide d'instantanés</a></p></li><li><p><a href="https://www.elastic.co/fr/search-labs/blog/elasticsearch-migrate-data-versions-clusters#3.-transferring-data-using-logstash">Transférer des données avec Logstash</a></p></li></ol><p>L'utilisation d'instantanés est généralement le moyen le plus rapide et le plus fiable de transférer des données. Toutefois, n'oubliez pas que vous ne pouvez restaurer un instantané que sur un cluster de version égale ou supérieure et jamais avec une différence de plus d'une version majeure. Cela signifie que vous pouvez restaurer un snapshot 6.x sur un cluster 7.x mais pas sur un cluster 8.x.</p><p>Si vous avez besoin d'augmenter de plus d'une version majeure, vous devrez réindexer ou utiliser Logstash.</p><p>Examinons maintenant en détail chacune des trois options de transfert de données entre clusters Elasticsearch.</p><h2>1. Réindexation des données d'un cluster distant</h2><p>Avant de commencer à réindexer, n'oubliez pas que vous devrez configurer les mappages appropriés pour tous les index sur le nouveau cluster. Pour ce faire, vous devez soit créer les index directement avec les mappings appropriés, soit utiliser des modèles d'index.</p><h3>Réindexation à distance - configuration requise</h3><p>Pour réindexer à distance, vous devez ajouter la configuration ci-dessous au fichier elasticseearch.yml pour le cluster qui reçoit les données, qui, dans les systèmes Linux, est généralement situé ici : /etc/elasticsearch/elasticsearch.yml. La configuration à ajouter est la suivante :</p>reindex.remote.whitelist: "192.168.1.11:9200"<p>Si vous utilisez SSL, vous devez ajouter le certificat CA à chaque nœud et inclure ce qui suit dans la commande pour chaque nœud dans elasticsearch.yml :</p>reindex.ssl.certificate_authorities: “/path/to/ca.pem”<p>Vous pouvez également ajouter la ligne ci-dessous à tous les nœuds Elasticsearch afin de désactiver la vérification SSL. Toutefois, cette approche est moins recommandée car elle n'est pas aussi sûre que l'option précédente :</p>reindex.remote.whitelist: "192.168.1.11:9200"
reindex.ssl.verification_mode: none
systemctl restart elasticsearch service <p>Vous devrez effectuer ces modifications sur chaque nœud et procéder à un redémarrage progressif. Pour plus d'informations sur la manière de procéder, veuillez consulter <a href="https://www.elastic.co/fr/guide/en/elasticsearch/reference/8.17/restart-cluster.html#restart-cluster-rolling">notre guide.</a></p><h3>Commande de réindexation</h3><p>Après avoir défini l'hôte distant dans le fichier elasticsearch.yml et ajouté les certificats SSL si nécessaire, vous pouvez commencer à réindexer les données avec la commande ci-dessous :</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>Il peut donc être utile de fixer des valeurs généreuses pour les délais d'attente plutôt que de se fier aux valeurs par défaut.</p><p>Examinons maintenant d'autres erreurs courantes que vous pouvez rencontrer lors d'une réindexation à distance.</p><h3>Erreurs courantes lors de la réindexation à distance</h3><h4>1. La réindexation ne figure pas sur la liste blanche</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 vous rencontrez cette erreur, cela signifie que vous n'avez pas défini l'adresse IP de l'hôte distant ou le nom du nœud DNS dans Elasticsearch comme décrit ci-dessus ou que vous avez oublié de redémarrer les services Elasticsearch.</p><p>Pour résoudre ce problème dans le cluster Elasticsearch, vous devez ajouter l'hôte distant à tous les nœuds Elasticsearch et redémarrer les services Elasticsearch.</p><h4>2. Exception relative au 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>Cette erreur signifie que vous avez oublié d'ajouter le certificat reindex.ssl.certificate_authorities à elasticsearch.yml comme décrit ci-dessus. Pour l'ajouter :</p>#elasticsearch.yml
reindex.ssl.certificate_authorities: "/path/to/ca.pem"<h2>2. Transfert de données à l'aide d'instantanés</h2><p>N'oubliez pas, comme indiqué ci-dessus, que vous ne pouvez restaurer un instantané que sur un cluster de version égale ou supérieure et jamais avec une différence de plus d'une version majeure.</p><p>Si vous avez besoin d'augmenter de plus d'une version majeure, vous devrez réindexer ou utiliser Logstash.</p><p>Les étapes suivantes sont nécessaires pour transférer des données par le biais d'instantanés :</p><p>Étape 1. Ajouter le plugin de référentiel au premier cluster Elasticsearch - Afin de transférer des données entre clusters via des snapshots, vous devez vous assurer que le référentiel est accessible à la fois depuis le nouveau et l'ancien cluster. Les référentiels de stockage en nuage tels que AWS, Google et Azure sont généralement idéaux pour cela. Pour prendre des instantanés, veuillez consulter <a href="https://www.elastic.co/fr/guide/en/elasticsearch/reference/current/snapshot-restore.html">notre guide</a> et suivre les étapes qu'il décrit.</p><p>Étape 2. Redémarrer le service Elasticsearch (rolling restart).</p><p>Étape 3. Créez un référentiel pour le premier cluster Elasticsearch.</p><p>Étape 4 - Ajouter le plugin de référentiel au deuxième cluster Elasticsearch.</p><p>Étape 5- Ajouter un référentiel en lecture seule au deuxième cluster Elasticsearch - Vous devrez ajouter un référentiel en répétant les mêmes étapes que celles que vous avez suivies pour créer le premier cluster Elasticsearch.</p><p>Remarque importante : lorsque vous connectez le deuxième cluster Elasticsearch au même référentiel AWS S3, vous devez définir le référentiel comme un référentiel en lecture seule :</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>C'est important parce que vous voulez éviter le risque de mélanger les versions d'Elasticsearch dans le même dépôt d'instantanés.</p><p>Étape 6 - Restauration des données vers le deuxième cluster Elasticsearch - Après avoir suivi les étapes ci-dessus, vous pouvez restaurer les données et les transférer vers le nouveau cluster. Veuillez suivre les étapes décrites dans <a href="https://www.elastic.co/fr/guide/en/elasticsearch/reference/current/snapshot-restore.html">cet article</a> pour restaurer les données dans le nouveau cluster. </p><h2>3. Transfert de données à l'aide de Logstash</h2><p>Avant de commencer à transférer les données avec logstash, n'oubliez pas que vous devrez configurer les mappings appropriés pour tous les index sur le nouveau cluster. Pour ce faire, vous devrez soit créer les index directement, soit utiliser des modèles d'index.</p><p>Pour transférer des données entre deux clusters Elasticsearch, vous pouvez configurer un serveur Logstash temporaire et l'utiliser pour transférer vos données entre les deux clusters. Pour les petits clusters, une instance de 2 Go de mémoire vive devrait suffire. Pour les clusters plus importants, vous pouvez utiliser des CPU à quatre cœurs avec 8 Go de RAM.</p><p>Pour des conseils sur l'installation de Logstash, <a href="https://www.elastic.co/fr/guide/en/logstash/current/installing-logstash.html">voir ici.</a></p><h3>Configuration de Logstash pour le transfert de données d'un cluster à l'autre</h3><p>La configuration de base pour copier un index unique du cluster A vers le cluster B est la suivante :</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>Pour sécuriser elasticsearch, vous pouvez utiliser la configuration ci-dessous :</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>Métadonnées de l'index</h3><p>Les commandes ci-dessus écrivent dans un seul index nommé. Si vous souhaitez transférer plusieurs index et préserver les noms d'index, vous devez ajouter la ligne suivante à la sortie de Logstash :</p>index =&gt; "%{[@metadata][_index]}"<p>De même, si vous souhaitez conserver l'identifiant original du document, vous devrez ajouter :</p>document_id =&gt; "%{[@metadata][_id]}"<p>Gardez à l'esprit que la définition de l'ID du document ralentira considérablement le transfert des données, aussi ne conservez-vous l'ID d'origine que si vous en avez besoin.</p><h2>Synchronisation des mises à jour</h2><p>Toutes les méthodes décrites ci-dessus prennent un temps relativement long, et il se peut que des données aient été mises à jour dans le cluster d'origine en attendant la fin du processus.</p><p>Il existe plusieurs stratégies pour permettre la synchronisation des mises à jour qui ont pu avoir lieu pendant le processus de transfert des données, et vous devriez réfléchir à ces questions avant d'entamer ce processus. Vous devez notamment réfléchir aux points suivants :</p><ul><li><p>Quelle méthode utilisez-vous pour identifier les données qui ont été mises à jour/ajoutées depuis le début du processus de transfert de données (par exemple, un champ "last_update_time" dans les données) ?</p></li><li><p>Quelle méthode pouvez-vous utiliser pour transférer le dernier élément de données ?</p></li><li><p>Existe-t-il un risque de duplication des documents ? En général, c'est le cas, à moins que la méthode que vous utilisez ne fixe l'ID du document à une valeur connue lors de la réindexation).</p></li></ul><p>Les différentes méthodes permettant la synchronisation des mises à jour sont décrites ci-dessous.</p><h3>1. Utilisation des systèmes de file d'attente</h3><p>Certains systèmes d'ingestion/mise à jour utilisent des files d'attente qui vous permettent de "rejouer" les modifications de données reçues au cours des x derniers jours. Cela peut permettre de synchroniser les modifications effectuées. </p><h3>2. Réindexation à distance</h3><p>Répétez le processus de réindexation pour tous les éléments pour lesquels "last_update_time" &gt; a été effectué il y a x jours. Vous pouvez le faire en ajoutant un paramètre "query" à la requête de réindexation.</p><h3>3. Logstash</h3><p>Dans l'entrée Logstash, vous pouvez ajouter une requête pour filtrer tous les éléments pour lesquels "last_update_time" &gt; x jours ago. Toutefois, ce processus entraînera des doublons dans les données non chronologiques, à moins que vous n'ayez défini l'identifiant du document.</p><h3>4. Instantanés</h3><p>Il n'est pas possible de restaurer une partie seulement d'un index. Vous devez donc utiliser l'une des autres méthodes de transfert de données décrites ci-dessus (ou un script) pour mettre à jour toutes les modifications qui ont eu lieu depuis le processus de transfert de données.</p><p>Cependant, la restauration des instantanés est un processus beaucoup plus rapide que la réindexation/Logstash, il est donc possible de suspendre les mises à jour pendant une courte période de temps pendant que les instantanés sont transférés afin d'éviter le problème.</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[Les bases]]></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>