Les index de texte intégral vous permettent d'exécuter des requêtes de recherche en texte intégral sur les colonnes VARCHAR dans AnalyticDB for MySQL. Cette rubrique explique comment créer, vérifier et supprimer des index de texte intégral sur des tables nouvelles et existantes.
Prérequis
Avant de commencer, assurez-vous de disposer des éléments suivants :
Un cluster AnalyticDB for MySQL exécutant la version V3.1.4.9 ou ultérieure (version V3.1.4.17 ou ultérieure recommandée)
Pour vérifier la version de votre cluster, consultez la rubrique Comment interroger la version d'un cluster AnalyticDB for MySQL ?.
Limitations
Vous ne pouvez créer un index de texte intégral que sur une seule colonne à la fois. Pour indexer plusieurs colonnes, exécutez une instruction
FULLTEXTdistincte pour chaque colonne.Les index de texte intégral sont uniquement pris en charge sur les colonnes de type VARCHAR.
Fonctionnement
L'application des index de texte intégral dans AnalyticDB for MySQL varie selon le moment où les données ont été écrites :
Données nouvellement écrites : indexées en temps réel ; aucune étape supplémentaire n'est requise.
Données historiques : non indexées automatiquement. Après l'ajout de l'index, exécutez l'instruction
BUILD TABLE ... force=true;pour indexer les lignes existantes. Les requêtes portant sur les données historiques ne sont pas accélérées tant que la tâche BUILD n'est pas terminée.
Créer un index de texte intégral lors de la création d'une table
Syntaxe
CREATE TABLE [IF NOT EXISTS] table_name (
column_name column_type [column_attributes] [column_constraints] [COMMENT 'string'],
[FULLTEXT [INDEX|KEY] [index_name] (column_name) [index_option]],
...
)
table_attribute
[partition_options]
[AS] query_expression
COMMENT 'string'
Où index_option peut être :
-- Specify the analyzer (optional):
WITH ANALYZER analyzer_name
-- Specify a custom dictionary (optional):
WITH DICT tbl_dict_name
Paramètres
| Paramètre | Description | |
|---|---|---|
table_name |
Nom de la table. Doit comporter entre 1 et 127 caractères (lettres, chiffres ou traits de soulignement) et commencer par une lettre ou un trait de soulignement. Utilisez le format db_name.table_name pour distinguer les tables portant le même nom dans différentes bases de données. |
|
column_name |
Nom de la colonne. Doit comporter entre 1 et 127 caractères (lettres, chiffres ou traits de soulignement) et commencer par une lettre ou un trait de soulignement. | |
column_type |
Type de données de la colonne. Au moins une colonne doit être de type VARCHAR. Pour connaître les types de données pris en charge, consultez la rubrique Types de données de base. | |
column_attributes |
Attributs de colonne. Pour plus de détails, consultez la rubrique CREATE TABLE. | |
column_constraints |
Contraintes de colonne. Pour plus de détails, consultez la rubrique CREATE TABLE. | |
FULLTEXT |
Déclare un index de texte intégral. | |
`INDEX |
KEY` |
Identificateur de mot-clé pour l'index. Soit |
index_name |
Nom de l'index de texte intégral. | |
analyzer_name |
Analyseur à utiliser pour la tokenisation. S'il est omis, l'analyseur par défaut est utilisé. Pour connaître les analyseurs disponibles, consultez la rubrique Analyseurs pour les index de texte intégral. | |
tbl_dict_name |
Dictionnaire personnalisé à utiliser. Pour plus de détails, consultez la rubrique Dictionnaires personnalisés pour les index de texte intégral. |
Exemple
Créez une table nommée tbl_fulltext_name avec un index de texte intégral sur la colonne content :
CREATE TABLE `tbl_fulltext_name` (
`id` int,
`content` varchar,
`keyword` varchar,
FULLTEXT INDEX fidx_c(`content`),
PRIMARY KEY (`id`)
) DISTRIBUTED BY HASH(id);
Vérifiez que l'index a bien été créé :
SHOW INDEX FROM tbl_fulltext_name;
Résultat attendu :
+-------------------+------------+---------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+-------------------+------------+---------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| tbl_fulltext_name | 0 | PRIMARY | 1 | id | A | 0 | NULL | NULL | | BTREE | | |
| tbl_fulltext_name | 1 | id_0_idx | 1 | id | A | 0 | NULL | NULL | | BTREE | | |
| tbl_fulltext_name | 1 | keyword_2_idx | 1 | keyword | A | 0 | NULL | NULL | | BTREE | | |
| tbl_fulltext_name | 1 | fidx_c | 1 | content | A | 0 | NULL | NULL | | FULLTEXT | | |
+-------------------+------------+---------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
L'entrée fidx_c avec Index_type = FULLTEXT confirme que l'index a été créé avec succès.
Ajouter un index de texte intégral à une table existante
Syntaxe
ALTER TABLE `table_name` ADD FULLTEXT [INDEX|KEY] index_name (column_name) [index_option]
Exemple
Les étapes suivantes permettent d'ajouter un index de texte intégral à une table existante et d'indexer ses données historiques.
-
Créez une table nommée
tbl_fulltext_name:CREATE TABLE `tbl_fulltext_name` ( `id` int, `content` varchar, `keyword` varchar, FULLTEXT INDEX fidx_c(`content`), PRIMARY KEY (`id`) ) DISTRIBUTED BY HASH(id) INDEX_ALL = 'N'; -
Ajoutez un index de texte intégral nommé
fidx_ksur la colonnekeyworden utilisant l'analyseurstandard:Si aucun analyseur n'est spécifié, l'analyseur par défaut est utilisé. Pour connaître les analyseurs disponibles, consultez la rubrique Analyseurs pour les index de texte intégral .
ALTER TABLE `tbl_fulltext_name` ADD FULLTEXT INDEX fidx_k(`keyword`) WITH ANALYZER standard; -
Générez l'index pour les données historiques existantes. Les lignes écrites avant l'étape 2 ne sont pas consultables tant que cette tâche BUILD n'est pas terminée.
BUILD TABLE `tbl_fulltext_name` force=true;Le temps nécessaire dépend du volume de données présent dans la table.
Supprimer un index de texte intégral
Syntaxe
ALTER TABLE table_name DROP FULLTEXT INDEX index_name;
Exemple
Supprimez l'index de texte intégral fidx_k de la table tbl_fulltext_name :
ALTER TABLE `tbl_fulltext_name` DROP FULLTEXT INDEX fidx_k;