Tous les produits
Search
Centre de documentation

Elasticsearch:Opérations d'écriture, de lecture et d'interrogation des documents

Dernière mise à jour :Oct 14, 2026

Une Collection respecte les conventions d'appel principales des API standard Elasticsearch pour les documents et les requêtes, et utilise _slice pour spécifier l'étendue des données métier. Les opérations les plus courantes dans le développement d'applications consistent à écrire et lire des documents, contrôler la visibilité des requêtes et définir leur étendue. Le tableau des méthodes d'accès ci-dessous répertorie chaque méthode prise en charge ainsi que ses scénarios d'utilisation.

Écriture et lecture de documents

Méthode d'accès

Scénarios

API de document unique

Opérations de création, de lecture, de mise à jour et de suppression en temps réel lorsque l'ID du document et son Slice sont connus.

Bulk

Écriture en masse de journaux ou de contenu de base de connaissances, ou écriture dans plusieurs Slices en un seul lot.

MGet

Lecture de documents provenant du même Slice ou de Slices différents en une seule requête lorsque plusieurs ID de document sont connus.

Reindex

Migration de données entre un index standard et une Collection, ou entre différentes Collections.

API de document unique :

Opération

API

Écrire ou écraser un document

PUT /{collection}/_doc/{id}?_slice={slice}

Générer automatiquement un ID de document

POST /{collection}/_doc?_slice={slice}

Créer uniquement un document

PUT /{collection}/_create/{id}?_slice={slice}

Obtenir un document

GET /{collection}/_doc/{id}?_slice={slice}

Vérifier l'existence d'un document

HEAD /{collection}/_doc/{id}?_slice={slice}

Obtenir _source

GET /{collection}/_source/{id}?_slice={slice}

Mettre à jour un document

POST /{collection}/_update/{id}?_slice={slice}

Supprimer un document

DELETE /{collection}/_doc/{id}?_slice={slice}

Respectez les règles suivantes :

  • Une requête de document unique ne peut spécifier qu'un seul Slice. N'utilisez pas de liste séparée par des virgules ni _all.

  • index, create ou update peuvent enregistrer automatiquement un Slice inexistant lorsque auto_create_slice=true est défini. Les opérations de lecture et de suppression n'enregistrent pas automatiquement les Slices ; la spécification d'un Slice inexistant renvoie une erreur HTTP 404.

  • Un document est identifié de manière unique par la combinaison de la Collection, du nom du Slice métier et de _id. Différents Slices peuvent utiliser le même _id. Lorsqu'une application lit, met à jour ou supprime un document, elle doit spécifier le Slice correspondant. Ne distinguez pas les locataires uniquement par _id.

  • Les requêtes Bulk sont soumises à un quota distinct d'enregistrement automatique de Slice, décrit dans la section Bulk.

  • wait_for_active_shards n'est pas utilisé comme condition d'attente des réplicas dans le chemin d'écriture du moteur Agent. L'actualisation en arrière-plan assure la visibilité des requêtes dans la plupart des cas. Si les données doivent être consultables avant le retour d'une requête d'écriture, utilisez refresh=wait_for dans les conditions applicables décrites plus loin.

  • Les valeurs vectorielles ne sont pas renvoyées par défaut. Les opérations de lecture et de recherche standard renvoient uniquement les champs requis par votre activité métier. Pour vérifier ou exporter des valeurs vectorielles, consultez la rubrique Lire les valeurs vectorielles à la demande.

    Dans une réponse, _index et _routing peuvent renvoyer le nom de l'index sous-jacent et l'identifiant interne du Slice généré par le système (slice_uid) au lieu du nom de la Collection et du nom du Slice métier utilisés dans la requête. Continuez à utiliser les noms métier dans les requêtes suivantes et ne transmettez pas ces valeurs internes. Pour plus d'informations, consultez la rubrique Cibles de requête et identifiants de réponse.

Actualisation et visibilité des requêtes

Pour les écritures standard, ne transmettez pas refresh. Attendez l'actualisation automatique en arrière-plan. Une écriture réussie signifie que les données sont persistées. La lecture d'un document par ID et la recherche par condition ont des comportements de visibilité différents. Les sections suivantes expliquent comment choisir la méthode de lecture et le comportement d'actualisation adaptés à votre scénario.

Confirmer une écriture par ID sans actualisation

