Elasticsearch vous permet d’indexer des données rapidement et en toute flexibilité. Essayez-le gratuitement dans le cloud ou exécutez-le en local pour découvrir à quel point l’indexation peut être simple.
Dans cet article, nous verrons comment afficher les champs d'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 :
- Utilisation de l'API
_mappingpour récupérer des informations sur les champs - Utilisation de l'API
_searchpour afficher les valeurs des champs - Affichage des sous-champs
- Synthetic _source
- Champs d'exécution
1. Utilisation de l'API _mapping pour récupérer des informations sur les champs
L'API _mapping vous permet de récupérer la définition du mappage pour un ou plusieurs index. 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 :
Par exemple, si vous avez un index nommé my_index, vous pouvez récupérer son mapping avec la requête suivante :
La réponse comprendra la définition du mappage pour l'index, qui contient des informations sur les champs et leurs propriétés.
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 :
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 :
2. Utilisation de l'API _search pour afficher les valeurs des champs
Pour afficher les valeurs des champs d'un index Elasticsearch, vous pouvez utiliser l'API _search. L'API _search vous offre plusieurs moyens de contrôler les champs renvoyés ; les deux principaux sont les suivants :
_source: Le champ_sourcecontient le corps du document JSON original tel qu'il a été indexé, y compris les modifications apportées par les pipelines d'ingestion ou les étapes de prétraitement. Pour afficher des champs spécifiques du document source, il faut mettre en œuvre le filtrage de la source, comme nous le verrons ci-dessous.fields: Le paramètrefieldsvous permet d'extraire des champs spécifiques de vos documents lors d'une recherche, sur la base du mappage de l'index. Contrairement à_source,fieldspeut également renvoyer des valeurs provenant de champs stockés, de valeurs documentaires ou de champs d'exécution sans faire référence à_source, bien que pour les champs standard sans valeurs documentaires ou paramètres stockés, il se réfère à_source. Cela peut apporter de nombreux avantages, notamment en termes de performances, comme nous le verrons ci-dessous.
Utilisation du champ _source
Par défaut, l'API _search renvoie le champ _source, qui contient le document JSON original qui a été indexé. Pour afficher des champs spécifiques, vous pouvez ajouter des filtres dans le paramètre _source de la demande de recherche ; c'est ce qu'on appelle le filtrage à la source.
Voici un exemple de demande de recherche qui renvoie les valeurs des champs title et author pour les documents de l'index my_index:
Dans cet exemple, le paramètre _source spécifie les champs à renvoyer.
Si vous avez besoin d'encore plus de contrôle, vous pouvez utiliser les propriétés includes et excludes de l'objet _source. Par exemple, la requête ci-dessous renvoie le champ de premier niveau title et tous les sous-champs de author à l'exception de author.description.
Dans cet exemple, nous utilisons le modèle author.* pour récupérer tous les sous-champs directs de l'objet author . Nous excluons ensuite explicitement author.description afin que seuls les autres champs relatifs à l'auteur soient renvoyés. Notez que cela n'améliore pas les performances, puisqu'il faut toujours charger et analyser la source JSON, mais cela permet de réduire la taille de la réponse envoyée sur le réseau.
Utilisation du paramètre champs
Vous pouvez utiliser le paramètre fields pour filtrer les champs renvoyés dans la réponse de recherche. L'utilisation de fields par rapport à _source présente plusieurs avantages, notamment
- Amélioration des performances :
fieldspeut renvoyer des valeurs directement à partir de champs stockés ou de valeurs de documents sans avoir à charger l'intégralité du site_source, ce qui réduit la taille de la charge utile de la réponse. - Sortie formatée : Pour les champs standard,
fieldspeut se référer à_sourcepour récupérer les valeurs, mais il s'appuie sur le mappage de l'index pour formater correctement la sortie, comme les dates formatées, afin de les rendre cohérentes avec ce qui est utilisé pour les agrégations et les tris. - Accès aux champs d'exécution :
fieldspeut renvoyer des champs d'exécution qui n'existent pas sur le site original_source. - D'autres avantages peuvent être trouvés ici.
Par exemple, pour obtenir uniquement les champs title et author dans l'index my_index, vous pouvez utiliser la requête de recherche suivante :
Dans la requête ci-dessus, nous attribuons la valeur false au champ _source afin de ne pas renvoyer le document source. Cela peut réduire considérablement la taille de la charge utile de la réponse, mais n'oubliez pas que cela ne fonctionne que si les champs title et author sont de type keyword , pour lesquels doc_values est activé par défaut. Si le champ n'a pas été activé par doc_values et que _source a été défini sur false, Elasticsearch n'aura aucun moyen de les récupérer et ils seront ignorés dans la réponse.
Il est important de noter que la réponse fields renvoie toujours un tableau de valeurs pour chaque champ, même s'il n'y a qu'une seule valeur. Cela est dû au fait qu'Elasticsearch n'a pas de type de tableau dédié, et que tout champ peut avoir plusieurs valeurs. Pour plus d'informations sur les tableaux dans Elasticsearch, cliquez ici.
Autres moyens d'extraire des champs
Bien que l'extraction de champs à l'aide de _source ou fields soit la méthode recommandée, il existe d'autres méthodes pour des cas d'utilisation spécifiques, comme par exemple :
Champs de valeur du document : Si vous souhaitez éviter _source, vous pouvez effectuer une recherche en utilisant le paramètre docvalue_fields . Doc values stocke les mêmes valeurs de champ que _source mais dans une structure de données sur disque, optimisée pour les tris et les agrégations.
Comme il s'agit d'une valeur distincte des valeurs stockées sur _source, vous pouvez demander des champs spécifiques sans avoir à charger l'ensemble du site _source. Cette option est utile si vous interrogez des documents volumineux, mais que vous n'avez besoin que de quelques petits champs prenant en charge des valeurs de documents. Un autre cas d'utilisation de docvalue_fields est celui où vous souhaitez utiliser un formatage personnalisé pour les champs date et numeric, comme nous le verrons dans l'exemple ci-dessous.
Notez que cela ne fonctionne que pour les champs pour lesquels vous avez activé doc_values ou pour les types de champs pour lesquels cette option est activée par défaut, tels que keyword, date, les types numériques et boolean, et non pour text ou annotated_text.
Dans cet exemple, nous utilisons le paramètre docvalue_fields pour récupérer les champs title, author et published sans charger le document _source complet :
Lorsque cette requête est exécutée, Elasticsearch récupère les valeurs directement à partir de son magasin en colonnes sur disque au lieu de référencer le site _source pour chaque document. Le champ published est retourné avec le format epoch_millis au lieu du format par défaut, grâce au paramètre format fourni dans la requête.
Champs stockés : Si vous avez explicitement marqué des champs spécifiques comme étant stockés dans le mappage, vous pouvez utiliser le paramètre stored_fields pour filtrer ces champs. C'est utile si vous voulez des réponses légères avec seulement ces champs spécifiques ou pour les champs que vous avez délibérément stockés pour les retrouver plus tard. Il est stocké séparément de _source, de sorte que cette méthode est également utile pour éviter de devoir charger _source.
Il est important de noter que cette option est désactivée par défaut et qu'elle n'est généralement pas recommandée. Utilisez plutôt le filtrage des sources pour renvoyer certains sous-ensembles du document source original.
Dans l'exemple de requête ci-dessous, nous utilisons le paramètre stored_fields pour récupérer le champ summary, dont la configuration de mappage d'index est "store”: true.
Lorsque cette requête est exécutée, Elasticsearch vérifie si ce champ a été marqué par ”store”: true, s'il ne le trouve pas, il l'ignore complètement.
3. Affichage des sous-champs
Si votre index contient des sous-champs, vous pouvez utiliser la notation point pour spécifier le chemin d'accès au champ dans le paramètre fields. Notez que les sous-champs sont différents du type de champ imbriqué. Par exemple, si vous avez un sous-champ nommé address.city, vous pouvez l'inclure dans la réponse de recherche comme suit :
Dans cet exemple, la réponse de la recherche comprendra les valeurs des champs title, author et address.city.
4. Synthétique _source
Si vous souhaitez conserver la fonctionnalité de _source tout en économisant de l'espace disque, vous avez la possibilité d'utiliser le site synthétique _source dans votre mappage d'index. Synthetic _source est une fonctionnalité qui permet à Elasticsearch de reconstruire _source à partir de données existantes telles que des champs stockés et des valeurs de documents, même lorsque _source est désactivé. Cela vous permet d'économiser beaucoup d'espace de stockage au prix d'une vitesse légèrement inférieure au moment de l'interrogation, car la reconstruction se fait à la volée. Activez cette fonction en utilisant les valeurs ci-dessous dans vos paramètres d'index :
Parmi les avantages de l'utilisation de la version synthétique de _source , citons : l'affichage complet du document lors de l'utilisation de l'API _search, le filtrage des sources et la compatibilité avec d'autres fonctionnalités et outils tels que Kibana qui s'attendent à ce que _source soit disponible, tout en évitant d'avoir à stocker le document _source dans son intégralité.
5. Champs d'exécution
Les champs d'exécution vous permettent de définir des champs scriptés au moment de la requête ou dans votre mappage d'index sous un bloc d'exécution. Ces champs ne sont jamais indexés, de sorte que l'ajout d'un champ d'exécution n'augmente pas la taille de l'index mais n'apparaîtra jamais dans _source. Les champs d'exécution définis dans le mappage sont persistants et disponibles pour toutes les requêtes, tandis que les champs d'exécution définis au moment de la requête sont temporaires et ne sont disponibles que dans cette requête de recherche.
Le principal avantage de l'utilisation des champs d'exécution est la possibilité d'ajouter des champs aux documents après les avoir ingérés, ce qui simplifie vos décisions en matière de mappage. Les champs d'exécution sont également très utiles pour enrichir vos documents avec des valeurs qui n'existent pas dans le document original mais qui sont générées à l'aide d'un script, comme le formatage d'une chaîne de caractères ou le calcul d'un score.
Il convient également de noter que les champs d'exécution peuvent nuire aux performances, car un script devra être exécuté pour chaque document de l'ensemble des résultats. Pour récupérer un champ d'exécution, vous pouvez également utiliser le paramètre fields de l'API _search.
Conclusion
L'affichage des champs d'un index Elasticsearch peut aller de la simple récupération des valeurs à l'aide du mappage d'index ou de _source, à des méthodes plus avancées utilisant fields, docvalue_fields, ou des champs d'exécution pour un meilleur contrôle et une plus grande efficacité. Il est essentiel de comprendre les compromis entre les différentes méthodes pour optimiser vos expériences de recherche. Qu'il s'agisse d'optimiser les charges utiles, d'enrichir des documents ou d'utiliser le site synthétique _source pour économiser de l'espace de stockage, Elasticsearch vous offre de nombreux outils et fonctionnalités pour trouver les données dont vous avez besoin, de la manière dont vous en avez besoin. Ces techniques peuvent vous aider à comprendre la structure de vos données, à identifier des champs spécifiques et à résoudre des problèmes.




