AnalyticDB for MySQL propose six analyseurs intégrés pour les index de texte intégral : AliNLP, IK, Standard, Ngram, Edge_ngram et Pattern. Chaque analyseur utilise une stratégie de tokenisation différente. Choisissez celle qui correspond à vos besoins linguistiques, à votre modèle de recherche (recherche floue, par préfixe ou exacte) et à la nécessité ou non de traiter du texte chinois.
Choisir un analyseur
| Analyseur | Idéal pour | Prise en charge des langues | Dictionnaire personnalisé |
|---|---|---|---|
| AliNLP | Tokenisation basée sur le traitement du langage naturel (NLP) pour le chinois et les langues multiples | Chinois, anglais, indonésien, malais, thaï, vietnamien, français, espagnol | Oui |
| IK | Texte chinois avec granularité configurable | Chinois | Oui |
| Standard | Texte anglais avec filtrage des mots vides | Règles spécifiques à la langue | Oui |
| Ngram | Recherche de sous-chaînes floues | Toutes | Oui |
| Edge_ngram | Recherche par préfixe et saisie semi-automatique | Toutes | Oui |
| Pattern | Tokenisation personnalisée basée sur des délimiteurs via des expressions régulières | Toutes | Non |
Analyseur par défaut selon la version du cluster :
Clusters antérieurs à la version V3.1.4.15 : analyseur AliNLP
Clusters de version V3.1.4.15 ou ultérieure : analyseur IK
Pour vérifier la version mineure de votre cluster, consultez la rubrique Comment afficher la version mineure d'un cluster ?
Spécifier un analyseur
Syntaxe
FULLTEXT INDEX idx_name(`column_name`) [ WITH ANALYZER analyzer_name ] [ WITH DICT tbl_dict_name];
Paramètres
| Paramètre | Description |
|---|---|
idx_name |
Nom de l'index de texte intégral. |
column_name |
Nom de la colonne à indexer. |
WITH ANALYZER analyzer_name |
Analyseur à utiliser. Omettez cette option pour utiliser l'analyseur par défaut. |
WITH DICT tbl_dict_name |
Dictionnaire personnalisé à appliquer. Pour plus de détails, consultez la rubrique Dictionnaires personnalisés pour les index de texte intégral. |
Exemple
L'instruction suivante crée une table comportant six index de texte intégral, un pour chaque analyseur :
CREATE TABLE `tbl_fulltext_demo` (
`id` int,
`content` varchar,
`content_alinlp` varchar,
`content_ik` varchar,
`content_standard` varchar,
`content_ngram` varchar,
`content_edge_ngram` varchar,
FULLTEXT INDEX fidx_c(`content`), -- Default analyzer
FULLTEXT INDEX fidx_alinlp(`content_alinlp`) WITH ANALYZER alinlp,
FULLTEXT INDEX fidx_ik(`content_ik`) WITH ANALYZER ik,
FULLTEXT INDEX fidx_standard(`content_standard`) WITH ANALYZER standard,
FULLTEXT INDEX fidx_ngram(`content_ngram`) WITH ANALYZER ngram,
FULLTEXT INDEX fidx_edge_ngram(`content_edge_ngram`) WITH ANALYZER edge_ngram,
PRIMARY KEY (`id`)
) DISTRIBUTED BY HASH(id);
Aperçu des résultats de tokenisation
Avant de choisir un analyseur, testez la manière dont il tokenise votre texte. Chaque analyseur dispose d'une fonction de test dédiée qui renvoie la liste des jetons pour une chaîne d'entrée donnée.
Ajoutez le préfixe /*+ mode=two_phase*/ à toutes les requêtes de test de tokenisation, sinon elles ne s'exécuteront pas correctement.
Les exemples suivants utilisent la même entrée — 'Hello world' — pour tous les analyseurs, afin que vous puissiez comparer directement leurs résultats :
| Analyseur | Fonction de test | **Résultat pour 'Hello world'** |
|---|---|---|
| AliNLP | fulltext_alinlp_test() |
[hello, , world] |
| IK | fulltext_ik_test() |
[hello, world, or] |
| Standard | fulltext_standard_test() |
[hello, world] |
| Ngram (taille de jeton par défaut : 2) | fulltext_ngram_test() |
[he, el, ll, lo, o , w, wo, or, rl, ld] |
| Edge_ngram (min : 1, max : 2) | fulltext_edge_ngram_test() |
[h, he] |
Utilisation :
/*+ mode=two_phase*/ SELECT fulltext_ik_test('Hello world');
[hello, world, or]
L'analyseur Pattern ne prend pas en charge les tests de tokenisation basés sur SQL.
Analyseur AliNLP
Idéal pour le texte chinois et multilingue. Développé par Alibaba Cloud et DAMO Academy à l'aide de technologies de traitement du langage naturel (NLP), l'analyseur AliNLP segmente le texte en langage naturel continu en éléments significatifs. Il prend en charge les dictionnaires personnalisés pour les entités définies par l'utilisateur et les mots vides.
Langues prises en charge : chinois, anglais, indonésien, malais, thaï, vietnamien, français, espagnol
-
Résultat de la tokenisation pour un texte en anglais :
/*+ mode=two_phase*/ SELECT fulltext_alinlp_test('Hello world');Résultat :
[hello, , world]
Les exemples suivants illustrent les résultats de tokenisation avec les configurations par défaut :
Paramètres de configuration
| Paramètre | Description | Valeur par défaut |
|---|---|---|
FULLTEXT_SPLIT_GRANULARITY |
Granularité de segmentation. Entier compris entre 2 et 8. | 2 |
FULLTEXT_FILTER_ST_CONVERT_ENABLED |
Active la conversion des racines (par exemple, men → man, cars → car). |
false |
FULLTEXT_TOKENIZER_CASE_SENSITIVE |
Indique si la tokenisation est sensible à la casse. | false |
Analyseur IK
Idéal pour le texte chinois. L'analyseur IK est un analyseur chinois léger open source. Il prend en charge deux modes de segmentation — granularité grossière et granularité fine — et accepte les dictionnaires personnalisés pour les entités et les mots vides.
-
Résultat de la tokenisation pour un texte en anglais :
/*+ mode=two_phase*/ SELECT fulltext_ik_test('Hello world');Résultat :
[hello, world, or]
Les exemples suivants illustrent les résultats de tokenisation avec les configurations par défaut :
Paramètres de configuration
| Paramètre | Description | Valeur par défaut |
|---|---|---|
CSTORE_IK_SEGMENTER_USE_SMART_ENABLE |
Mode de segmentation. true = granularité grossière (mode ik_smart) ; false = granularité fine (mode ik_max_word). |
false |
CSTORE_IK_SEGMENTER_LETTER_MIN_LENGTH |
Longueur minimale du segment. Entier compris entre 2 et 16. | 3 |
CSTORE_IK_SEGMENTER_LETTER_MAX_LENGTH |
Longueur maximale du segment. Entier compris entre 2 et 256. | 128 |
Analyseur Standard
Idéal pour le texte anglais. L'analyseur Standard applique des règles spécifiques à la langue : pour l'anglais, il met le texte en minuscules et supprime les mots vides et la ponctuation avant la tokenisation ; pour le chinois, il divise le texte en caractères individuels. Il prend en charge les dictionnaires personnalisés.
-
Résultat de la tokenisation pour un texte en anglais :
/*+ mode=two_phase*/ SELECT fulltext_standard_test('Hello world');Résultat :
[hello, world]
Les exemples suivants illustrent les résultats de tokenisation avec les configurations par défaut :
Paramètres de configuration
| Paramètre | Description | Valeur par défaut |
|---|---|---|
FULLTEXT_MAX_TOKEN_LENGTH |
Longueur maximale du jeton. Entier compris entre 1 et 1 048 576. | 255 |
Analyseur Ngram
Idéal pour la recherche de sous-chaînes floues. L'analyseur Ngram divise le texte en toutes les sous-chaînes possibles d'une longueur fixe, ce qui le rend efficace pour les requêtes de correspondance partielle. Il prend en charge les dictionnaires personnalisés.
-
Résultat de la tokenisation pour un texte en anglais :
/*+ mode=two_phase*/ SELECT fulltext_ngram_test('Hello world');Résultat :
[he, el, ll, lo, o , w, wo, or, rl, ld]
Les exemples suivants illustrent les résultats de tokenisation avec les configurations par défaut :
Paramètres de configuration
| Paramètre | Description | Valeur par défaut |
|---|---|---|
FULLTEXT_NGRAM_TOKEN_SIZE |
Longueur du jeton. Entier compris entre 1 et 8. | 2 |
Analyseur Edge_ngram
Idéal pour la recherche par préfixe et la saisie semi-automatique (recherche pendant la frappe). L'analyseur Edge_ngram génère des jetons préfixes de longueur croissante — par exemple, h, puis he — ce qui le rend idéal pour la correspondance des mots depuis le début. Il prend en charge les dictionnaires personnalisés.
Conseil : Edge_ngram fonctionne bien lorsque le terme de recherche apparaît au début des mots. Pour la correspondance floue de sous-chaînes n'importe où dans le texte, utilisez plutôt l'analyseur Ngram.
-
Résultats de la tokenisation d'un texte en anglais.
/*+ mode=two_phase*/ SELECT fulltext_edge_ngram_test('Hello world');Résultat :
[h, he]
Les exemples suivants illustrent les résultats de tokenisation avec les configurations par défaut :
Paramètres de configuration
| Paramètre | Description | Valeur par défaut |
|---|---|---|
FULLTEXT_MIN_GRAM_SIZE |
Longueur minimale du préfixe. Entier compris entre 1 et 8. | 1 |
FULLTEXT_MAX_GRAM_SIZE |
Longueur maximale du préfixe. Entier compris entre 1 et 16. Doit être supérieur à FULLTEXT_MIN_GRAM_SIZE. |
2 |
Analyseur Pattern
Idéal pour les délimiteurs personnalisés. L'analyseur Pattern tokenise le texte en le divisant selon un motif d'expression régulière que vous définissez. Il ne prend pas en charge les dictionnaires personnalisés ni les tests de tokenisation basés sur SQL.
Syntaxe
FULLTEXT INDEX fidx_name(`column_name`) WITH ANALYZER pattern_tokenizer("Custom_rule") [ WITH DICT `tbl_dict_name` ];
Custom_rule est l'expression régulière qui définit le motif de division.
Paramètres de configuration
| Paramètre | Description | Valeur par défaut |
|---|---|---|
FULLTEXT_TOKENIZER_CASE_SENSITIVE |
Indique si la tokenisation est sensible à la casse. | false |
Gérer la configuration de l'analyseur
Interroger les paramètres de configuration
Utilisez l'une des méthodes ci-dessous pour vérifier la valeur actuelle d'un paramètre de configuration.
Méthode 1 : SHOW adb_config
Renvoie les valeurs par défaut et modifiées.
show adb_config key = '<analyzer_param>';
Exemple :
show adb_config key = 'FULLTEXT_NGRAM_TOKEN_SIZE';
Méthode 2 : SELECT depuis INFORMATION_SCHEMA
Renvoie uniquement les valeurs modifiées. Si un paramètre n'a jamais été modifié par rapport à sa valeur par défaut, cette requête renvoie null.
SELECT `key`, `value`, `update_time`
FROM INFORMATION_SCHEMA.kepler_meta_configs
WHERE key = '<analyzer_param>';
Exemple :
SELECT `key`, `value`, `update_time`
FROM INFORMATION_SCHEMA.kepler_meta_configs
WHERE key = 'FULLTEXT_NGRAM_TOKEN_SIZE';
Modifier les paramètres de configuration
set adb_config <analyzer_param>=<value>;
Exemple :
set adb_config FULLTEXT_NGRAM_TOKEN_SIZE=3;