Pour confirmer uniquement le document que vous venez d'écrire, utilisez GET ou MGet. Ces deux méthodes activent les lectures en temps réel par défaut (realtime=true), il n'est donc pas nécessaire de transmettre explicitement le paramètre ni de déclencher une actualisation manuelle. Par exemple, après la réussite d'une requête d'écriture, lisez le document avec le même Slice et le même ID de document :

GET /knowledge-chunks/_doc/chunk-1001?_slice=tenant-a

Vérifiez la valeur found renvoyée ainsi que les champs métier. Pour MGet, vérifiez chaque résultat. Les lectures en temps réel ne constituent pas une garantie de cohérence forte pendant chaque fenêtre de défaillance. Si le shard principal n'est pas disponible, ou si une migration ou un redémarrage rend temporairement la source de lecture en temps réel indisponible, GET et MGet peuvent revenir à la vue des données validées. Ils renvoient alors une version antérieure, ou retournent found=false pour un document qui n'a pas encore intégré cette vue. Dans ce cas, évaluez le résultat en fonction du résultat d'écriture et de l'état du cluster, et effectuez de nouvelles vérifications après un nombre limité de tentatives. Ne concluez pas à la perte d'une écriture sur la base d'une seule réponse indiquant que le document est introuvable.

Recherche par condition et attente de l'actualisation automatique en arrière-plan

Les requêtes Search, Count et KNN doivent attendre que les données soient consultables sur les nœuds de requête. La version du moteur Agent dispose d'un intervalle d'actualisation automatique par défaut de 5s ; vous n'avez pas besoin de le configurer lors de la création d'un index standard ou d'une Collection. La valeur par défaut pour Elasticsearch traditionnel avec état est de 1s. Le délai réel avant que les données deviennent consultables dépend également de la publication des données, du chargement des nœuds de requête et de la charge de travail. 5s ne constitue pas une échéance garantie de visibilité.

Utilisez GET /{collection}/_settings pour afficher uniquement les paramètres que vous avez explicitement configurés, et ajoutez include_defaults=true pour renvoyer également les valeurs par défaut. Utilisez PUT /{collection}/_settings pour ajuster le paramètre. Maintenez l'actualisation automatique activée pour les charges de travail de production. Définissez l'intervalle à au moins 5s. Un intervalle plus court augmente la publication des données sur les nœuds d'index, les E/S du stockage objet et la surcharge d'actualisation sur les nœuds de requête. Pour contrôler la charge d'écriture, augmentez l'intervalle selon les besoins et évaluez la latence de visibilité des données qui en résulte.

Utiliser refresh=wait_for uniquement dans des scénarios limités

refresh=wait_for est destiné uniquement aux points de synchronisation métier ponctuels et peu fréquents. Utilisez-le uniquement si toutes les conditions suivantes sont remplies : (1) le lot doit devenir consultable avant la poursuite du traitement, (2) le paramètre est utilisé avec un lot Bulk, (3) les attentes simultanées sont limitées, (4) l'actualisation automatique reste activée et (5) vous avez évalué l'impact du temps d'attente sur la latence et le débit métier. Pour confirmer une écriture par ID, utilisez GET ou MGet. Ne transmettez pas ce paramètre pour les importations continues ou les écritures standard.

Ce paramètre attend une actualisation et coordonne la visibilité sur les réplicas de requête. Trop d'attentes simultanées ou l'épuisement des écouteurs d'actualisation peuvent également déclencher une actualisation forcée, identifiable par forced_refresh: true dans la réponse. Même lorsqu'une actualisation forcée est déclenchée, la requête peut continuer à attendre la visibilité côté requête et n'est pas garantie de retourner immédiatement. Un délai d'expiration du client ne signifie pas que l'écriture n'a pas eu lieu. N'augmentez pas les attentes simultanées pour accélérer une actualisation.

Utiliser l'actualisation manuelle uniquement pour une vérification isolée ou une fenêtre d'O&M

N'ajoutez pas refresh=true au code de votre application et n'appelez pas _refresh. N'effectuez pas d'actualisation automatique après chaque lot d'importation. refresh=true déclenche une actualisation distribuée immédiate, ce qui augmente la publication des données, les E/S du stockage objet et la surcharge d'actualisation sur les nœuds de requête. L'actualisation automatique en arrière-plan constitue l'alternative standard.

