Le plug-in IK Analyzer (analysis-ik) assure la tokenisation du texte chinois pour Alibaba Cloud Elasticsearch grâce à plusieurs types de dictionnaires intégrés. Personnalisez ou étendez les dictionnaires pour améliorer la précision de la tokenisation et chargez dynamiquement les fichiers de dictionnaire depuis Object Storage Service (OSS) pour une gestion à distance.
Informations générales
Le plug-in IK Analyzer se compose de trois éléments : les tokenizeurs, les fichiers de dictionnaire et les mécanismes de mise à jour.
La version du plug-in IK Analyzer doit correspondre à celle du cluster Elasticsearch. Par exemple, si votre cluster exécute la version 8.17, le plug-in IK Analyzer est également en version 8.17.
Tokeniseurs : segmentent le texte chinois en jetons significatifs et contrôlent la granularité de la tokenisation.
Fichiers de dictionnaire : fournissent le vocabulaire utilisé par les tokenizeurs pour la segmentation. Les dictionnaires sont personnalisables et extensibles.
Méthodes de mise à jour des dictionnaires : prennent en charge les mises à jour à froid et à chaud, vous permettant d'adapter les dictionnaires aux besoins métier.
Règles de tokenisation
L'analyseur IK propose deux modes de tokenisation :
ik_max_word : divise le texte avec la granularité la plus fine. Idéal pour les requêtes basées sur des termes.
ik_smart : divise le texte avec une granularité plus large. Idéal pour les requêtes basées sur des expressions.
Types de dictionnaires
L'analyseur IK prend en charge les types de dictionnaires suivants.
|
Type de dictionnaire |
Description |
Exigences relatives aux fichiers |
Méthodes de mise à jour prises en charge |
|
Dictionnaire principal |
Le dictionnaire principal par défaut est Lorsque vous configurez un dictionnaire principal pour un index ES, le cluster rapproche les données entrantes de ce dictionnaire lors de l'indexation. Les termes correspondants deviennent recherchables via les mots-clés associés. |
Un mot par ligne, enregistré dans un fichier |
|
|
Dictionnaire de mots vides |
Le dictionnaire de mots vides par défaut est Lorsque vous configurez un dictionnaire de mots vides pour un index ES, le cluster filtre les termes correspondants lors de l'indexation. Les termes filtrés sont exclus de l'index inversé. |
||
|
Dictionnaire de prépositions |
Le dictionnaire de prépositions par défaut est |
Non applicable |
|
|
Dictionnaire de quantificateurs |
Le dictionnaire de quantificateurs par défaut est |
||
|
suffix.dic |
Stocke les suffixes pour aider le tokenizer à segmenter les mots comportant des suffixes. |
Non applicable |
Mise à jour non prise en charge |
|
surname.dic |
Stocke les noms de famille chinois courants pour aider le tokenizer à identifier les noms. |
Méthodes de mise à jour des dictionnaires
Mettez à jour les dictionnaires si les valeurs par défaut ne répondent pas à vos besoins. L'analyseur IK prend en charge les méthodes suivantes.
|
Méthode de mise à jour |
Description |
Scénarios |
|
Redémarre le cluster ES pour appliquer les modifications du dictionnaire à tous les nœuds. Les fichiers téléchargés sont distribués à tous les nœuds ES, qui redémarrent ensuite. Les modifications prennent effet après la fin du redémarrage. |
|
|
Remarque
Prend uniquement en charge la mise à jour des dictionnaires principaux ou de mots vides. Important
Lorsque vous configurez la mise à jour à chaud pour la première fois ou que vous modifiez la liste des fichiers de dictionnaire (ajout, suppression ou renommage de fichiers de dictionnaire), le cluster redémarre. Seules les modifications ultérieures portant uniquement sur le contenu de fichiers de dictionnaire existants dont les noms restent inchangés prennent effet dynamiquement sans redémarrage. Planifiez ces opérations pendant les heures creuses pour éviter d'impacter votre activité. |
|
Prérequis
-
L'instance est dans l'état Normal. Afficher l'état de l'instance sur la page des détails.
RemarqueCette rubrique utilise une instance Alibaba Cloud ES exécutant la version
7.10.0. Les interfaces de console et les fonctionnalités peuvent varier selon les versions. -
(Facultatif) Si vous prévoyez de mettre à jour les dictionnaires, effectuez d'abord les étapes suivantes.
Pour effectuer une mise à jour via Upload OSS File : commencez par créer un compartiment OSS et télécharger les fichiers de dictionnaire requis.
Pour effectuer une mise à jour via Upload On-premises File : enregistrez d'abord les fichiers de dictionnaire requis sur votre machine locale.
Mettre à jour les dictionnaires IK
Mettez à jour les dictionnaires IK si les valeurs par défaut ne répondent pas à vos besoins. Consultez la méthode de mise à jour avant de poursuivre. Pour les index déjà configurés avec la tokenisation IK, les mises à jour de dictionnaire s'appliquent uniquement aux nouvelles données. Pour appliquer les modifications aux données existantes, recréez l'index.
Mise à jour à froid
Pour effectuer une mise à jour à froid :
Les mises à jour à froid redémarrent le cluster. Effectuez cette opération pendant les heures creuses.
-
Accédez à la page des détails de l'instance.
Connectez-vous à la console Alibaba Cloud Elasticsearch.
Dans le volet de navigation de gauche, cliquez sur Elasticsearch Clusters.
Dans la barre de menu supérieure, sélectionnez un groupe de ressources et une région.
Dans la liste des instances Elasticsearch, cliquez sur l'ID de l'instance cible pour accéder à sa page de détails.
-
Accédez à la page de mise à jour à froid du plug-in
analysis-ik.Dans le volet de navigation de gauche, choisissez .
Sous l'onglet Built-in Plug-ins, localisez le plug-in
analysis-iket cliquez sur Standard Update dans la colonne Actions.
-
Effectuez la mise à jour à froid.
-
Dans la boîte de dialogue Configure IK Dictionaries - Standard Update, cliquez sur Edit à côté du dictionnaire cible, téléchargez le fichier de dictionnaire requis selon les instructions, puis cliquez sur Save.
Vous pouvez télécharger des fichiers de dictionnaire en utilisant l'une des méthodes suivantes :
Upload On-premises File : Cliquez sur l'icône
ou faites glisser et déposez votre fichier local selon les instructions.-
Upload OSS File : Saisissez le nom du compartiment et le nom du fichier de dictionnaire, puis cliquez sur Add.
Le compartiment et l'instance Alibaba Cloud ES doivent se trouver dans la même région.
Les fichiers de dictionnaire OSS ne sont pas synchronisés automatiquement. Si le fichier source change, effectuez une mise à jour du dictionnaire pour appliquer les modifications.
RemarqueChaque type de dictionnaire ne prend en charge qu'un seul fichier au format
DIC. Le fichier téléchargé remplace le dictionnaire d'origine.Les noms des fichiers de dictionnaire doivent se terminer par
.dic. Les noms de fichiers peuvent contenir des lettres, des chiffres et des traits de soulignement, et ne doivent pas dépasser 30 caractères.-
Pour restaurer un dictionnaire à son fichier par défaut, téléchargez le fichier par défaut et rechargez-le. Obtenez les fichiers de dictionnaire par défaut à partir des liens suivants :
-
Cochez la case d'acceptation des risques et cliquez sur OK pour redémarrer l'instance.
Une fois l'instance redémarrée, la mise à jour du dictionnaire est terminée.
-
-
(Facultatif) Testez si la mise à jour du dictionnaire a pris effet.
-
Cliquez sur l'icône
dans le coin supérieur gauche et choisissez pour ouvrir l'éditeur de code.Exécutez le code suivant pour effectuer une tokenisation à granularité large sur le texte d'entrée
Chinese character input method for computers.RemarqueEn pratique, remplacez la valeur
textpar un mot de votre dictionnaire.GET _analyze { "analyzer": "ik_smart", "text": "Chinese character input method for computers" }La réponse attendue est la suivante.
{ "tokens" : [ { "token" : "computer", "start_offset" : 0, "end_offset" : 3, "type" : "CN_WORD", "position" : 0 }, { "token" : "Chinese character input", "start_offset" : 3, "end_offset" : 7, "type" : "CN_WORD", "position" : 1 }, { "token" : "method", "start_offset" : 7, "end_offset" : 9, "type" : "CN_WORD", "position" : 2 } ] }
Mise à jour à chaud
Pour effectuer une mise à jour à chaud :
Les modifications portant uniquement sur le contenu de fichiers de dictionnaire existants dont les noms restent inchangés ne redémarrent pas le cluster. Si les noms des fichiers de dictionnaire ou le nombre de fichiers changent, ou si vous configurez la mise à jour à chaud pour la première fois, le cluster redémarre. Effectuez cette opération pendant les heures creuses pour minimiser l'impact sur votre activité. Après le redémarrage, le dictionnaire prend effet automatiquement.
-
Accédez à la page des détails de l'instance.
Connectez-vous à la console Alibaba Cloud Elasticsearch.
Dans le volet de navigation de gauche, cliquez sur Elasticsearch Clusters.
Dans la barre de menu supérieure, sélectionnez un groupe de ressources et une région.
Dans la liste des instances Elasticsearch, cliquez sur l'ID de l'instance cible pour accéder à sa page de détails.
-
Accédez à la page de mise à jour à chaud du plug-in
analysis-ik.Dans le volet de navigation de gauche, choisissez .
Sous l'onglet Built-in Plug-ins, localisez le plug-in
analysis-iket cliquez sur Rolling Update dans la colonne Actions.
-
Effectuez la mise à jour à chaud.
-
Dans la boîte de dialogue Configure IK Dictionaries - Rolling Update, cliquez sur Edit à côté du dictionnaire cible, téléchargez le fichier de dictionnaire requis selon les instructions, puis cliquez sur Save.
Vous pouvez télécharger des fichiers de dictionnaire en utilisant l'une des méthodes suivantes :
Upload On-premises File : Cliquez sur l'icône
ou faites glisser et déposez votre fichier local selon les instructions.-
Upload OSS File : Saisissez le nom du compartiment et le nom du fichier de dictionnaire, puis cliquez sur Add.
Le compartiment et l'instance Alibaba Cloud ES doivent se trouver dans la même région.
Les fichiers de dictionnaire OSS ne sont pas synchronisés automatiquement. Si le fichier source change, effectuez une mise à jour du dictionnaire pour appliquer les modifications.
RemarqueVous pouvez télécharger plusieurs fichiers de dictionnaire. Les noms de fichiers doivent se terminer par
.dic. Les noms de fichiers peuvent contenir des lettres, des chiffres et des traits de soulignement, et ne doivent pas dépasser 30 caractères.Pour modifier un fichier de dictionnaire téléchargé, cliquez sur l'icône
à côté de celui-ci pour télécharger et éditer le fichier. Supprimez ensuite le fichier d'origine et rechargez le fichier mis à jour. Après avoir supprimé le fichier d'origine, cliquez sur Save ; sinon, le système signalera qu'un fichier portant le même nom existe déjà.
-
Cliquez sur OK et attendez que les nœuds ES terminent le chargement du dictionnaire.
Les nœuds ES chargent automatiquement les fichiers de dictionnaire. Les temps de chargement varient selon les nœuds — attendez que tous les nœuds aient terminé.
-
-
(Facultatif) Testez si la mise à jour du dictionnaire a pris effet.
-
Cliquez sur l'icône
dans le coin supérieur gauche et choisissez pour ouvrir l'éditeur de code.Exécutez le code suivant pour effectuer une tokenisation à granularité large sur le texte d'entrée
Chinese character input method for computers.RemarqueEn pratique, remplacez la valeur
textpar un mot de votre dictionnaire.GET _analyze { "analyzer": "ik_smart", "text": "Chinese character input method for computers" }La réponse attendue est la suivante.
{ "tokens" : [ { "token" : "computer", "start_offset" : 0, "end_offset" : 3, "type" : "CN_WORD", "position" : 0 }, { "token" : "Chinese character input", "start_offset" : 3, "end_offset" : 7, "type" : "CN_WORD", "position" : 1 }, { "token" : "method", "start_offset" : 7, "end_offset" : 9, "type" : "CN_WORD", "position" : 2 } ] }
Utiliser le plug-in IK Analyzer
Tokenisez le texte en utilisant le tokenizer IK avec un filtre Pinyin.
-
Accédez à la page Developer Tools de Kibana pour votre instance ES.
Cliquez sur l'icône
dans le coin supérieur gauche et choisissez pour ouvrir l'éditeur de code.
-
Créez un index et configurez le tokenizer IK et le filtre Pinyin.
Exécutez la commande suivante pour créer l'index
ik_pinyinavec un analyseur personnaliséik_pinyin_analyzer. Cet analyseur utilise la tokenisationik_max_wordet un filtre Pinyin pour convertir les termes chinois en Pinyin.RemarqueLe filtre Pinyin convertit les jetons en Pinyin après la fin de la tokenisation chinoise.
PUT ik_pinyin { "settings":{ "analysis": { "filter": { "my_pinyin" : { "type" : "pinyin", "keep_separate_first_letter" : false, "keep_full_pinyin" : true, "keep_original" : true, "limit_first_letter_length" : 16, "lowercase" : true, "remove_duplicated_term" : true } }, "analyzer": { "ik_pinyin_analyzer": { "type": "custom", "tokenizer": "ik_max_word", "filter": ["my_pinyin"] } } } }, "mappings":{ "properties":{ "text":{ "type" : "text", "analyzer" : "ik_pinyin_analyzer" } } } }Les paramètres clés sont décrits ci-dessous.
-
Filtre Pinyin (paramètre
filter)RemarqueTous les paramètres disponibles sont documentés dans Pinyin Analysis for Elasticsearch.
Paramètre
Description
my_pinyin
Nom du filtre Pinyin personnalisé.
type
Définissez sur
pinyinpour utiliser un filtre Pinyin.keep_separate_first_letter
Définissez sur
falsepour exclure les jetons individuels de première lettre pour chaque caractère.keep_full_pinyin
Définissez sur
truepour inclure les formes complètes en Pinyin.keep_original
Définissez sur
truepour conserver le texte d'entrée original.limit_first_letter_length
Définissez sur
16pour limiter les séquences de premières lettres à 16 caractères.lowercase
Définissez sur
truepour afficher le Pinyin en minuscules.remove_duplicated_term
Définissez sur
truepour supprimer les termes dupliqués, par exemple pour éviter"zh, zh". -
Analyseur (paramètre
analyzer) :Paramètre
Description
ik_pinyin_analyzer
Nom de l'analyseur personnalisé.
type
Définissez sur
custompour définir un analyseur personnalisé.tokenizer
Définissez sur
ik_max_wordpour diviser le texte avec la granularité la plus fine.filter
Définissez sur
my_pinyinpour appliquer le filtre Pinyinmy_pinyin.Un résultat réussi est présenté ci-dessous.
{ "acknowledged": true, "shards_acknowledged": true, "index": "ik_pinyin" }
-
-
Vérifiez les résultats de la tokenisation.
Exécutez le code suivant pour tokeniser le texte d'entrée
This is a test.GET ik_pinyin/_analyze { "text": "This is a test", "analyzer": "ik_pinyin_analyzer" }La réponse attendue est la suivante.
{ "tokens" : [ { "token" : "zhe", "start_offset" : 0, "end_offset" : 2, "type" : "CN_WORD", "position" : 0 }, { "token" : "this is", "start_offset" : 0, "end_offset" : 2, "type" : "CN_WORD", "position" : 0 }, { "token" : "zs", "start_offset" : 0, "end_offset" : 2, "type" : "CN_WORD", "position" : 0 }, { "token" : "shi", "start_offset" : 0, "end_offset" : 2, "type" : "CN_WORD", "position" : 1 }, { "token" : "ge", "start_offset" : 2, "end_offset" : 3, "type" : "CN_CHAR", "position" : 2 }, { "token" : "one", "start_offset" : 2, "end_offset" : 3, "type" : "CN_CHAR", "position" : 2 }, { "token" : "g", "start_offset" : 2, "end_offset" : 3, "type" : "CN_CHAR", "position" : 2 }, { "token" : "ce", "start_offset" : 3, "end_offset" : 5, "type" : "CN_WORD", "position" : 3 }, { "token" : "shi", "start_offset" : 3, "end_offset" : 5, "type" : "CN_WORD", "position" : 4 }, { "token" : "test", "start_offset" : 3, "end_offset" : 5, "type" : "CN_WORD", "position" : 4 }, { "token" : "cs", "start_offset" : 3, "end_offset" : 5, "type" : "CN_WORD", "position" : 4 } ] }
Optimiser la tokenisation pour les mots alphanumériques mixtes
Lorsque vous utilisez le tokenizer ik_max_word, les chaînes alphanumériques mixtes telles que fawjh6bcm peuvent ne pas être tokenisées efficacement pour la recherche. Pour améliorer le rappel, définissez enable_single_word sur true. Cela divise les mots mixtes en jetons à caractère unique, permettant une correspondance au niveau des caractères.
L'exemple suivant crée un analyseur personnalisé avec enable_single_word activé :
PUT my_index
{
"settings": {
"analysis": {
"analyzer": {
"ik_single_char_analyzer": {
"type": "custom",
"tokenizer": "my_ik_tokenizer"
}
},
"tokenizer": {
"my_ik_tokenizer": {
"type": "ik_max_word",
"enable_single_word": true
}
}
}
},
"mappings": {
"properties": {
"content": {
"type": "text",
"analyzer": "ik_single_char_analyzer"
}
}
}
}
|
Paramètre |
Description |
|
enable_single_word |
Définissez sur |
Ce paramètre est également pris en charge dans les environnements Serverless d'Alibaba Cloud Elasticsearch.
Utiliser le tokenizer ngram pour la recherche mixte chinois-anglais
Lors de la recherche de numéros de modèle anglais concaténés (tels que jh6bcm) mélangés à du texte chinois, l'analyseur IK seul peut ne pas produire de jetons efficaces pour la correspondance partielle. Dans ce cas, utilisez le tokenizer ngram pour compléter ou remplacer l'analyseur IK.
Le tokenizer ngram divise le texte en séquences de caractères contiguës de longueur configurable, permettant la correspondance de sous-chaînes.
L'exemple suivant crée un index qui utilise le tokenizer ngram :
PUT my_ngram_index
{
"settings": {
"analysis": {
"tokenizer": {
"my_ngram_tokenizer": {
"type": "ngram",
"min_gram": 2,
"max_gram": 3,
"token_chars": ["letter", "digit"]
}
},
"analyzer": {
"ngram_analyzer": {
"type": "custom",
"tokenizer": "my_ngram_tokenizer"
}
}
}
},
"mappings": {
"properties": {
"model_number": {
"type": "text",
"analyzer": "ngram_analyzer"
}
}
}
}
|
Paramètre |
Description |
|
min_gram |
Longueur minimale en caractères d'un gramme. Valeur par défaut : |
|
max_gram |
Longueur maximale en caractères d'un gramme. Valeur par défaut : |
|
token_chars |
Classes de caractères à inclure dans les jetons. Valeurs valides : |
Pour plus d'informations sur la configuration du tokenizer ngram, consultez Ngram tokenizer.
FAQ
Les mots en majuscules dans les fichiers de synonymes provoquent des erreurs. Que faire ?
L'analyseur IK est sensible à la casse lors du traitement des fichiers de synonymes. Si un fichier de synonymes contient des mots en majuscules (tels que IT), des erreurs d'analyse peuvent se produire lors de l'indexation.
Vous pouvez résoudre ce problème en utilisant l'une des méthodes suivantes.
Convertir tous les synonymes en minuscules : Modifiez votre fichier de synonymes et convertissez toutes les entrées en minuscules avant de les télécharger.
-
Ajouter un filtre de conversion en minuscules à l'analyseur : Ajoutez un filtre
lowercaseavant le filtre de synonymes dans la configuration de votre analyseur pour normaliser le texte avant la correspondance des synonymes. Exemple :PUT my_index { "settings": { "analysis": { "filter": { "my_synonym_filter": { "type": "synonym", "synonyms_path": "your_synonyms.txt" } }, "analyzer": { "ik_synonym_analyzer": { "type": "custom", "tokenizer": "ik_max_word", "filter": ["lowercase", "my_synonym_filter"] } } } } }ImportantLe filtre
lowercasedoit apparaître avant le filtre de synonymes dans la chaîne de filtres afin de garantir que le texte soit converti en minuscules avant que la correspondance des synonymes ne se produise.
Références
API pour la mise à jour à chaud des dictionnaires IK : UpdateHotIkDicts
API pour la mise à jour à froid des dictionnaires IK : UpdateDict