Concepts de base ES et plugin de tokenizer IK

Concepts de base ES et plugin de tokenizer IK

Un concept de base ES

  1. indice
  2. Type de champ (mappage)
  3. Des documents

Que sont les clusters, les nœuds, les index, les types, les documents, les fragments et les mappages?

Elasticsearch est une comparaison objective entre la base de données relationnelle orientée document et elasticsearch! Tout est JSON!

DB relationnelle Elasticsearch
Base de données Index
les tables les types
Lignes des documents
Des champs des champs

Elasticsearch (cluster) peut contenir plusieurs index (bases de données), chaque index peut contenir plusieurs types (tables), chaque type contient plusieurs documents (lignes) et chaque document contient plusieurs champs (colonne).

Conception physique:

Elasticsearch divise chaque index en plusieurs fragments en arrière-plan, et chaque fragment peut être migré entre différents serveurs du cluster

Une personne est un cluster! Le nom du cluster par défaut est elaticsearh

Insérez la description de l'image ici

Conception logique:

Un type d'index contient plusieurs documents, tels que document 1, document 2. Lorsque nous indexons un document, nous pouvons le trouver dans cet ordre: index ▷ type ▷ ID de document, grâce à cette combinaison, nous pouvons indexer un document spécifique. Remarque: ID ne doit pas nécessairement être un entier, en fait c'est une chaîne.

Documentation

Est notre morceau de données

user
1  zhangsan  18
2  latteit  3

J'ai dit plus tôt qu'elasticsearch est orienté document, ce qui signifie que la plus petite unité d'indexation et de recherche de données est constituée de documents. Dans elasticsearch, les documents ont plusieurs attributs importants:

  • Autonome, un document contient à la fois des champs et des valeurs correspondantes, c'est-à-dire qu'il contient à la fois clé: valeur!
  • Cela peut être hiérarchique. Un document contient des auto-documents. C'est de là que viennent les entités logiques complexes! {Est un objet json! Fastjson effectue une conversion automatique! }
  • Structure flexible, les documents ne reposent pas sur des modèles prédéfinis. Nous savons que dans les bases de données relationnelles, les champs doivent être définis à l'avance avant de pouvoir être utilisés. Dans elasticsearch, les champs sont très flexibles. Parfois, nous pouvons ignorer les champs ou les ajouter dynamiquement, un nouveau domaine.

Bien que nous puissions ajouter ou ignorer certains champs à volonté, le type de chaque champ est très important. Par exemple, un type de champ âge peut être une chaîne ou un entier. Parce qu'elasticsearch enregistrera le mappage entre les champs et les types et d'autres paramètres. Ce mappage est spécifique à chaque type de chaque mappage, c'est pourquoi dans elasticsearch, le type est parfois appelé le type de mappage.

Types de

Insérez la description de l'image ici

Les types sont des conteneurs logiques pour les documents, tout comme les bases de données relationnelles, les tables sont des conteneurs pour les lignes. La définition du champ dans le type est appelée un mappage, par exemple, le nom est mappé à un type de chaîne. Nous disons que les documents sont sans schéma, ils n'ont pas besoin d'avoir tous les champs définis dans le mappage, comme l'ajout d'un nouveau champ, alors comment elasticsearch fait-il? Elasticsearch ajoutera automatiquement le nouveau champ au mappage, mais ce champ est pas sûr Elasticsearch commencera à deviner de quel type il s'agit. Si la valeur est 18, alors elasticsearch le considérera comme plastique. Mais elasticsearch peut ne pas deviner correctement, donc le moyen le plus sûr est de définir le mappage requis à l'avance. Ceci est identique à la base de données relationnelle. Définissez d'abord les champs, puis utilisez-les.

indice

C'est la base de données!

Un index est un conteneur de type mappage et un index dans elasticsearch est une très grande collection de documents. L'index stocke les champs et autres paramètres du type de mappage. Ensuite, ils sont stockés sur chaque fragment. Étudions le fonctionnement du sharding.

Conception physique: fonctionnement des nœuds et des fragments

Insérez la description de l'image ici

Un cluster possède au moins un nœud, et un nœud est un processus elasricsearch. Le nœud peut avoir plusieurs index. Par défaut, si vous créez un index, l'index sera composé de 5 fragments (partition primaire, également appelée partition principale). Oui, chaque partition principale aura une réplique (partition de réplique, également appelée partition de réplication)

Insérez la description de l'image ici

La figure ci-dessus est un cluster avec 3 nœuds. Vous pouvez voir que la partition principale et la partition de réplication correspondante ne seront pas dans le même nœud. Cela aidera un nœud à se raccrocher et les données ne seront pas perdues. En fait, une tranche est un index Lucene, un répertoire de fichiers contenant un index inversé La structure de l' index inversé permet à elasticsearch de vous indiquer quels documents contiennent des mots-clés spécifiques sans scanner tous les documents. Mais qu'est-ce que l'indice inversé?