POST /{collection}/_refresh affecte tous les Backings et tous les locataires de l'ensemble de la Collection. Vous ne pouvez pas estimer sa surcharge à partir du volume de données de votre propre Slice, et l'impact de la même requête augmente avec le nombre de Backings et le volume de données. Vous ne pouvez pas réduire l'étendue avec _slice. La transmission de _slice à ce point de terminaison renvoie une erreur HTTP 400. Une Collection ne fournit pas de point de terminaison d'actualisation pour un seul Backing destiné aux appels d'application.

Utilisez l'actualisation manuelle uniquement pour une Collection de vérification créée séparément contenant une petite quantité de données de démonstration, ou pendant une fenêtre d'O&M peu fréquente planifiée par un administrateur après évaluation de la taille de l'ensemble de la Collection. L'importation hors ligne ponctuelle décrite dans la section suivante constitue l'un de ces créneaux. Après l'actualisation, vérifiez _shards.failed. Les importations en ligne standard doivent attendre l'actualisation automatique en arrière-plan. Si vous devez préchauffer les données, effectuez cette opération une fois que les données sont consultables.

Désactiver l'actualisation automatique uniquement pour une importation hors ligne ponctuelle

Ne définissez pas index.refresh_interval=-1 pour une Collection de production. Ce paramètre désactive l'actualisation automatique, de sorte que les recherches ne voient pas les données nouvellement écrites en temps utile. Lorsque vous le combinez avec refresh=wait_for, une requête peut attendre longtemps, voire expirer.

La seule exception concerne une fenêtre d'importation hors ligne ponctuelle clairement définie pour l'ensemble de la Collection cible, durant laquelle aucun des locataires associés n'exécute de requêtes. Au cours de cette fenêtre, effectuez les étapes suivantes dans l'ordre : (1) Omettez refresh pendant l'importation. (2) Une fois l'importation terminée, rétablissez 5s ou l'intervalle précédent d'au moins 5s en appelant PUT /{collection}/_settings. (3) Toujours dans la même fenêtre, demandez à la tâche d'importation d'exécuter _refresh une fois, puis vérifiez _shards.failed dans la réponse. (4) Vérifiez que les requêtes renvoient les données importées. (5) Si la charge de travail est sensible à la latence des requêtes à froid, préchauffez les données avant de rétablir le trafic de production. N'utilisez pas ce processus pour une Collection qui dessert encore d'autres locataires.

Une actualisation concerne uniquement la visibilité des requêtes. Elle ne signifie pas que tous les réplicas de requête sont disponibles et ne peut pas remplacer les sondes de requête ou les vérifications de haute disponibilité (HA).

Bulk

Chaque élément Bulk peut fournir son propre _slice dans les métadonnées d'action. Pour un exemple, consultez l'exemple d'écriture bulk dans la section Premiers pas. Si un lot entier est écrit dans le même Slice, vous pouvez également fournir une valeur par défaut dans l'URL :

POST /knowledge-chunks/_bulk?_slice=tenant-a
{ "index": { "_id": "chunk-2001" } }
{ "tenant_id": "tenant-a", "document_id": "doc-account-security", "title": "Account security settings", "content": "An administrator can enable multi-factor authentication on the security settings page." }

La valeur _slice d'un élément peut remplacer la valeur par défaut de l'URL. Chaque requête Bulk enregistre automatiquement jusqu'à 512 Slices manquants. Les Slices existants ne comptent pas dans cette limite. Le mode namespace ne déduit pas un Slice à partir des champs du document. Même si le corps du document contient des champs tels que tenant_id, l'emplacement d'écriture réel est déterminé par _slice. Vérifiez le résultat renvoyé pour chaque élément afin de confirmer la réussite de l'écriture. Pour la gestion des erreurs, consultez les Conventions générales des API.

MGet

Utilisez MGet pour lire plusieurs documents dont les ID sont connus en une seule requête. Chaque élément peut cibler un Slice différent :

POST /knowledge-chunks/_mget
{
  "docs": [
    { "_id": "chunk-1001", "_slice": "tenant-a" },
    { "_id": "chunk-1001", "_slice": "tenant-b" }
  ]
}

