Maison  >  Article  >  développement back-end  >  Qu’est-ce qu’Elasticsearch ? Où peut-on utiliser Elasticsearch ?

Qu’est-ce qu’Elasticsearch ? Où peut-on utiliser Elasticsearch ?

零下一度
零下一度original
2017-06-23 16:10:364114parcourir
  • Version d'Elasticsearch : 5.4

  • Démarrage rapide d'Elasticsearch Partie 1 : Démarrer avec Elasticsearch

  • Démarrage rapide d'Elasticsearch Partie 1 2 articles : Installation d'Elasticsearch et Kibana

  • Article de démarrage rapide d'Elasticsearch 3 : Opérations sur les index et les documents Elasticsearch

  • Article de démarrage rapide d'Elasticsearch 4 : Requête de documents Elasticsearch

Elasticsearch est un moteur de recherche et d'analyse de texte intégral open source hautement évolutif. Il peut stocker, rechercher et analyser des données à grande échelle rapidement et en temps quasi réel. Il est généralement utilisé comme moteur/technologie sous-jacent pour fournir un support solide aux applications dotées de fonctions et d'exigences de recherche complexes.

Elasticsearch peut être utilisé à ces endroits :

  1. Supposons qu'il existe un site Web de boutique en ligne, afin de permettre aux clients de rechercher des produits sur vente. Dans ce cas, vous pouvez utiliser Elasticsearch pour stocker l'intégralité de votre catalogue et de votre inventaire de produits et proposer des recherches pour ceux-ci ainsi que leur donner automatiquement quelques suggestions.

  2. Supposons que vous souhaitiez collecter des journaux ou des données de transaction et trouver des tendances, des statistiques, des résumés ou des anomalies grâce à l'analyse et à l'exploration. Dans ce cas, vous pouvez utiliser LogStash (qui fait partie de la pile Elasticsearch/Logstash/Kibana) pour collecter, agréger et analyser vos données, puis utiliser LogStash Soumettez ces données à Elasticsearch . Une fois que Elasticsearch dispose des données, vous pouvez rechercher et regrouper les informations qui vous intéressent.

  3. Supposons que vous exploitiez une plateforme d'alerte de prix et que vous laissiez les clients avertis en matière de prix spécifier une règle telle que « Je suis intéressé par l'achat d'un gadget électronique spécifique si, au cours du mois prochain, il y a un Le prix du vendeur est inférieur à x $, je souhaite être averti". Dans ce cas, vous pouvez soumettre le prix du vendeur à Elasticsearch , utiliser une recherche inversée (filtre), faire correspondre les modifications de prix à la requête du client et informer le client si une correspondance est trouvée.

  4. Supposons que vous ayez un besoin analytique (business intelligence) et que vous souhaitiez enquêter, analyser, visualiser et trouver rapidement un problème ponctuel dans de grandes quantités de données (pensez à des millions ou des milliards d'enregistrements ) . Dans ce cas, vous pouvez utiliser Elasticsearch pour stocker les données, puis utiliser Kibana (qui fait partie de la pile Elasticsearch ) pour créer un tableau de bord personnalisé afin de le visualiser pour vos données importantes. De plus, vous pouvez utiliser la fonction d'agrégation Elasticsearch pour effectuer des requêtes de business intelligence complexes basées sur des données.

Pour le reste de ce tutoriel, je vais vous guider à travers le processus de démarrage et d'exécution de Elasticsearch et vous montrer quelques opérations de base, telles que : l'indexation, la recherche et modifier les données. À la fin de ce didacticiel, vous aurez une compréhension plus approfondie de ce qu'est Elasticsearch et de son fonctionnement. J'espère que vous serez inspiré pour l'utiliser à la fois pour créer des applications de recherche sophistiquées et pour découvrir des éléments utiles à partir de vos données.

Concepts de base (Concepts de base)

Certains concepts sont au cœur de Elasticsearch . Comprendre ces concepts dès le début facilitera grandement l'apprentissage ultérieur.

Presque temps réel (NRT)

Elasticsearch est une recherche en temps quasi réel plate-forme. Cela signifie qu'il n'y a qu'un léger délai (généralement 1 seconde) entre le moment où un document est indexé et le moment où il devient consultable.

Cluster (Cluster)

Un cluster est un ensemble d'un ou plusieurs nœuds (serveurs) qui s'unissent pour stocker toutes les données, et l'indexation et les opérations de recherche peuvent être effectuées sur tous les nœuds. Les clusters sont identifiés par un nom unique, par défaut « elasticsearch ». Puisqu'un nœud ne peut appartenir qu'à un seul cluster et rejoindre le cluster en fonction du nom du cluster. Le nom est donc important.

N'utilisez pas le même nom de cluster dans différents environnements, sinon le mauvais cluster pourrait être ajouté. Par exemple, vous pouvez utiliser les noms de cluster, logging-dev , logging-stage et logging-prod dans les environnements de développement, de préparation et de production respectivement.

Notez qu'un cluster avec un seul nœud est valide et parfait. Il est également possible d'avoir plusieurs clusters indépendants, chacun avec son propre nom de cluster unique.

Node (Node)

Node est un serveur unique qui fait partie du cluster, stocke les données et participe à l'indexation et à la recherche du cluster . Comme le cluster, les nœuds se distinguent également par des noms uniques. Le nom par défaut est un UUID (Universally Unique IDentifier) ​​aléatoire, qui sera défini sur le nœud au démarrage du serveur. Vous pouvez également personnaliser le nom du nœud si vous ne souhaitez pas utiliser la valeur par défaut. Les noms sont très importants pour les administrateurs, car ils vous aident à identifier les nœuds correspondant à chaque serveur du cluster.

Les nœuds peuvent rejoindre le cluster spécifié en configurant le nom du cluster. Par défaut, les nœuds rejoignent un cluster appelé elasticsearch , ce qui signifie que si vous démarrez un grand nombre de nœuds dans le réseau et s'ils peuvent tous communiquer entre eux, ils seront automatiquement ajoutés à un cluster A. cluster nommé elasticsearch .

Index

Index est un ensemble de documents présentant certaines caractéristiques similaires. Par exemple, l'index des données client, l'index du catalogue de produits et l'index des données de commande. Un index est identifié par un nom (qui doit être entièrement en minuscules) utilisé lors de l'indexation, de la recherche, de la mise à jour et de la suppression de documents. Au sein d'un seul cluster, vous pouvez définir autant d'index que nécessaire.

Type

Un index peut définir un ou plusieurs types. Un type est une catégorie/partition logique d’un index, quelle que soit la façon dont vous voulez le comprendre. En règle générale, un type est défini pour les documents comportant un ensemble commun de champs. Par exemple, une plateforme de blogs peut stocker toutes les données dans un seul index. Dans cet index, vous pouvez définir les types de données utilisateur, les types de données de blog et les types de données de commentaires.

Document

Le document est l'unité de base qui peut être indexée. Par exemple, utilisez un document pour enregistrer des données sur un client, ou pour enregistrer des données sur un seul produit, ou pour enregistrer des données sur une seule commande. Les documents sont représentés en JSON. Un grand nombre de documents peuvent être stockés dans un index/type. Il convient de noter que bien que le document soit essentiellement stocké dans l'index, il est en réalité indexé/attribué à un type dans l'index.

Fragments et répliques

Un index peut stocker des quantités massives de données, qui peuvent dépasser la capacité du disque dur d'un seul nœud. Par exemple, un index stocke 1 milliard de documents et occupe 1 To d'espace disque. Le disque dur d'un seul nœud peut ne pas suffire à stocker une si grande quantité de données. Même s'il peut être stocké, cela peut ralentir le processus. traitement par le serveur des demandes de recherche.

Afin de résoudre ce problème, elasticsearch fournit la fonction de sharding, ce qui signifie subdivision d'index. Lors de la création d'un index, vous pouvez simplement définir le nombre de fragments requis. Chaque fragment lui-même possède toutes les fonctions d'un index et peut être stocké sur n'importe quel nœud du cluster.

Le partage est important pour deux raisons principales :

  • Il vous permet de diviser/mettre à l'échelle votre volume de contenu horizontalement

  • Il vous permet de distribuer des opérations sur des fragments sur plusieurs nœuds en parallèle, améliorant ainsi les performances ou le débit.

Le mécanisme de distribution des fragments et la manière dont leurs documents sont regroupés dans les requêtes de recherche sont entièrement gérés par Elasticsearch et sont transparents pour l'utilisateur.

Dans un environnement réseau/cloud où une panne peut survenir à tout moment, le partitionnement peut être très utile et un mécanisme de basculement est fortement recommandé pour empêcher les fragments/nœuds de se déconnecter ou de disparaître. Pour ce faire, elasticsearch permet de réaliser une ou plusieurs copies des fragments de l'index, qui sont des fragments dits répliqués, ou simplement des répliques.

Les répliques sont importantes pour deux raisons principales :

  • Pour fournir une haute disponibilité en cas de panne d'un fragment/nœud. Par conséquent, il est important de noter qu’une réplique ne peut pas être allouée sur le même nœud que la partition originale/primaire à partir de laquelle elle est copiée.

  • Il vous permet d'augmenter le volume/débit de recherche puisque les recherches peuvent être effectuées en parallèle sur toutes les répliques.

En résumé, chaque index peut être divisé en plusieurs fragments. Chaque index peut également être répliqué zéro fois (c'est-à-dire aucune copie) ou plusieurs fois. Une fois répliqué, chaque index aura une partition principale (la partition d'origine qui a été répliquée) et une partition secondaire (une copie de la partition principale). Le nombre de fragments et de répliques peut être défini par index lors de la création de l'index. Après avoir créé un index, vous pouvez modifier dynamiquement le nombre de réplicas à tout moment, mais vous ne pouvez pas modifier le nombre de fragments par la suite.

Par défaut, chaque index se verra attribuer 5 fragments principaux et 1 fragment de réplique, ce qui signifie que si vous avez deux nœuds dans le cluster, votre index aura 5 fragments de fragments principaux et 5 fragments répliqués, pour un total de 10 fragments.

Chaque fragment elasticsearch est un index Lucene. Il peut y avoir de nombreux documents dans un index Lucene à partir de LUCENE-5843, jusqu'à 2 147 483 519 (= Integer.MAX_VALUE - 128) vous pouvez utiliser l'API _cat/shards. surveille la taille des fragments.

Résumé

1. Pourquoi ne pas utiliser une base de données relationnelle pour la recherche ? Étant donné que la base de données est utilisée pour mettre en œuvre la recherche, les performances seront très médiocres et la recherche par segmentation de mots ne pourra pas être effectuée.

2. Que sont la recherche en texte intégral, l'index inversé et Lucene ? Les personnes précédentes l'ont déjà résumé, veuillez vous référer à [Vous apprendre étape par étape la récupération de texte intégral] Une exploration préliminaire d'Apache Lucene

3. Caractéristiques d'Elasticsearch

  • Il peut être distribué en clusters et traiter des données massives. Effectuer un traitement en temps quasi réel

  • Il est très simple à utiliser immédiatement pour les utilisateurs ; Si la quantité de données n'est pas importante, l'opération ne sera pas trop compliquée ;

  • possède des fonctions que les bases de données relationnelles n'ont pas, comme la recherche en texte intégral, le traitement des synonymes, le classement par pertinence. , analyse de données complexes et traitement massif de données Traitement en temps quasi réel

  • Basé sur Lucene, il masque la complexité et fournit une interface API reposante simple et facile à utiliser et une interface API Java ;

4. Le concept de base d'elasticsearch

  • Cluster : le cluster contient plusieurs nœuds et le cluster auquel appartient chaque nœud est déterminé par la configuration. (la valeur par défaut est elasticsearch)

  • Nœud : Un nœud dans le cluster Le nœud rejoindra automatiquement le cluster nommé "elasticsearch" par défaut. Un service elasticsearch est un nœud. Par exemple, si une machine démarre deux services es, il y aura deux nœuds.

  • Index : Index, équivalent à la base de données mysql, contient un ensemble de données de documents avec une structure similaire.

  • Type : Type, équivalent à une table mysql, une classification logique des données dans l'index.

  • Document : Le document, équivalent à une ligne d'enregistrements dans la table MySQL, est la plus petite unité de données d'ES.

  • fragmentation : Sharding. Une seule machine ne peut pas stocker une grande quantité de données. Elle peut diviser les données d'un index en plusieurs fragments et les distribuer pour les stocker sur plusieurs serveurs.

  • réplique : Réplique afin d'éviter les temps d'arrêt et la perte de fragments, la configuration minimale de haute disponibilité est de 2 serveurs.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn