<?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[Lisa Larribas - 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[Lisa Larribas - 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/lisa-larribas</link>
    </image>
    <link>https://www.elastic.co/fr/search-labs/author/lisa-larribas</link>
    <atom:link href="https://www.elastic.co/fr/search-labs/rss/author/lisa-larribas.xml" rel="self" type="application/rss+xml"/>
    <language><![CDATA[fr]]></language>
    <lastBuildDate>Mon, 28 Sep 2026 17:12:08 GMT</lastBuildDate>
  <item>
    <title><![CDATA[Réindexation des flux de données en raison de conflits de mapping]]></title>
    <description><![CDATA[Découvrez comment résoudre les conflits de mapping Elasticsearch en réindexant les flux de données. Cet article explique le processus de réindexation et comment garantir un mapping correct des nouvelles données.]]></description>
    <content:encoded><![CDATA[<p>En cas de conflits de mapping de champs, qu'ils soient conformes à la norme Elastic Common Schema (ECS) ou spécifiques à la source de données, une réindexation des données à l'aide des outils de développement s'avère nécessaire. Ces conflits peuvent avoir un impact négatif sur les fonctions en aval après l'ingestion, entraînant potentiellement des résultats inexacts ou empêchant l'utilisation de l'ensemble des données dans des fonctionnalités telles que les visualisations, les tableaux de bord, l'application Security et les agrégations. Cet article de blog détaille les étapes de ce processus de réindexation.</p><p>Le contenu de ce blog a été développé et vérifié à l'aide des versions Elastic 9.2.8 et 8.19.14, ainsi que des versions Filestream Integration 2.3.0 et 1.2.0.</p><p><strong>Remarque importante</strong> : selon votre environnement, certaines étapes peuvent nécessiter des modifications spécifiques. De plus, sachez que les modèles dynamiques ont été supprimés du modèle de composants <code>@package</code> à compter de la version 2.3.3 de Filestream Integration.</p><p>Avant de commencer le processus de réindexation, il est important de prendre en compte l'allocation actuelle de stockage dans votre environnement. Les étapes décrites ci-dessous impliquent la création d'une copie de l'index sous-jacent existant, qui résidera temporairement dans le <a href="https://www.elastic.co/docs/manage-data/lifecycle/data-tiers">niveau hot</a>.</p><p><u><strong>Niveaux de données Elasticsearch</strong></u></p><ul><li><p><strong>Hot</strong> : le niveau hot est le point d'entrée d'Elasticsearch pour les données temporelles, stockant les données les plus récentes et les plus fréquemment recherchées. Les nœuds du niveau hot nécessitent des lectures et des écritures rapides, ce qui requiert davantage de ressources et un stockage plus rapide (SSD). Ce niveau est obligatoire et de nouveaux index de flux de données y sont automatiquement attribués.</p></li><li><p><strong>Warm</strong> : les données temporelles peuvent passer au niveau warm une fois qu'elles sont interrogées moins fréquemment que les données récemment indexées du niveau hot. Le niveau warm contient généralement les données des dernières semaines. Les mises à jour sont toujours autorisées, mais elles sont probablement peu fréquentes. Les nœuds du niveau warm n'ont généralement pas besoin d'être aussi rapides que ceux du niveau hot. Pour la résilience, les index du niveau hot doivent être configurés pour utiliser une ou plusieurs répliques.</p></li><li><p><strong>Cold</strong> : les données rarement consultées peuvent être déplacées du niveau warm vers le niveau cold. Celui-ci, tout en restant interrogeable, privilégie la réduction des coûts de stockage à la vitesse de recherche. Il est également possible d'y stocker des index classiques avec des répliques plutôt que des instantanés interrogeables, ce qui permet d'utiliser du matériel moins coûteux pour les données anciennes sans pour autant réduire l'espace disque requis par rapport au niveau warm.</p></li><li><p><strong>Frozen</strong> : les données rarement interrogées ou qui ne le sont plus passent du niveau cold au niveau frozen pour la durée restante de leur cycle de vie. Ce niveau utilise un référentiel de snapshots et des index partiellement assemblés pour stocker et charger les données, réduisant ainsi le stockage local et les coûts tout en permettant la recherche. Les recherches sur le niveau frozen sont généralement plus lentes que sur le niveau cold, car Elasticsearch peut avoir besoin de récupérer les données frozen depuis le référentiel de snapshots. Nous vous recommandons d'utiliser des nœuds dédiés au niveau frozen.</p></li></ul><h2>Prérequis : déterminer quels champs présentent des conflits</h2><p>Pour déterminer les champs qui présentent des conflits de mapping, accédez à <strong>Stack Management -&gt; Data Views -&gt; logs-*</strong> (la data view logs-* est la hiérarchie la plus élevée des données présentes avec le préfixe <em>logs-</em>). Si des conflits sont présents, un encadré jaune s'affiche. Vous pouvez cliquer sur <strong>View conflicts</strong> ou, sous la zone <strong>Field type</strong> à côté de la zone <strong>Search</strong>, sélectionnez le <strong>conflit</strong>.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt7aa17311023e1ae3/6a170feaa929cf24fbae0aa9/7d41594682b601a30a9544b8db678f118b0146ab-2048x720.png" alt="Interface affichant un modèle d'indexation des logs, avec un avertissement de conflit de mapping et une liste des types de champ. L'accent est mis sur les conflits d'affichage et les conflits de types de champs." /><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltb4106cf39e1be69b/6a170feb6f7f047b74914932/41ad800daa6fc244a1123ba7538820bff5de6788-747x182.png" alt="Ligne de tableau affichant le nom du champ log.offset avec les types keyword et long marqués comme un conflit." /><p>Cliquez sur le bouton jaune <strong>Conflict</strong> pour voir quels index sont associés à quels types de mapping.</p><p>Cette situation (où le champ est mappé à la fois en tant que <code>keyword</code> et en tant que <code>long</code>) se produit généralement parce que les données ont été ingérées avant qu'un type de mapping spécifique ait été défini dans le <a href="https://www.elastic.co/docs/manage-data/data-store/templates#component-templates">modèle de composants</a> pour le <a href="https://www.elastic.co/docs/manage-data/data-store/data-streams">flux de données</a> concerné. Dans de tels cas, Elasticsearch tente de définir le mapping en fonction de ses modèles dynamiques.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltdcec2cd42e2e858a/6a170feda929cff2e4ae0aad/9973c1935aa52292c1ace09a8e9c0b31ad99e7a2-2048x1085.png" alt="Écran affichant le champ log.offset avec un avertissement concernant les différents types et un tableau listant les index pour chaque type." /><p>Pour déterminer quel mapping est approprié pour le champ et si le champ est un champ ECS, une vérification avec la <a href="https://www.elastic.co/docs/reference/ecs/ecs-field-reference">référence des champs ECS</a> est nécessaire. Si le champ en question n'est pas un champ ECS, sa valeur doit être examinée pour déterminer le mapping approprié.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltc22eb597f97cbb24/6a170feed7c02291c5de657c/3c77d0a1520bd1ad17e7ffa1480ecf5e224953e1-418x360.png" alt="" /><p>Si un champ, comme <code>log.offset</code> dans cet exemple, n'est pas documenté dans l'ECS, les étapes suivantes consistent à examiner la valeur du champ, à déterminer quel type de mapping conflictuel possède le plus d'index sous-jacents, et à examiner les modèles de composants des autres index.</p><p>En général, le type de mapping associé au plus grand nombre d'index est le bon, mais nous vous recommandons de vérifier la valeur du champ concerné pour le confirmer. Pour confirmer la validité d'un type de mapping (par exemple, <code>long</code>), vous devez également vérifier que la valeur du champ est appropriée pour ce type. Cette vérification peut être effectuée en utilisant <strong>Discover </strong>pour rechercher le champ en question. L'examen d'autres flux de données contenant le même champ peut également apporter une confirmation supplémentaire.</p><p>Pour examiner les valeurs présentes pour le champ qui présente le problème de mapping, revenez au bouton jaune <strong>Conflict </strong>indiqué précédemment, cliquez sur le bouton <strong>Conflict</strong>, sélectionnez l'un des index sous-jacents et collez-le dans une session <strong>Discover </strong>. Votre instruction Kibana Query Language (KQL) devrait ressembler à la capture d'écran suivante, pour inclure le délimiteur de champ <strong><code>_index</code></strong><strong>:</strong>.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt4b1966dbd35b7264/6a170ff00c4857919a01ab52/781f63b34a9abd427ceb896484da29af446e3326-2048x1063.png" alt="Écran affichant le champ log.offset avec un avertissement concernant un conflit de type, ainsi qu'un tableau listant les index pour chaque type." /><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltdf3bb65faeb1e94b/6a170ff214b2701bfbe3c6c3/b7b0cb847c1694ab605c61a538722f5be004ec86-2048x909.png" alt="Écran affichant un histogramme temporel et un tableau des entrées de log comportant des horodatages et des valeurs log.offset." /><h2>Préparation du nouveau modèle de composants personnalisé d'index sous-jacent</h2><p>Pour résoudre le conflit de mapping dans le flux de données, examinez d'abord le modèle de composants <code>@package</code> pertinent. Vous trouverez ceci sous <strong>Stack Management -&gt; Index Management -&gt; Component Template</strong>. Cherchez le flux de données et sélectionnez le lien <code>@package</code> correspondant. Ce modèle contient des mappings prêts à l'emploi pour les champs et, bien que les incohérences de mapping soient rares, il est possible que le type le plus approprié ait été ignoré.</p><p>Vérifiez le modèle pour vous assurer qu'il contient l'imbrication et le mapping de champs nécessaires pour le champ en question. Par exemple, si le modèle liste <code>log.offset</code> comme <code>keyword</code> par erreur, la source du problème est ici.</p><p><strong>Important</strong> : comme il n'est pas recommandé de modifier les modèles <code>@package</code>/managed, vous devez utiliser ou créer un modèle de composants <code>@custom</code> pour corriger le type de mapping (par exemple, pour <code>log.offset</code>) pour toutes les données futures.</p><ul><li><p>Nous ne recommandons pas de modifier les modèles <code>@package</code>/managed, car lorsque vous mettrez à jour l'intégration vers une version plus récente, toutes les modifications que vous apporterez au modèle <code>@package</code> seront remplacées. C'est pourquoi nous recommandons d'utiliser les modèles <code>@custom</code>.</p></li><li><p>Si un flux de données rencontre des conflits de mapping, vous devez ajouter tous les champs manquants (imbrications ou mappings ECS et non-ECS) au modèle de composants <code>@custom</code> du flux de données. Créez ce modèle s'il n'existe pas encore et veillez à spécifier le type de mapping correct pour le champ.</p></li><li><p>Si plusieurs conflits sont présents dans votre data view, appliquez simultanément tous les mappings manquants nécessaires au flux de données afin que la réindexation ne soit effectuée qu'une seule fois. L'ajout d'entrées pour le typage correct des données dans le modèle de composants <code>@custom</code> garantira que toute ingestion ultérieure de données suivra les mêmes règles de mapping.</p></li></ul><p>Pour créer le modèle de composants <code>@custom</code> (ou vérifier qu'il est utilisé et renseigné), accédez ) <strong>Index Templates</strong>, saisissez le nom du flux de données en question et cliquez sur le modèle <code>@custom</code> approprié utilisé par le flux de données. Si le modèle n'est pas encore créé, une case jaune apparaît, vous permettant de le créer via l'interface utilisateur.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt17b6cb8aa8f905c2/6a170ff4964cea702708bc97/bea7cb172227bebc28146e3f2f016e112f34cba5-2048x720.png" alt=" Écran affichant un modèle d'index avec son résumé, son modèle d'index, sa valeur de priorité, son paramètre de flux de données et une liste de modèles de composants, l'accent étant mis sur l'entrée logs‑filestream.generic@custom." /><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltf5b67199089093f4/6a170ff5d7c0220575de6580/e8f63a2e396efbe7f1e62dc08a137a22700be484-2048x296.png" alt=" Écran montrant l'interface de gestion des index, l'onglet &quot;Modèles de composants&quot; étant sélectionné, et une note indiquant que le modèle personnalisé n'existe pas. L'option &quot;Créer un modèle de composants&quot; est sélectionnée." /><p>La capture d'écran ci-dessous montre la page suivante après que l'option <strong>Create component template</strong> a été sélectionnée. Laissez les paramètres par défaut tels quels sur la première page et cliquez sur <strong>Mappings</strong> ou <strong>Next</strong> jusqu'à atteindre la page <strong>Mappings</strong>.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltca2924bc41cac541/6a170ff7dc55decfd6e00ec5/822f1d864302aa4be438c13756b8372f43fa1b0d-2048x1275.png" alt="" /><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltee1067cb282ae0af/6a170ff82b835f55bff4b2e5/affa2f1214af516a5a6b571ab813628ed7649275-2048x1235.png" alt="Modèles de mappings" /><p>Pour définir explicitement le mapping d'un nouveau champ entrant ou pour mettre à jour un champ présentant un conflit de mapping, lorsque le flux de données est réinitialisé en raison d'une configuration définie dans la politique de cycle de vie de l'index, une entrée est nécessaire pour le champ dans lequel le conflit existe.</p><p>La procédure suivante permet de définir le mapping du champ <code>log.offset</code> dans le modèle de composants <code>@custom</code> pour le flux de données filestream. Répétez les étapes pour ajouter des champs personnalisés ou mettre à jour les champs nécessaires du <code>@package</code> avec les mappings appropriés, si nécessaire, pour cet ensemble de données. Dans cet exemple, en définissant le décalage sur <code>Long</code>, le type de champ sera <code>Numeric</code> et le type numérique sera <code>Long</code>. Cliquez sur <strong>Add field</strong>, puis en dehors de la zone pour continuer.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltee1067cb282ae0af/6a170ff82b835f55bff4b2e5/affa2f1214af516a5a6b571ab813628ed7649275-2048x1235.png" alt="Écran montrant l'interface de création du modèle de composants avec l'étape &quot;mapping&quot; sélectionnée dans le workflow." /><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt611a10bd7567d211/6a170ffa964cea257008bc9d/ea2975ee4e40ac0e10c4170d2a23125101f7f8da-2048x1136.png" alt=": Écran affichant l'interface de création de modèles de composants avec l'étape &quot;Mappings&quot; sélectionnée dans le workflow" /><p>Une fois tous les champs nécessaires ajoutés, cliquez pour vérifier, puis sélectionnez <strong>Create component template</strong> lorsque vous êtes prêt. <code>log.offset</code> sera défini sur <code>long</code> pour toutes les nouvelles données ingérées à partir de cette étape.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt3a0c86021cc53e0e/6a170ffcc1e8a57703f8839f/bdf8b8290b0c064c9d88990194b15232ffe85709-2048x1027.png" alt=" Révision d'un modèle Elasticsearch" /><h2>Création de la nouvelle structure de l'index sous-jacent</h2><p>Le nouvel index sous-jacent doit comporter les mappings existants du modèle de composants du flux de données, ainsi que le modèle de composants ECS <code>ecs@mappings</code>. Le modèle de composants <code>ecs@mappings</code> est appliqué après le composant du flux de données en tant que catchall pour les mappings supplémentaires qui n'ont potentiellement pas été capturés dans les modèles de composants précédents.</p><p>Accédez à l'onglet navigateur pour les mappings <code>@package</code> du flux de données. (<strong>Stack Management -&gt; Index Management -&gt; Component Template -&gt; </strong><strong><code>logs-filestream.generic@package</code></strong><strong> -&gt; Manage -&gt; Edit</strong>.) Une fois sur place, cliquez sur la section <strong>Review</strong>, puis sur <strong>Request</strong>, et enfin sur le bouton <strong>Copy</strong> à droite. Le contenu JSON du modèle de composants copié garantit la conservation des mappings de champs et des paramètres restants pendant la mise à jour du mapping de champ <code>log.offset</code>. Ce JSON constituera la structure sous-jacente de l'index nouvellement réindexé.</p><p><strong>Important</strong> : si le JSON du modèle n'avait pas été copié et que l'opération de réindexation se soit poursuivie, le conflit <code>log.offset</code> aurait été résolu, mais de nouveaux conflits seraient survenus avec l'intégration, car l'intégrité des mappings actuels n'a pas été respectée, créant un double travail pour résoudre le problème initial.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt1de7b9b0e375867e/6a170ffd8b73cb61f318a0f7/402b0431b0e19374e9b28a4374ed51dfa5fa44ba-2048x897.png" alt="Écran montrant l'interface de création d'un modèle de composants avec l'étape de révision sélectionnée dans le workflow. " /><p>Ouvrez un deuxième onglet de navigateur, accédez aux outils de développement et collez le contenu copié. Ensuite, pour nettoyer ce qui a été collé :</p><p><strong>Modifications de la demande</strong></p><p><strong>1. Nom de l'index</strong> : remplacez <code>_component_template/logs-filestream.generic@package</code> par le nom de l'index sous-jacent que vous souhaitez réindexer, en ajoutant <code>-1</code> à la fin. Par exemple, utilisez <code>PUT &lt;backing index to reindex&gt;-1</code>.</p><ul><li><p>Le <code>-1</code> ajouté indique une réindexation et ne sera pas en conflit avec les paramètres de substitution ILM par défaut, qui sont basés sur la date de création de l'index.</p></li></ul><p><strong>2. Paramètres</strong> : supprimez la ligne <code>"template"</code> (ligne 3), ainsi que la toute dernière accolade fermante de l'ensemble de la charge utile JSON ; la ligne 3 doit commencer par <code>"settings": {</code>.</p><ul><li><p>Remplacez le contenu interne de la section des paramètres par <code>"index.codec": "best_compression"</code>. Cette action appliquera la meilleure compression d'Elastic à l'index lors de sa création.</p></li><li><p>Ajoutez <code>"index.lifecycle.name": "logs"</code>, ainsi qu'une ligne pour <code>"index.lifecycle.rollover_alias": ""</code>.</p><ol><li><p>L'entrée <code>"index.lifecycle.name": "logs"</code> appliquera la politique ILM des logs au nouvel index sous-jacent. Modifiez le nom de la politique ILM si vous n'utilisez pas de logs.</p></li><li><p>Le <code>"index.lifecycle.rollover_alias": ""</code> est vide, car cet index sous-jacent ne sera par reconduit ; ce paramètre est néanmoins nécessaire pour éviter les erreurs de substitution ILM dans la phase ILM qui suit la phase hot.</p></li></ol></li></ul><p><strong>3. Structure</strong> : la requête doit désormais inclure à la fois une section <code>Settings</code> et une section <code>Mappings</code>. Dans <code>"mappings": {</code>, vous devriez trouver <code>"dynamic_templates"</code> et une section <code>"properties"</code> contenant des champs codés en dur et leurs mappings.</p><p><strong>4. Modification des modèles dynamiques</strong> : la section des modèles dynamiques actuels contient des entrées de champs qui peuvent être remplacés lorsque les modèles dynamiques <code>ecs@mappings </code> sont ajoutés ensuite, ce qui génère une redondance et des lignes supplémentaires qui ne sont pas nécessaires.</p><ul><li><p>Supprimez toutes les sections de <code>"dynamic_templates"</code> sauf la deuxième intitulée <code>"_embedded_ecs-data_stream_to_constant": {</code>.</p></li><li><p>Répétez le même processus que celui décrit ci-dessus, en rassemblant les mappings dynamiques pour le modèle de composants <code>@package</code>, mais cette fois-ci les mappings dynamiques pour le modèle de composants <code>ecs@mappings</code>.</p><ul><li><p>Il peut être plus simple de copier l'intégralité du contenu des mappings depuis l'interface utilisateur pour le modèle de composants <code>ecs@mappings</code>, de coller dans la section Dev Tools <code>dynamic_templates</code> fonctionnelle, et de supprimer les lignes dupliquées et inutiles là où c'est approprié. Incluez ces contenus de paramètres de modèle dynamique après l'entrée <code>"_embedded_ecs-data_stream_to_constant": {</code>. La section <code>dynamic_templates</code> doit être très proche des exemples de contenus ci-dessous dans Dev Tools.</p></li></ul></li><li><p><strong>Si les </strong><strong><code>dynamic_templates</code></strong><strong> ne sont pas inclus/supprimés</strong>, d'autres champs (voir la capture d'écran ci-dessous) comporteront des mappings en double : <code>text</code> et <code>keyword</code> par rapport aux mappings appropriés, si la section <code>dynamic_templates</code> n'a pas été retirée. Ce qui reste devrait être la section <code>"properties"</code> sous <code>"mappings"</code>. Cela créera également des problèmes dans la data view puisque les champs ont été mappés en double (s'ils n'ont pas déjà été mappés de cette façon) et provoquera des conflits de mapping supplémentaires.</p></li></ul><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltfb7494f882d7e358/6a170fffa6c2b93e46e797d2/24e972cd0fc8eadf943b21cfdd80a5d435e705aa-2048x994.png" alt="Éditeur de code en écran partagé affichant les commandes Elasticsearch à gauche et les mappings d'index à droite. Une flèche indique le type de champ texte dans le mapping, et une autre flèche indique le type de sous-champ keyword." /><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltcaca899f8d92e72b/6a1710010c485745e901ab5a/aac13fbe882516e5ed5b5b1b5271c0ae34e80b04-1890x2048.png" alt=": Écran affichant la page de modèle d'index pour logs-* avec un avertissement concernant les conflits de mapping, mettant l'accent sur les listes de type &quot;keyword, text&quot; pour agent.ephemeral_id et agent.id dans le tableau des champs." /><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt2c692786ab74f1ca/6a171002964ceaa53c08bca1/c43d6f61c8ece4de2d51657f239a0c34ced07cdb-1928x1452.png" alt="Écran affichant la page du modèle d'indexation pour logs-* avec un avertissement concernant les conflits de mapping. Une flèche pointe vers le type indiquant &quot;ip, text&quot; pour le champ host.ip." /><p><strong>5. Suppression des métadonnées</strong> : supprimez la dernière section étiquetée <code>"_meta"</code>, ainsi que la section étiquetée <code>"version"</code>, si elle est présente.</p><p><strong>6. Formatage</strong> : indentez automatiquement les sections restantes et ajustez ou supprimez les accolades inutiles qui pourraient empêcher une exécution correcte.
</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt0906ffe338df1a9d/6a1710046f7f042aac914936/ebe1573647500de75315e7655256a0db9604c40d-2048x1402.png" alt="Éditeur de code affichant les paramètres d'index et les mappings d'Elasticsearch. Un menu déroulant est ouvert à droite, et une flèche pointe vers l'option &quot;Auto indent&quot; dans le menu." /><p><strong>7. Modification du mapping</strong> : accédez à la section <code>"properties"</code>, recherchez <code>"log"</code>, puis localisez <code>"offset"</code> imbriqué en dessous. Changez le type de <code>keyword</code> pour <code>long</code>, puis supprimez l'entrée de ligne (virgule incluse) étiquetée <code>"ignore_above": 1024,</code>. Si plus d'une entrée a été ajoutée au modèle de composants <code>@custom</code> créé précédemment, incluez-les ici.</p><p>La vue console de vos outils de développement devrait maintenant être semblable à l'exemple ci-dessous.</p>PUT .ds-logs-filestream.generic-default-2026.04.14-000001-1
{
  "settings": {
    "index.codec": "best_compression",
    "index.lifecycle.name": "logs",
    "index.lifecycle.rollover_alias": ""
  },
  "mappings": {
    "dynamic_templates": [
      {
        "_embedded_ecs-data_stream_to_constant": {
          "path_match": "data_stream.*",
          "mapping": {
            "type": "constant_keyword"
          }
        }
      },
      {
        "ecs_timestamp": {
          "mapping": {
            "ignore_malformed": false,
            "type": "date"
          },
          "match": "@timestamp"
        }
      },
      {
        "ecs_message_match_only_text": {
          "path_match": [
            "message",
            "*.message"
          ],
          "mapping": {
            "type": "match_only_text"
          },
          "unmatch_mapping_type": "object"
        }
      },
      {
        "ecs_non_indexed_keyword": {
          "path_match": [
            "*event.original"
          ],
          "mapping": {
            "index": false,
            "type": "keyword",
            "doc_values": false
          }
        }
      },
      {
        "ecs_non_indexed_long": {
          "path_match": [
            "*.x509.public_key_exponent"
          ],
          "mapping": {
            "index": false,
            "type": "long",
            "doc_values": false
          }
        }
      },
      {
        "ecs_ip": {
          "path_match": [
            "ip",
            "*.ip",
            "*_ip"
          ],
          "mapping": {
            "type": "ip"
          },
          "match_mapping_type": "string"
        }
      },
      {
        "ecs_wildcard": {
          "path_match": [
            "*.io.text",
            "*.message_id",
            "*registry.data.strings",
            "*url.path"
          ],
          "mapping": {
            "type": "wildcard"
          },
          "unmatch_mapping_type": "object"
        }
      },
      {
        "ecs_path_match_wildcard_and_match_only_text": {
          "path_match": [
            "*.body.content",
            "*url.full",
            "*url.original"
          ],
          "mapping": {
            "fields": {
              "text": {
                "type": "match_only_text"
              }
            },
            "type": "wildcard"
          },
          "unmatch_mapping_type": "object"
        }
      },
      {
        "ecs_match_wildcard_and_match_only_text": {
          "mapping": {
            "fields": {
              "text": {
                "type": "match_only_text"
              }
            },
            "type": "wildcard"
          },
          "unmatch_mapping_type": "object",
          "match": [
            "*command_line",
            "*stack_trace"
          ]
        }
      },
      {
        "ecs_path_match_keyword_and_match_only_text": {
          "path_match": [
            "*.title",
            "*.executable",
            "*.name",
            "*.working_directory",
            "*.full_name",
            "*file.path",
            "*file.target_path",
            "*os.full",
            "*email.subject",
            "*vulnerability.description",
            "*user_agent.original"
          ],
          "mapping": {
            "fields": {
              "text": {
                "type": "match_only_text"
              }
            },
            "type": "keyword"
          },
          "unmatch_mapping_type": "object"
        }
      },
      {
        "ecs_date": {
          "path_match": [
            "*.timestamp",
            "*_timestamp",
            "*.not_after",
            "*.not_before",
            "*.accessed",
            "created",
            "*.created",
            "*.installed",
            "*.creation_date",
            "*.ctime",
            "*.mtime",
            "ingested",
            "*.ingested",
            "*.start",
            "*.end",
            "*.indicator.first_seen",
            "*.indicator.last_seen",
            "*.indicator.modified_at",
            "*threat.enrichments.matched.occurred"
          ],
          "mapping": {
            "type": "date"
          },
          "unmatch_mapping_type": "object"
        }
      },
      {
        "ecs_path_match_float": {
          "path_match": [
            "*.score.*",
            "*_score*"
          ],
          "mapping": {
            "type": "float"
          },
          "path_unmatch": "*.version",
          "unmatch_mapping_type": "object"
        }
      },
      {
        "ecs_usage_double_scaled_float": {
          "path_match": "*.usage",
          "mapping": {
            "scaling_factor": 1000,
            "type": "scaled_float"
          },
          "match_mapping_type": [
            "double",
            "long",
            "string"
          ]
        }
      },
      {
        "ecs_geo_point": {
          "path_match": [
            "*.geo.location"
          ],
          "mapping": {
            "type": "geo_point"
          }
        }
      },
      {
        "ecs_flattened": {
          "path_match": [
            "*structured_data",
            "*exports",
            "*imports"
          ],
          "mapping": {
            "type": "flattened"
          },
          "match_mapping_type": "object"
        }
      },
      {
        "all_strings_to_keywords": {
          "mapping": {
            "ignore_above": 1024,
            "type": "keyword"
          },
          "match_mapping_type": "string"
        }
      }
    ],
    "properties": {
      "input": {
        "properties": {
          "type": {
            "ignore_above": 1024,
            "type": "keyword"
          }
        }
      },
      "@timestamp": {
        "ignore_malformed": false,
        "type": "date"
      },
      "ecs": {
        "properties": {
          "version": {
            "ignore_above": 1024,
            "type": "keyword"
          }
        }
      },
      "log": {
        "properties": {
          "file": {
            "properties": {
              "inode": {
                "ignore_above": 1024,
                "type": "keyword"
              },
              "path": {
                "ignore_above": 1024,
                "type": "keyword"
              },
              "device_id": {
                "ignore_above": 1024,
                "type": "keyword"
              },
              "fingerprint": {
                "index": false,
                "type": "keyword"
              }
            }
          },
          "offset": {
            "type": "long"
          },
          "level": {
            "ignore_above": 1024,
            "type": "keyword"
          }
        }
      },
      "data_stream": {
        "properties": {
          "namespace": {
            "type": "constant_keyword"
          },
          "type": {
            "type": "constant_keyword"
          },
          "dataset": {
            "type": "constant_keyword"
          }
        }
      },
      "event": {
        "properties": {
          "original": {
            "index": false,
            "type": "keyword",
            "doc_values": false
          },
          "module": {
            "type": "constant_keyword",
            "value": "filestream"
          },
          "dataset": {
            "type": "constant_keyword",
            "value": "filestream.generic"
          }
        }
      },
      "message": {
        "type": "match_only_text"
      },
      "tags": {
        "ignore_above": 1024,
        "type": "keyword"
      }
    }
  }
}<p>Une fois que votre console ressemble à l'exemple (avec tous les champs personnalisés supplémentaires inclus et les valeurs personnalisées spécifiques à votre environnement), exécutez la commande pour créer la structure du nouvel index sous-jacent, en prenant le temps de résoudre les erreurs éventuelles.</p><h2>Démarrer le processus de réindexation</h2><p>Une fois la structure du nouvel index sous-jacent correctement créée, l'étape suivante consiste à réindexer et à résoudre les conflits de mapping.</p><p><strong>Important</strong> : si l'index sous-jacent qui présente le conflit de mapping est l'index le plus récent et l'index d'écriture actuel (par exemple, si le numéro final de l'index sous-jacent est -000001), le flux de données doit être remplacé. Le remplacement du flux de données est nécessaire, car l'index d'écriture actuel, dans lequel des documents sont ingérés, est un index sous-jacent actif et ne peut pas être modifié.</p><p>Maintenant que le mapping correct a été appliqué au dernier index d'écriture via le modèle de composants <code>@custom</code> créé précédemment, tous les nouveaux documents refléteront ce changement.</p><p>Ceci s'effectue en exécutant ce qui suit : </p>POST &lt;full data stream name&gt;/_rollover<p>Par exemple : </p>POST logs-filestream.generic-default/_rollover<img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt0e0ae084fe6ade43/6a171006a6c2b91078e797d6/22abc1a2f6de0420aa0d56ac498894111df7f4fd-2048x330.png" alt="Résultat de la substitution" /><p>La réindexation consiste à copier les données d'un index sous-jacent existant vers un nouvel index dans le cadre de la même convention de dénomination, généralement pour appliquer les modifications nécessaires. Ces modifications peuvent inclure des mises à jour d'un modèle de composants ou l'ajout d'un nouveau pipeline d'ingestion pour les données à traiter.</p><p>Ensuite, les données seront copiées depuis l'index sous-jacent dont les mapping sont incorrects vers un nouvel index sous-jacent. L'index sous-jacent initial a été remplacé, ce qui signifie qu'aucun nouveau document ne peut y être ajouté. Le nouvel index sous-jacent suivra la même convention de dénomination, ce qui préserve la visibilité et l'intégrité des données tout en appliquant la politique ILM adéquate, mais il contiendra le suffixe <code>-1</code> pour indiquer qu'il a été réindexé.</p><p>Ajustez les noms d’index selon les besoins et collez le code suivant dans la console. En incluant <code>wait_for_completion=false</code>, vous pouvez suivre la progression de la copie des documents, ce qui permet d'estimer le temps de réindexation restant. Sans ce paramètre, vous ne pourrez pas suivre le statut à l'aide de la commande <code>GET _tasks</code> ci-dessous et ne pourrez vérifier le nombre de documents dans l'index de sauvegarde plus récent qu'à l'aide de la commande <code>GET &lt;backing index name&gt;-1/_count</code>.</p><p><strong>Important</strong> : en cas de problèmes pendant le processus de réindexation, ne relancez pas la commande de réindexation, car cela redémarrera le processus et créera des enregistrements en double dans l'index se terminant par <code>-1</code>. Si un redémarrage est nécessaire, supprimez d'abord l'index avec <code>-1</code> à la fin, puis exécutez la commande <code>PUT</code> précédente pour recréer le nouveau shell de l'index sous-jacent.</p>POST _reindex?wait_for_completion=false
{
  "source": {
    "index": "&lt;source backing index&gt;"
  },
  "dest": {
    "index": "&lt;new backing index&gt;-1"
  }
}

i.e.
POST _reindex?wait_for_completion=false
{
  "source": {
    "index": ".ds-logs-filestream.generic-default-2026.04.13-000001"
  },
  "dest": {
    "index": ".ds-logs-filestream.generic-default-2026.04.13-000001-1"
  }
}<img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltb30fd97a045b6008/6a171007cf4f2566d6b2d22b/22f9b1f762802ecd20faa7c7c1f76c9d1444aba5-2048x530.png" alt=" Sortie de tâche" /><p>À l'exécution, la réponse inclura un identifiant de tâche. Vous pouvez surveiller la progression de la réindexation en utilisant cet ID avec la commande : <code>GET _tasks/&lt;task ID&gt;</code>.</p><p>La durée de la réindexation dépend du volume de données dans l'index initial. L'achèvement peut être suivi en recherchant <code>"completed": true</code> lors de l'exécution de la commande <code>GET</code>, ce qui devrait produire une sortie similaire.</p><p><code>GET _tasks/&lt;task ID&gt;</code></p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt4d40766e48cc0813/6a17100960084ba9043c4642/dbf0fb0a560a78236440b8c3de68cdf5c83e6d7a-2048x824.png" alt="Résumé de la tâche" /><p>Le processus de réindexation étant maintenant terminé pour le nombre de documents, l'étape suivante consiste à vérifier que les mappings entre le nouvel index sous-jacent et le champ spécifique en question sont corrects.</p>GET &lt;backing index&gt;-1/_mapping<p>Par exemple :</p>GET .ds-logs-filestream.generic-default-2026.04.13-000001-1/_mapping<p>Vous pouvez vérifier que le mapping pour <code>log.offset</code> est conforme à celui indiqué ci-dessous. Pour confirmer que les autres champs n'ont qu'une seule entrée de mapping (et non <code>text</code> et <code>keyword</code>), comparez-les à un champ qui ne faisait pas partie de la section de modèle dynamique dans la commande <code>PUT</code> précédente.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltc156907e9635e4a9/6a17100b60084b59673c464e/db5c12c0a651e804a916d517e6e260e49a8b835a-2048x1121.png" alt=" Focus sur le mapping" /><p>Si l'index de support en cours de réindexation contient un grand nombre de documents, il est utile de vérifier l'état de ces documents copiés vers le nouvel index de support ; cela peut être fait à l'aide des deux commandes suivantes des outils de développement pour comparer les comptes.</p><p><code>GET .ds-logs-filestream.generic-default-2026.04.14-000001/_count</code></p><p><code>GET .ds-logs-filestream.generic-default-2026.04.14-000001-1/_count</code></p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltbc27c4da42ddc33d/6a17100c7d8d67e0ad70e816/a0e49ac79edb0abf9fe99d0e6fd35e96d0e3e0e5-2048x880.png" alt="" /><p>Une fois que vous avez vérifié que les nombres correspondent et que les mappings corrects sont présents, mettez à jour le flux de données pour inclure le nouvel index sous-jacent afin d'éviter que la gestion des index comporte un index sous-jacent orphelin auquel la politique ILM ne s'appliquera jamais.</p><ul><li><p>Si l'opération aboutit, une confirmation de réussite est renvoyée.</p></li></ul>POST _data_stream/_modify
{
  "actions": [
    {
      "add_backing_index": {
        "data_stream": "logs-filestream.generic-default",
        "index": ".ds-logs-filestream.generic-default-2026.04.14-000001-1"
      }
    }
  ]
}<img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt1bb6db6c761628fb/6a17100e7d8d67533770e81a/0aa3233377c0175258d37eaa661d56cf9f310d5e-2048x1288.png" alt="" /><p>Vérifiez que le nouvel index sous-jacent a été ajouté à l'aide de la commande suivante, en vous assurant que le paramètre <code>ilm_policy</code> est correct :</p>GET _data_stream/logs-filestream.generic-default<img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt7f4208ae6d7bf331/6a171010961e696241c4cfeb/af8b75cf260f6f088c28a78da86ad31527e0bfd5-2048x839.png" alt="" /><p>Vérifiez l'état ILM de l'index sous-jacent suivant avec cette commande :</p><ul><li><p>Vous constaterez que l'index est en mode hot, ce qui est normal car il a été créé très récemment (consultez la ligne 8 ou 10).</p></li></ul>GET .ds-logs-filestream.generic-default-2026.04.14-000001-1/_ilm/explain<img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt953e1a062a040311/6a171012acf0885905be9c29/cd181a31001c7a3ee2b0599a7388909ce5b50baf-2048x972.png" alt="" /><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltd398451578d070c9/6a1710140e2e492dc041a204/20f6e7632804f173533e655f0292c3c540f26597-2048x894.png" alt="" /><p>Exécutez la procédure suivante pour faire passer l'index de sauvegarde du niveau chaud au niveau approprié suivant la phase chaude de la stratégie ILM pour ce flux de données. Les valeurs spécifiques pour <code>phase</code>, <code>action</code> et <code>name</code> dans le <code>current_step</code> ci-dessous peuvent être consultées respectivement à partir des lignes 11, 13 et 15, dans la capture d’écran fournie ci-dessus.</p><p>La valeur <code>next_step</code> indique la phase ILM ou le niveau de données ultérieur auquel l'index passera.</p><p>Par exemple :</p>POST _ilm/move/.ds-logs-filestream.generic-default-2026.04.14-000001-1
{
  "current_step": {
    "phase": "hot",
    "action": "rollover", 
    "name": "check-rollover-ready"
  },
  "next_step": {
    "phase": "warm" 
  }
}<img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt246a6538585234f1/6a1710160c4857ddc001ab60/7ae60b900ce1d0b46ce26ec301901bc8a9ef750c-2048x1249.png" alt="" /><ul><li><p>Ce n'est pas nécessaire, mais par mesure de sécurité, vous pouvez exécuter à nouveau la commande <code>_ilm/explain</code> pour vous assurer que l'index sous-jacent est passé à la phase suivante et n'est plus en phase hot.</p></li></ul><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltf77bba4d9b495048/6a17101867045b3b7d45c2c1/58a460cf2ec443223ea68ba7e7166a7cf9d8c97a-2048x915.png" alt="" /><p>Lorsque les conditions suivantes sont remplies, vous pouvez supprimer en toute sécurité l'index sous-jacent initial qui présentait des conflits de mapping :</p><ol><li><p>Un nouvel index sous-jacent a été correctement créé.</p></li><li><p>Les documents ont été déplacés vers le nouvel index et le nombre de documents correspond.</p></li><li><p>Les mappings ont été corrigés (ceux spécifiques au flux de données et ceux d'ECS).</p></li><li><p>Le flux de données intègre le nouvel index sous-jacent.</p></li><li><p>La politique ILM a été appliquée et a permis à l'index de sortir de sa phase chaude.</p></li></ol><p><strong>Important</strong> : sinon, avant de supprimer l'index initial, vous pouvez consulter la page <strong>Data Views</strong>. Sélectionnez <code>logs-*</code> et vérifiez que l'index sous-jacent réindexé (qui se termine par <code>-1</code>) apparaît maintenant dans la section <strong><code>long</code></strong>. L'index sous-jacent initial devrait toujours être présent sous <strong><code>keyword</code></strong>. Si l'index sous-jacent initial réindexé ne se trouve pas dans la section <strong><code>long</code></strong>, revenez en arrière pour vérifier les étapes précédentes et effectuer les corrections nécessaires.</p><p>Par exemple :</p>DELETE .ds-logs-filestream.generic-default-2026.04.14-000001<img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt835a79be274513a3/6a17101aa929cf43c6ae0ab1/09d661b20a44929b4736a43eaa3df84180b25f30-2048x1295.png" alt="" /><p>Après avoir résolu les conflits, retournez à la page <strong>Data Views</strong> et sélectionnez <code>logs-*</code>. Si le conflit était uniquement lié à <code>log.offset</code>, aucun conflit ne devrait plus être listé. Si d'autres conflits étaient présents, l'index sous-jacent initial ne devrait plus apparaître dans la liste des conflits, et le nouvel index sous-jacent devrait désormais figurer dans la section <code>long</code>.</p><p>Vous pouvez également vérifier dans <strong>Discover</strong> que le champ <code>log.offset</code> affiche désormais les icônes appropriées.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt127cb539b70acada/6a17101ba929cfbc66ae0ab5/1c3bb7029c99aa4bc6b0931f39f5648654b35ccd-2048x1204.png" alt="" /><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltaa1eb678773c23d9/6a17101d4a531b00a636aa3b/0af1b1aa3a031c207aa5eb083696dd081d941e67-2048x1001.png" alt="" /><p>Poursuivez ce processus en répétant les étapes ci-dessus pour chaque index de sauvegarde présentant un conflit de mapping, jusqu'à ce que tous soient résolus avec succès.</p><p>Références :</p><ul><li><p><a href="https://www.elastic.co/docs/reference/ecs/ecs-field-reference">Référence de champ ECS</a></p></li><li><p><a href="https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-reindex">Réindexer les documents</a></p></li></ul><h2>Conclusions</h2><p>En suivant les étapes décrites dans cet article, vous résoudrez les conflits de mapping et vous assurerez que toutes les nouvelles données sont correctement mappées. Pour ce faire, vous lierez les modèles de composants nécessaires à votre source de données. Ce processus permet non seulement de corriger les problèmes immédiats, mais aussi d'établir une méthode sécurisée et reproductible pour gérer les modifications de schéma à mesure que vos données et vos besoins évoluent.</p>]]></content:encoded>
    <link>https://www.elastic.co/search-labs/blog/elasticsearch-mapping-conflicts-reindex-data-streams</link>
    <guid isPermaLink="true">https://www.elastic.co/search-labs/blog/elasticsearch-mapping-conflicts-reindex-data-streams</guid>
    <category><![CDATA[Opérations]]></category>
    <dc:creator><![CDATA[Lisa Larribas]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt9654eb32edb4a44a/6a17101fcdacbf0ac17d2ad8/2f2573aa3d29b3a628e4fce606c803add2641501-720x420.jpg" length="0" type="image/jpeg"/>
    <pubDate>Fri, 24 Apr 2026 00:00:00 GMT</pubDate>
  </item>
  </channel>
</rss>