Ces deux éléments lisent des documents portant le même ID depuis des locataires différents. Avec les exemples de données de la section Premiers pas, les titres renvoyés sont « Refund and return policy » et « Track shipment status ». Lorsque vous interrogez vos propres données, basez-vous sur found, les champs métier et les erreurs de chaque élément. Le _slice dans l'URL peut servir de valeur par défaut que chaque élément peut remplacer. Chaque élément doit se résoudre en exactement un Slice.

Reindex

Avant d'appeler Reindex, vérifiez l'étendue de prise en charge des API pour Reindex de Collection, en particulier les restrictions concernant les scripts, les pipelines de destination et les sources distantes.

Utilisez Reindex lorsque vous migrez des données entre un index standard et une Collection ou entre des Collections. Pour copier un Slice au sein de la même Collection, utilisez Copier un Slice.

Lorsque la source est une Collection, vous devez spécifier explicitement source._slice dans le corps de la requête. Sinon, la requête renvoie une erreur HTTP 400. Lorsque la destination est une Collection, vous ne pouvez spécifier qu'un seul Slice de destination, et la valeur de destination doit utiliser le format ={slice}.

Avant d'exécuter la tâche, créez la Collection de destination, configurez un Mapping capable d'accepter les documents source et suivez les instructions de Précréation des Backings pour préparer la capacité et enregistrer le Slice de destination. Assurez-vous que les données source à migrer sont consultables. Reindex ne synchronise pas continuellement les écritures ultérieures ; vous devez donc également traiter les données incrémentielles avant le basculement vers la production.

Par défaut, Reindex conserve l'ID de document _id et peut écraser un document portant le même ID à la destination. Avant de fusionner plusieurs Slices source en un seul Slice de destination, assurez-vous que les ID de document sont également uniques entre ces Slices. Sinon, migrez-les vers différents Slices de destination ou demandez à l'application de générer de nouveaux ID uniques avant d'importer les documents.

L'exemple suivant utilise une exécution asynchrone, une seule tâche, 500 documents par lot et un taux cible de 500 documents par seconde. Commencez par ces paramètres pour contrôler l'impact de la migration sur les charges de travail en ligne, puis ajustez-les en fonction de la charge. requests_per_second limite le débit par nombre de documents entre les lots, et non par nombre de requêtes HTTP par seconde :

POST /_reindex?wait_for_completion=false&slices=1&requests_per_second=500
{
  "source": {
    "index": "source-knowledge-chunks",
    "_slice": "tenant-a",
    "size": 500
  },
  "dest": {
    "index": "target-knowledge-chunks",
    "_slice": "=tenant-archive"
  }
}

Enregistrez la valeur task de la réponse, puis interrogez GET /_tasks/{task_id} à intervalles réguliers jusqu'à ce que completed=true. Vérifiez error, failures et version_conflicts dans le résultat. L'achèvement de la tâche ne signifie pas que toutes les données de destination sont consultables. Avant le basculement, attendez une actualisation en arrière-plan, vérifiez les résultats de destination et préchauffez les Slices qui seront accessibles.

Notez les règles suivantes :

  • source._slice prend en charge un Slice, plusieurs Slices ou _all. Le corps de la requête Reindex n'accepte pas source.routing ; sa transmission renvoie une erreur HTTP 400.

  • La destination peut utiliser "_slice": "=slice-name" ou "routing": "=slice-name", mais pas les deux. Le signe = initial doit être conservé.

  • Si le Slice de destination n'existe pas, il est enregistré automatiquement uniquement lorsque auto_create_slice=true est défini.

  • Le paramètre de niveau supérieur slices spécifie le parallélisme de Reindex Elasticsearch et n'est pas lié au nombre de Slices métier.

  • Lors de l'écriture d'une Collection vers un index standard, si le routage n'a pas besoin d'être conservé, définissez "dest": { "routing": "discard" }.

Spécifier l'étendue de la requête

Cette section décrit l'étendue de requête Slice ajoutée par la version du moteur Agent. Les autres paramètres de point de terminaison suivent la sémantique standard des API Elasticsearch. Pour connaître les limitations connues, consultez l'étendue de prise en charge des API.

Étendue de la requête

Scénarios

Exemple

Un Slice

Requêtes en ligne pour un locataire ; recherches au sein d'un namespace spécifié

GET /knowledge-chunks/_search?_slice=tenant-a

Plusieurs Slices