Index inversé

Elasticsearch utilise une structure appelée index inversé, utilisant le câble inversé Lucene comme couche inférieure. Cette structure est adaptée à une recherche rapide en texte intégral. Un index se compose d'une liste de tous les documents non répétés. Pour chaque mot, il existe une liste de documents le contenant. Par exemple, il existe désormais deux documents, chacun contenant le contenu suivant:

Study every day, good good up to forever  # 文档1包含的内容
To forever, study every day, good good up # 文档2包含的内容

Afin de créer un index inversé, nous divisons d'abord chaque document en mots indépendants (ou terme ou jetons), puis créons une liste triée de tous les termes uniques, puis listons chaque terme Dans quel document apparaît:

terme doc_1 doc_2
Étudier X
À X X
chaque
pour toujours
journée
étudier X
bon
chaque
à X
en haut

Maintenant, nous essayons de rechercher pour toujours, il suffit de regarder le score du document contenant chaque terme

terme doc_1 doc_2
à ×
pour toujours
total 2 1

Les deux documents correspondent, mais le premier document correspond plus étroitement que le second. S'il n'y a pas d'autres conditions, maintenant, les deux documents contenant des mots-clés seront renvoyés.

Regardons un autre exemple, par exemple, nous recherchons des articles de blog par balises de blog. Ensuite, la liste d'index inversée est une telle structure:
Insérez la description de l'image ici

Si vous souhaitez rechercher des articles avec des balises python, il sera beaucoup plus rapide de trouver les données après l'index inversé que de trouver toutes les données d'origine. Vérifiez simplement la colonne d'étiquette et obtenez l'ID d'article associé. Filtrez complètement toutes les données non pertinentes et améliorez l'efficacité!

Comparaison de l'indice elasticsearch et de l'indice Lucene

Dans elasticsearch, le terme index (bibliothèque) est fréquemment utilisé, et c'est l'usage du terme. Dans elasticsearch, l'index est divisé en plusieurs fragments, et chaque fragment est un index Lucene. Ainsi, un index elasticsearch est composé de plusieurs index Lucene . Ne demandez pas pourquoi, qui a fait qu'elasticsearch utilise Lucene comme couche inférieure! Si rien n'est spécifié, en ce qui concerne les index, cela fait référence aux index elasticsearch.

Deux plug-in de tokenizer IK

Qu'est-ce que le tokenizer IK?

Segmentation de mots: divisez un paragraphe de chinois ou d'autres en mots-clés. Lors de la recherche, nous segmenterons nos propres informations, nous segmenterons les données dans la base de données ou la bibliothèque d'index, puis effectuerons une opération de correspondance. Par défaut, la segmentation des mots chinois traite chacun caractère comme un mot. Par exemple, "Je vois One Piece" sera divisé en "我", "看", "海", "voleur", "王", ce qui ne répond manifestement pas aux exigences. Nous devons donc installez le segmenteur de mots chinois ik pour résoudre ce problème.

Si vous souhaitez utiliser le chinois, il est recommandé d'utiliser le tokenizer ik!

IK fournit deux algorithmes de segmentation de mots: ik_smart et ik_max_word, où ik_smart est la moindre segmentation, et ik_max_word est la segmentation la plus fine!

installation

  1. https://github.com/medcl/elasticsearch-analysis-ik

  2. Une fois le téléchargement terminé, insérez-le dans notre plug-in elasticsearch!

    Insérez la description de l'image ici

  3. Redémarrez et observez ES, vous pouvez voir que le tokenizer ik est chargé!

    Insérez la description de l'image ici

  4. elasticsearch-plugin peut utiliser cette commande pour afficher les plugins chargés

Insérez la description de l'image ici

  1. Utilisez kibana pour tester!

Afficher différents effets de segmentation de mots

Où ik_smart est la moindre segmentation

Insérez la description de l'image ici

ik_max_word est la division la plus fine! Possibilité d'épuiser le lexique! dictionnaire!

Insérez la description de l'image ici

Nous avons tellement tapé comme One Piece

J'ai trouvé le problème: One Piece a été démonté!

Ce genre de mots dont vous avez besoin doit être ajouté au dictionnaire de notre tokenizer par vous-même!

Le tokenizer ik ajoute sa propre configuration!

Insérez la description de l'image ici
Insérez la description de l'image ici

Redémarrez et voyez les détails!

Insérez la description de l'image ici

Testez à nouveau One Piece et voyez l'effet!

Normal, non séparé
Insérez la description de l'image ici

Je suppose que tu aimes

Origine blog.csdn.net/qq_43803285/article/details/114779298
conseillé
Classement