Qu'est-ce qu'un index Elasticsearch ?

Le terme index prend de nombreux sens dans le monde de l'informatique. Si vous demandiez à la plupart des développeurs ce qu'est un index, ils vous répondraient probablement qu'il s'agit généralement d'une structure de données dans une base de données relationnelle (SGBDR) associée à une table, et qui améliore la vitesse des opérations de récupération des données.
Cela dit, qu'est-ce qu'un index Elasticsearch® ? Un index Elasticsearch est un espace de noms logique qui contient un ensemble de documents, chaque document étant un ensemble de champs, lesquels sont, à leur tour, des paires clé-valeur contenant vos données.
En quoi un index Elasticsearch diffère-t-il d'une base de données relationnelle ?
Les index Elasticsearch ne sont pas les mêmes que ceux contenus dans une base de données relationnelle. Considérez un cluster Elasticsearch comme une base de données pouvant contenir de nombreux index que vous pouvez considérer comme des tables, et dans chaque index, de nombreux documents.
- SGBDR => Bases de données => Tables => Colonnes/Lignes
- Elasticsearch => Clusters => Index => Partitions => Documents avec paires clé-valeur
Alors qu'Elasticsearch stocke des documents JSON, ce que vous entrez dans l'index est incroyablement flexible. La multitude d'intégrations et de Beats disponibles vous permet d'être opérationnel très rapidement. Pour aller un peu plus loin et définir vos propres processus ETL, vous pouvez utiliser Ingest Pipelines ou Logstash®, en vous appuyant sur leurs nombreux processeurs et plugins.
Une autre différence avec les bases de données relationnelles est que vous pouvez importer des données sans avoir besoin de définition de schéma au départ. Les types dynamiques sont un excellent moyen de démarrer rapidement ou de prendre en compte les champs imprévus dans les documents. Ensuite, une fois que tout est prêt, passez à un schéma fixe pour améliorer les performances.
Les champs d'exécution sont une autre fonctionnalité intéressante qui vous permet d'appliquer un schéma à la lecture ou à l'écriture. Ils peuvent être ajoutés à un document existant et utilisés pour créer un nouveau champ, ou vous pouvez créer un champ d'exécution au moment de la requête. Considérez-les comme des valeurs calculées à l'aide de scripts qui peuvent lire dans la source du document.
Vous voyez maintenant la différence entre Elasticsearch et les bases de données relationnelles. Essayez-le gratuitement dès aujourd'hui avec un compte d'essai sur Elastic Cloud.
L'interaction des données avec l'API conviviale d'Elasticsearch
Elasticsearch fournit une API basée sur RESTful JSON pour interagir avec les données des documents. Vous pouvez indexer, rechercher, mettre à jour et supprimer des documents en envoyant des requêtes HTTP aux points de terminaison appropriés du cluster. Ces opérations de type CRUD peuvent avoir lieu au niveau d'un document individuel ou au niveau de l'index lui-même. Si vous préférez, il existe aussi des bibliothèques de clients spécifiques à chaque langage que vous pouvez utiliser à la place de REST directement.
L'exemple suivant crée un document dans un index appelé playwrights avec un document_id attribué de 1. Notez que nous n'avons pas besoin de créer de schémas ni de configuration au départ ; nous insérons simplement nos données.
POST /playwrights/_doc/1
{
"firstname": "William",
"lastname": "Shakespeare"
}Nous pouvons également ajouter des documents et des champs à notre convenance, ce qui n'est pas facile à faire avec une base de données relationnelle.
POST /playwrights/_doc/2
{
"firstname": "Samuel",
"lastname": "Beckett",
"year_of_birth": 1906
}Nous pouvons maintenant lancer des requêtes sur l'ensemble des documents grâce au point de terminaison de la recherche.
GET /playwrights/_search
{
"query": {
"match_all": {}
}
}Nous pouvons aussi lancer une requête sur une année de naissance précise.
GET /playwrights/_search
{
"query": {
“match": {
“year_of_birth": 1906
}
}
}En plus des requêtes élémentaires, Elasticsearch offre des fonctionnalités de recherche avancées telles que la mise en correspondance des approximations, la racinisation, le score de pertinence, la mise en évidence et la conversion en tokens, qui décompose le texte en plus petits éléments appelés tokens. Dans la plupart des cas, ces tokens sont des mots individuels, mais il existe de nombreux générateurs de tokens différents.
Pourquoi les données dénormalisées sont-elles essentielles à une récupération plus rapide des données ?
Dans les bases de données relationnelles, la normalisation est souvent appliquée pour éliminer la redondance des données et garantir la cohérence des informations. Par exemple, vous pourriez avoir des tables séparées pour les clients, les produits et les commandes.
Dans Elasticsearch, la dénormalisation est une pratique courante. Au lieu de répartir les données dans plusieurs tables, on stocke toutes les informations pertinentes dans un seul document JSON. Un document de commande contiendra les informations client et produit, plutôt que des clés étrangères pointant vers des index produits et clients distincts. Cela permet une récupération des données plus rapide et plus efficace dans Elasticsearch lors des recherches. En règle générale, le stockage est souvent moins coûteux que les calculs nécessaires à la jointure des données.
Comment Elasticsearch garantit-il la scalabilité des systèmes distribués ?
Chaque index est identifié par un nom unique et divisé en une ou plusieurs partitions, qui sont des sous-ensembles plus petits de l'index permettant un traitement parallèle et un stockage distribué sur un cluster de nœuds Elasticsearch. Les partitions comportent une partition primaire et une partition répliquée. Les répliques fournissent des copies redondantes de vos données afin de vous protéger contre les pannes matérielles et d'augmenter la capacité à répondre aux requêtes de lecture, telles que la recherche ou la récupération d'un document.
L'ajout de nœuds dans le cluster vous offre une plus grande capacité d'indexation et de recherche, ce qui est plus difficile à obtenir avec une base de données relationnelle.
Pour revenir à notre exemple playwrights cité plus haut, si nous exécutons la commande suivante, nous pouvons voir les mappings types qu'Elasticsearch a automatiquement déduits, ainsi que le nombre de partitions et de répliques attribuées à l'index.
GET /playwrights/
Quels types de données peuvent être indexés dans Elasticsearch ?
Elasticsearch peut indexer de nombreux types de données : du texte, mais aussi des données numériques et géolocalisées. Il peut également stocker des vecteurs denses utilisés dans les recherches de similarité. Examinons chacun de ces aspects.
Index inversés pour les recherches textuelles/lexicales
Elasticsearch déterminera également la meilleure structure de données sous-jacente à utiliser pour un type de champ particulier. Par exemple, le texte sera d'abord découpé en tokens, puis stocké dans un index inversé, une structure qui répertorie chaque token unique apparaissant dans n'importe quel document et qui identifie tous les documents dans lesquels chaque mot apparaît.
Le tableau ci-dessous illustre la composition générale d'un index inversé. Nous pouvons observer que, si nous cherchons le mot "Londres", celui-ci apparaît dans six documents différents au sein de l'index. Cet index inversé nous permet d'effectuer des requêtes textuelles très rapidement.
Token | Identifiants des documents |
Londres | 1,3,8,12,23,88 |
Paris | 1,12,88 |
| Madrid | 3,8,12 |
| Berlin | 12,23 |
Fonctionnalités de recherche de données numériques et liées à la géolocalisation pour une analyse spatiale efficace
Les données numériques et de géolocalisation devraient être stockées dans des arborescences BKD, également appelées "index Block KD-Tree", une structure de données utilisée dans les applications d'ingénierie pour une indexation spatiale efficace et des requêtes sur des données multidimensionnelles. Cette structure organise les points de données en blocs, ce qui permet des recherches rapides par plage et des requêtes du plus proche voisin dans de grands ensembles de données, ce qui en fait un outil précieux pour les ingénieurs travaillant sur l'analyse et l'optimisation des données spatiales.
Recherche vectorielle/sémantique avec le NLP
Vous avez peut-être entendu parler de la recherche vectorielle, mais de quoi s'agit-il exactement ? Les moteurs de recherche vectorielle, également appelés bases vectorielles, recherche sémantique ou recherche cosinus, trouvent les documents les plus proches d'une requête (vectorisée) donnée. La puissance de la recherche vectorielle réside dans sa capacité à découvrir des documents similaires qui ne correspondent pas exactement au texte, comme l'exigerait notre exemple d'index inversé ci-dessus ; elle utilise plutôt des vecteurs qui décrivent un certain degré de similarité
Consultez l'article : Qu'est-ce que la recherche vectorielle ?
Voici une liste des cas d'utilisation courants pour la recherche vectorielle :
- Répondre à des questions
- Trouver des réponses à des questions déjà posées, lorsque la question posée est similaire mais pas exactement identique sous forme textuelle
- Faire des recommandations, par exemple, une application musicale qui trouve des chansons similaires en fonction de vos préférences
L'ensemble de ces cas d'utilisation exploitent des vecteurs dotés de dizaines de milliers de dimensions, fournissant une représentation exhaustive des données pour une évaluation précise de la similarité et des recommandations ciblées.
Elasticsearch prend en charge la recherche vectorielle via le type de document dense_vector et sa capacité à exécuter des recherches de similarité entre le vecteur dans le document et le terme de recherche après sa conversion en vecteur.
Pour ceux qui souhaitent approfondir leurs connaissances en IA générative, nous proposons également ESRE, le moteur Elasticsearch Relevance Engine™, conçu pour alimenter les applications de recherche basées sur l'intelligence artificielle. ESRE offre aux développeurs une suite complète d'algorithmes de recherche sophistiqués et la possibilité de s'intégrer à de vastes modèles de langage.
Prochaines étapes conseillées
Lorsque vous serez prêt, voici trois façons dont nous pouvons vous aider à intégrer les données à votre entreprise :
- Démarrez un essai gratuit et découvrez comment Elastic Cloud peut aider votre entreprise.
- Consultez le webinar Premiers pas avec Elasticsearch.
- Explorez nos produits. Découvrez le fonctionnement d'Elasticsearch Platform et comment nos solutions s'adaptent à vos besoins.
Date de publication initiale : 24 février 2013 ; date de mise à jour : 17 juillet 2023.