Requêtes agrégées pour un petit nombre de locataires connus ; requêtes couvrant un petit nombre de namespaces

GET /knowledge-chunks/_search?_slice=tenant-a,tenant-b

Une seule requête peut spécifier jusqu'à 1 024 Slices. La limite de longueur de la ligne de requête HTTP s'applique également. Avec des noms de Slice longs, la requête peut renvoyer too_long_http_line_exception avant d'atteindre la limite de nombre. Raccourcissez les noms de Slice ou divisez la requête en plusieurs interrogations.

Les requêtes de Collection activent par défaut l'affinité de requête et de préchauffage. Lorsque ce paramètre est activé, la règle d'affinité remplace preference dans la requête, et la réponse n'offre aucune notification supplémentaire. Pour utiliser preference afin de contrôler la sélection des nœuds, un administrateur doit désactiver le paramètre. Le paramètre étant défini à l'échelle du cluster, sa désactivation s'applique à toutes les Collections.

Pour les requêtes de production, n'utilisez pas _slice=_all. Ce paramètre recherche l'ensemble de la Collection, et la surcharge des requêtes de shard, des agrégations et des lectures du stockage objet sur les nœuds de requête augmente avec le nombre de Backings et de shards. Les applications doivent spécifier un Slice connu ou un petit nombre de Slices connus. Utilisez GET /knowledge-chunks/_search?_slice=_all uniquement pour des tâches d'analyse, d'audit ou d'O&M dédiées nécessitant réellement toutes les données, et seulement après avoir évalué la charge sur l'ensemble de la Collection, limité la concurrence et défini un délai d'expiration.

Si vous utilisez Branch Slice (Bêta) pendant la phase Bêta, les requêtes multi-Slices et _slice=_all renvoient une erreur HTTP 409 lorsque l'étendue inclut un Branch qui n'a pas encore été converti en Slice standard. Les charges de travail n'utilisant pas cette fonctionnalité ne sont pas affectées.

Lorsqu'une liste de requêtes peut inclure des Slices inexistants, utilisez ignore_missing_slice :

GET /knowledge-chunks/_search?_slice=tenant-a,tenant-b&ignore_missing_slice=true

Pour un Slice facultatif qui peut ne pas exister, définissez ignore_missing_slice=true afin d'éviter de retenter l'ensemble d'un lot en raison de l'absence d'un Slice. Sans ce paramètre, l'ensemble de la requête renvoie une erreur HTTP 404 si un Slice n'existe pas. Ce paramètre affecte uniquement les Slices nommés. Lorsque vous l'utilisez avec _slice=_all, le paramètre est ignoré sans erreur.

Les points de terminaison de requête suivants prennent en charge le même paramètre d'étendue Slice :

  • Search et Count

  • Multi search

  • Search template

  • Async search

  • Validate query

  • Search shards

  • Update by query et Delete by query

    Explain décrit pourquoi un document correspond à une requête. Vous ne pouvez spécifier qu'un seul Slice. N'utilisez pas de liste séparée par des virgules ni _all :

POST /knowledge-chunks/_explain/chunk-1001?_slice=tenant-a
{
  "query": {
    "match": { "content": "refund" }
  }
}

Pour les opérations Update by query, Delete by query et Reindex ciblant une Collection, vous devez spécifier explicitement le Slice cible. Sinon, la requête est rejetée avec une erreur HTTP 400.

Comportement par défaut lorsque _slice n'est pas spécifié

En mode namespace (exact), Search, Count, Search Template, Async Search, Validate Query et Search Shards requièrent _slice par défaut. La requête échoue en l'absence de ce paramètre. Pour le petit nombre de tâches dédiées répondant aux conditions de requête complète décrites précédemment, transmettez explicitement _slice=_all dans ces requêtes au lieu de modifier le comportement par défaut global. Le mode de rappel de cluster vectoriel peut sélectionner automatiquement les Slices candidats en fonction du vecteur de requête. Pour plus d'informations, consultez Mode de rappel de cluster vectoriel.

Maintenez la solution de secours de requête complète désactivée par défaut. Le paramètre de cluster apack.slice_collection.search.default_to_all_slices contrôle cette solution de secours, et le paramètre affecte toutes les Collections. En mode namespace, lorsque _slice n'est pas spécifié, la requête revient à tous les Slices. Le mode de cluster vectoriel revient à une requête complète uniquement lorsqu'aucune étendue n'est spécifiée et que le chemin de configuration ne contient pas de vecteur de requête ; lorsqu'un vecteur de requête valide est fourni, les Slices candidats sont toujours sélectionnés normalement. Une solution de secours de requête complète augmente la surcharge des requêtes de shard, des agrégations et des lectures du stockage objet.

Une tâche dédiée nécessitant réellement une requête complète doit spécifier explicitement l'étendue dans chaque requête. Ne vous fiez pas à ce commutateur global pour garantir une requête complète. Activez ce commutateur à l'échelle du cluster uniquement lorsque l'application dépend explicitement de la solution de secours de requête complète, qu'un administrateur a évalué la charge sur toutes les Collections concernées et que des contrôles de concurrence et de délai d'expiration sont en place :

PUT /_cluster/settings
{
  "persistent": {
    "apack.slice_collection.search.default_to_all_slices": true
  }
}

Une fois le commutateur activé, GET /knowledge-chunks/_search en mode namespace équivaut à transmettre explicitement _slice=_all. En mode de cluster vectoriel, les chemins invalides, query_vector_builder et les dimensions de vecteur incorrectes sont toujours rejetés. Pour plus d'informations, consultez Sélection automatique des Slices candidats.

Ce paramètre s'applique uniquement aux points de terminaison de requête répertoriés ci-dessus qui n'écrivent pas de données. Il ne s'applique pas à GET, MGet, Explain, Reindex, Update by query ni Delete by query.

Paramètre de compatibilité de routage

Pour une Collection ou un alias de Collection, les API d'écriture, de lecture et de requête de documents acceptent le paramètre standard Elasticsearch routing à la place de _slice. Les deux paramètres représentent le même Slice logique et sont sémantiquement équivalents, de sorte que cette syntaxe de compatibilité permet à vos clients Elasticsearch existants de continuer à fonctionner. Pour les nouvelles applications, utilisez _slice, qui est sémantiquement plus clair. Notez les contraintes suivantes :

  • Ne fournissez pas à la fois _slice et routing dans la même URL ou dans le même élément Bulk ou MGet.

  • Cette syntaxe de compatibilité ne s'applique pas à source.routing dans le corps d'une requête Reindex, aux points de terminaison de gestion de Collection et de Slice, au préchauffage du cache, à Copy Slice, CAT ni à une actualisation explicite.

  • Cette syntaxe de compatibilité ne modifie pas la sémantique de routage des index Elasticsearch standard.

Index standard dans les requêtes mixtes

Lorsqu'une requête de type Search contient à la fois des index standard et des Collections, le paramètre de cluster apack.slice_collection.rewrite.mixed_collection_targets détermine le comportement :

Valeur

Comportement des requêtes de type Search

ignore (par défaut)

Ignoire la réécriture de Collection et renvoie un avertissement. Lorsque la requête spécifie explicitement des index standard et des Collections existants sans _slice, seuls les index standard sont interrogés. Lorsque la requête inclut _slice, un index standard n'ayant pas Slice activé entraîne le renvoi d'une erreur HTTP 400 avec le message [_slice] is not allowed when [index.slice.enabled] is false.

reject

Rejette la requête mixte et renvoie une erreur HTTP 400.

expand

Réservé aux opérations prenant en charge l'expansion. Les requêtes de type Search ne prennent actuellement pas en charge l'expansion mixte, elles renvoient donc une erreur HTTP 400 avec cette valeur.

Dans ce cas, routing est toujours traité selon les règles de routage des index standard et ne représente pas un Slice dans une Collection. Même si tous les noms d'une requête mixte existent et que la requête aboutit, ne supposez pas que les résultats contiennent des données de Collection.

Une requête contenant à la fois une Collection et une cible distante est également traitée comme une requête mixte. Si l'instance contient une Collection, les règles précédentes s'appliquent également à GET /_search sans index. Par défaut, le paramètre ignore uniquement la réécriture du point d'entrée logique de la Collection. Une requête wildcard complète ou trop large peut toujours correspondre directement aux Backings visibles, et une telle requête ne peut pas remplacer une requête étendue par Collection et Slice.

Pour lire les deux types de données, envoyez des requêtes séparées et demandez à l'application de fusionner les résultats.