Utilisez les fonctions d'indexation en texte intégral match() against(), match() fuzzy() et match() phrase() pour effectuer des recherches en texte intégral, et mettez en surbrillance les mots-clés correspondants dans les résultats.
Prérequis
Un index en texte intégral doit être créé. Pour plus d'instructions, consultez la rubrique Créer un index en texte intégral.
Exemple de données
Tous les exemples de cette rubrique utilisent la table d'exemple tbl_fulltext_demo. Chaque index en texte intégral utilise un analyseur différent. Exécutez les instructions suivantes pour créer la table et insérer les exemples de données.
/* RC_DDL_ENGINE_REWRITE_XUANWUV2=false */
CREATE TABLE `tbl_fulltext_demo` (
`id` INT,
`content` VARCHAR,
`content_alinlp` VARCHAR,
`content_ik` VARCHAR,
`content_standard` VARCHAR,
`content_ngram` VARCHAR,
FULLTEXT INDEX fidx_c(`content`), -- Default tokenizer
FULLTEXT INDEX fidx_alinlp(`content_alinlp`) WITH ANALYZER alinlp,-- AliNLP tokenizer
FULLTEXT INDEX fidx_ik(`content_ik`) WITH ANALYZER ik,-- IK tokenizer
FULLTEXT INDEX fidx_standard(`content_standard`) WITH ANALYZER standard,-- Standard tokenizer
FULLTEXT INDEX fidx_ngram(`content_ngram`) WITH ANALYZER ngram,-- Ngram tokenizer
PRIMARY KEY (`id`)
) DISTRIBUTED BY HASH(id);
INSERT INTO tbl_fulltext_demo(id, content, content_alinlp, content_ik, content_standard, content_ngram)
VALUES(1, 'Customers Need Better Products and Services', 'Customers Need Better Products and Services', 'Customers Need Better Products and Services', 'Customers Need Better Products and Services', 'Customers Need Better Products and Services')
,(2, 'Wuhan Changjiang Bridge','Wuhan Changjiang Bridge','Wuhan Changjiang Bridge','Wuhan Changjiang Bridge', 'Wuhan Changjiang Bridge')
,(3, 'Hangzhou, Zhejiang Province','Hangzhou, Zhejiang Province', 'Hangzhou, Zhejiang Province', 'Hangzhou, Zhejiang Province', 'Hangzhou, Zhejiang Province')
,(4, 'User Values and Commercial Values of Products','User Values and Commercial Values of Products', 'User Values and Commercial Values of Products', 'User Values and Commercial Values of Products', 'User Values and Commercial Values of Products');
Notes d'utilisation
-
Les fonctions d'index en texte intégral prennent en charge les caractères spéciaux
+-&|!(){}[]^"~*?:\/, mais vous devez les échapper avec\\.Par exemple, pour rechercher des données contenant
Spring/Scenery, l'instruction incorrecte estmatch(content) against('Spring / Scenery' )et l'instruction correcte estmatch(content) against('Spring \\/ Scenery'). Les fonctions d'index en texte intégral ne prennent pas en charge les opérateurs
=,!=,between,is null,is not nullnilike.Pour les données historiques ou les données migrées depuis d'autres bases de données, vous devez exécuter
BUILD TABLE tablename force=trueaprès la création d'un index en texte intégral pour que celui-ci prenne effet. Sinon, les requêtesMATCH AGAINSTrenverront des erreurs. Vous pouvez vérifier l'état de la tâche BUILD dansINFORMATION_SCHEMA.KEPLER_META_BUILD_TASK. Unstatusdéfini surFINISHindique que la tâche est terminée.
Choisir une fonction de recherche
La recherche en texte intégral propose trois fonctions de recherche. Choisissez celle qui correspond à votre scénario :
|
Scénario |
Fonction |
|
Correspondance avec des mots-clés ou des expressions exactes, avec une logique ET, OU et NON. |
|
|
Tolère les fautes de frappe ou d'orthographe dans la saisie et renvoie toujours un contenu proche du mot-clé. |
|
|
Correspondance avec plusieurs mots-clés dans un ordre spécifié, avec un nombre contrôlé de déplacements entre les mots-clés. |
|
MATCH() AGAINST()
MATCH() AGAINST() prend en charge la correspondance par mot et la correspondance exacte. Elle effectue une correspondance de mots-clés sur les colonnes spécifiées et renvoie le contenu correspondant.
MATCH() AGAINST() renvoie un score de pertinence pour chaque ligne correspondante. Vous pouvez filtrer l'ensemble de résultats en spécifiant un seuil, tel que > 0.9. Le seuil permet d'exclure les résultats ayant la pertinence la plus faible. Par exemple, > 0.9 exclut les 90 % de résultats les moins pertinents et ne renvoie que les 10 % les plus pertinents. Par défaut, l'ensemble de résultats renvoyé n'est pas trié par score de pertinence. Pour trier les résultats par score de pertinence, utilisez la clause ORDER BY.
Syntaxe
SELECT * FROM `table_name` WHERE match (column_name[ , ... ]) against('term')
Paramètres
table_name: la table à rechercher.column_name: la colonne à rechercher. Pour rechercher dans plusieurs colonnes, séparez les noms de colonnes par des virgules (,).-
term: le mot-clé à rechercher. Les requêtes par mot-clé prennent en charge les opérateurs logiques suivants :AND: renvoie le contenu qui correspond à tous les mots-clés.OR: renvoie le contenu qui correspond à l'un des mots-clés.NOT: renvoie le contenu qui correspond au mot-clé situé à gauche de l'opérateur, mais pas au mot-clé situé à droite.
Les opérateurs logiques ne sont pas sensibles à la casse.
Exemple 1 : Requête sur une seule colonne
SELECT id, content
FROM `tbl_fulltext_demo`
WHERE MATCH (`content`) AGAINST ('Products Services');
Le résultat suivant est renvoyé :
+------+-----------------------------------------------+
| id | content |
+------+-----------------------------------------------+
| 4 | User Values and Commercial Values of Products |
+------+-----------------------------------------------+
| 1 | Customers Need Better Products and Services |
+------+-----------------------------------------------+
Exemple 2 : Requête multicolumnes
Pour faire correspondre plusieurs colonnes, il n'est pas nécessaire de créer un index composite multicolumnes. Tant que chaque colonne incluse dans les conditions possède un index en texte intégral, vous pouvez exécuter une requête d'index en texte intégral sur plusieurs colonnes.
SELECT id, content, content_alinlp
FROM `tbl_fulltext_demo`
WHERE MATCH (content, content_alinlp) AGAINST ('Services');
La requête suivante est équivalente. Elle combine les conditions par colonne avec OR :
SELECT id, content, content_alinlp
FROM `tbl_fulltext_demo`
WHERE MATCH (content) AGAINST ('Services')
OR MATCH (content_alinlp) AGAINST ('Services');
Le résultat suivant est renvoyé :
+------+---------------------------------------------+---------------------------------------------+
| id | content | content_alinlp |
+------+---------------------------------------------+---------------------------------------------+
| 1 | Customers Need Better Products and Services | Customers Need Better Products and Services |
+------+---------------------------------------------+---------------------------------------------+
Exemple 3 : Requête booléenne
Utilisez l'opérateur AND pour renvoyer le contenu qui correspond à tous les mots-clés.
SELECT * FROM `tbl_fulltext_demo` WHERE MATCH (content) AGAINST ('Products AND Services');
Le résultat suivant est renvoyé :
+------+---------------------------------------------+---------------------------------------------+---------------------------------------------+---------------------------------------------+---------------------------------------------+
| id | content | content_alinlp | content_ik | content_standard | content_ngram |
+------+---------------------------------------------+---------------------------------------------+---------------------------------------------+---------------------------------------------+---------------------------------------------+
| 1 | Customers Need Better Products and Services | Customers Need Better Products and Services | Customers Need Better Products and Services | Customers Need Better Products and Services | Customers Need Better Products and Services |
+------+---------------------------------------------+---------------------------------------------+---------------------------------------------+---------------------------------------------+---------------------------------------------+
Utilisez l'opérateur OR pour renvoyer le contenu qui correspond à n'importe quel mot-clé.
SELECT * FROM `tbl_fulltext_demo` WHERE MATCH (content) AGAINST ('Products OR Services');
Le résultat suivant est renvoyé :
+------+-----------------------------------------------+-----------------------------------------------+-----------------------------------------------+-----------------------------------------------+-----------------------------------------------+
| id | content | content_alinlp | content_ik | content_standard | content_ngram |
+------+-----------------------------------------------+-----------------------------------------------+-----------------------------------------------+-----------------------------------------------+-----------------------------------------------+
| 4 | User Values and Commercial Values of Products | User Values and Commercial Values of Products | User Values and Commercial Values of Products | User Values and Commercial Values of Products | User Values and Commercial Values of Products |
+------+-----------------------------------------------+-----------------------------------------------+-----------------------------------------------+-----------------------------------------------+-----------------------------------------------+
| 1 | Customers Need Better Products and Services | Customers Need Better Products and Services | Customers Need Better Products and Services | Customers Need Better Products and Services | Customers Need Better Products and Services |
+------+-----------------------------------------------+-----------------------------------------------+-----------------------------------------------+-----------------------------------------------+-----------------------------------------------+
Utilisez l'opérateur NOT pour renvoyer uniquement le contenu qui correspond au mot-clé situé à gauche de l'opérateur.
SELECT * FROM `tbl_fulltext_demo` WHERE MATCH (content) AGAINST ('Products NOT Services');
Le résultat suivant est renvoyé :
+------+-----------------------------------------------+-----------------------------------------------+-----------------------------------------------+-----------------------------------------------+-----------------------------------------------+
| id | content | content_alinlp | content_ik | content_standard | content_ngram |
+------+-----------------------------------------------+-----------------------------------------------+-----------------------------------------------+-----------------------------------------------+-----------------------------------------------+
| 4 | User Values and Commercial Values of Products | User Values and Commercial Values of Products | User Values and Commercial Values of Products | User Values and Commercial Values of Products | User Values and Commercial Values of Products |
+------+-----------------------------------------------+-----------------------------------------------+-----------------------------------------------+-----------------------------------------------+-----------------------------------------------+
Utilisez l'opérateur NOT conjointement avec
*:*pour exclure les lignes qui correspondent au mot-clé situé à droite de l'opérateur. Dans la requête suivante,*:*correspond à toutes les lignes de la table, et la requête renvoie les lignes qui ne correspondent pas àServices.
SELECT * FROM `tbl_fulltext_demo` WHERE MATCH (content) AGAINST ('*:* NOT Services');
Utilisez *:* uniquement à gauche d'un opérateur logique, et seulement au début de l'expression.
Le résultat suivant est renvoyé :
+------+-----------------------------------------------+-----------------------------------------------+-----------------------------------------------+-----------------------------------------------+-----------------------------------------------+
| id | content | content_alinlp | content_ik | content_standard | content_ngram |
+------+-----------------------------------------------+-----------------------------------------------+-----------------------------------------------+-----------------------------------------------+-----------------------------------------------+
| 2 | Wuhan Changjiang Bridge | Wuhan Changjiang Bridge | Wuhan Changjiang Bridge | Wuhan Changjiang Bridge | Wuhan Changjiang Bridge |
+------+-----------------------------------------------+-----------------------------------------------+-----------------------------------------------+-----------------------------------------------+-----------------------------------------------+
| 4 | User Values and Commercial Values of Products | User Values and Commercial Values of Products | User Values and Commercial Values of Products | User Values and Commercial Values of Products | User Values and Commercial Values of Products |
+------+-----------------------------------------------+-----------------------------------------------+-----------------------------------------------+-----------------------------------------------+-----------------------------------------------+
| 3 | Hangzhou, Zhejiang Province | Hangzhou, Zhejiang Province | Hangzhou, Zhejiang Province | Hangzhou, Zhejiang Province | Hangzhou, Zhejiang Province |
+------+-----------------------------------------------+-----------------------------------------------+-----------------------------------------------+-----------------------------------------------+-----------------------------------------------+
Utilisez des parenthèses pour construire une requête booléenne complexe :
SELECT id, content_alinlp
FROM `tbl_fulltext_demo`
WHERE MATCH (content_alinlp) AGAINST ('(Wuhan OR Hangzhou) AND (Bridge OR Xihu)');
Le résultat suivant est renvoyé :
+------+-------------------------+
| id | content_alinlp |
+------+-------------------------+
| 2 | Wuhan Changjiang Bridge |
+------+-------------------------+
Exemple 4 : Filtrage de l'ensemble de résultats
Une recherche en texte intégral renvoie tous les résultats similaires au mot-clé. Lorsque le volume de données est important, l'ensemble de résultats d'une requête par mot-clé est également volumineux, mais vous avez souvent besoin uniquement des résultats ayant une pertinence élevée. Par conséquent, AnalyticDB for MySQL propose un filtrage de l'ensemble de résultats.
L'exemple suivant exclut les 90 % de résultats les moins pertinents et ne renvoie que les 10 % les plus pertinents.
SELECT id, content
FROM `tbl_fulltext_demo`
WHERE MATCH (content) AGAINST ('Products Services') > 0.9;
Le résultat suivant est renvoyé :
+------+-----------------------------------------------+
| id | content |
+------+-----------------------------------------------+
| 4 | User Values and Commercial Values of Products |
+------+-----------------------------------------------+
| 1 | Customers Need Better Products and Services |
+------+-----------------------------------------------+
Exemple 5 : Scores de pertinence et tri
AnalyticDB for MySQL peut renvoyer les scores de pertinence d'un ensemble de résultats et trier les résultats par score de pertinence.
Interrogez les scores de pertinence.
SELECT id, content, MATCH (content) AGAINST ('Products Services') AS score
FROM `tbl_fulltext_demo`
WHERE MATCH (content) AGAINST ('Products Services') > 0.9;
WHERE MATCH(content) AGAINST('Products Services') > 0.9 exclut 90 % des résultats à faible pertinence et ne renvoie que les 10 % ayant le score de pertinence le plus élevé.
Par défaut, l'ensemble de résultats renvoyé n'est pas trié par score de pertinence :
+------+-----------------------------------------------+----------------------+
| id | content | score |
+------+-----------------------------------------------+----------------------+
| 4 | User Values and Commercial Values of Products | 0.13076457381248474 |
+------+-----------------------------------------------+----------------------+
| 1 | Customers Need Better Products and Services | 1.1090354919433594 |
+------+-----------------------------------------------+----------------------+
L'expression MATCH(content) AGAINST ('Wuhan') dans la projection SELECT n'a pas besoin de correspondre à l'expression MATCH(content) AGAINST ('Products Services') dans la clause WHERE. L'instruction de requête suivante renvoie les scores de pertinence pour MATCH(content) AGAINST ('Wuhan').
SELECT *, MATCH (content) AGAINST ('Wuhan') AS score
FROM `tbl_fulltext_demo`
WHERE MATCH (content) AGAINST ('Products Services') > 0.9
ORDER BY score DESC;
Le résultat suivant est renvoyé :
+------+-----------------------------------------------+-----------------------------------------------+-----------------------------------------------+-----------------------------------------------+-----------------------------------------------+-------+
| id | content | content_alinlp | content_ik | content_standard | content_ngram | score |
+------+-----------------------------------------------+-----------------------------------------------+-----------------------------------------------+-----------------------------------------------+-----------------------------------------------+-------+
| 4 | User Values and Commercial Values of Products | User Values and Commercial Values of Products | User Values and Commercial Values of Products | User Values and Commercial Values of Products | User Values and Commercial Values of Products | 0.0 |
+------+-----------------------------------------------+-----------------------------------------------+-----------------------------------------------+-----------------------------------------------+-----------------------------------------------+-------+
| 1 | Customers Need Better Products and Services | Customers Need Better Products and Services | Customers Need Better Products and Services | Customers Need Better Products and Services | Customers Need Better Products and Services | 0.0 |
+------+-----------------------------------------------+-----------------------------------------------+-----------------------------------------------+-----------------------------------------------+-----------------------------------------------+-------+
-
Tri par pertinence.
Utilisez la clause ORDER BY pour trier les résultats par score de pertinence par ordre décroissant.
SELECT id, content, MATCH (content) AGAINST ('Products Services') AS score
FROM `tbl_fulltext_demo`
WHERE MATCH (content) AGAINST ('Products Services') > 0.9
ORDER BY score DESC;
WHERE MATCH(content) AGAINST('Products Services') > 0.9 exclut 90 % des résultats à faible pertinence et ne renvoie que les 10 % ayant le score de pertinence le plus élevé.
Le résultat suivant est renvoyé :
+------+-----------------------------------------------+---------------------+
| id | content | score |
+------+-----------------------------------------------+---------------------+
| 1 | Customers Need Better Products and Services | 0.2615291476249695 |
+------+-----------------------------------------------+---------------------+
| 4 | User Values and Commercial Values of Products | 0.13076457381248474 |
+------+-----------------------------------------------+---------------------+
Exemple 6 : Correspondance par mot
Par défaut, une recherche en texte intégral tokenize d'abord le mot-clé, puis effectue la recherche. Si vous n'entourez pas le mot-clé de guillemets doubles, une ligne est renvoyée lorsqu'elle correspond à l'un des mots-clés tokenisés.
L'analyseur AliNLP divise Products and Services en Products, and et Services, et divise Products Services en Products et Services.
SELECT id, content_alinlp, MATCH (content_alinlp) AGAINST ('Products Services') AS score
FROM `tbl_fulltext_demo`
WHERE MATCH (content_alinlp) AGAINST ('Products Services') > 0.9
ORDER BY score DESC;
WHERE MATCH(content) AGAINST('Products Services') > 0.9 exclut 90 % des résultats à faible pertinence et ne renvoie que les 10 % ayant le score de pertinence le plus élevé.
Une ligne est renvoyée lorsqu'elle correspond à l'un des mots-clés dans Products Services :
+------+-----------------------------------------------+---------------------+
| id | content_alinlp | score |
+------+-----------------------------------------------+---------------------+
| 1 | Customers Need Better Products and Services | 0.2615291476249695 |
+------+-----------------------------------------------+---------------------+
| 4 | User Values and Commercial Values of Products | 0.13076457381248474 |
+------+-----------------------------------------------+---------------------+
Exemple 7 : Correspondance exacte
Si vous entourez le mot-clé de guillemets doubles, l'analyseur ne divise pas le mot-clé. Une ligne est renvoyée uniquement lorsque les données de la colonne spécifiée correspondent exactement au mot-clé entre guillemets.
Recherchez du contenu qui correspond exactement au mot-clé Products Services.
SELECT id, content_alinlp, MATCH (content_alinlp) AGAINST ('"Products Services"') AS score
FROM `tbl_fulltext_demo`
WHERE MATCH (content_alinlp) AGAINST ('"Products Services"') > 0.9
ORDER BY score DESC;
La correspondance exacte pour le mot-clé Products Services renvoie un résultat vide :
Empty set
Recherchez du contenu qui correspond exactement au mot-clé Products and Services.
SELECT id, content_alinlp, MATCH (content_alinlp) AGAINST ('"Products and Services"') AS score
FROM `tbl_fulltext_demo`
WHERE MATCH (content_alinlp) AGAINST ('"Products and Services"') > 0.9
ORDER BY score DESC;
WHERE MATCH(content) AGAINST('Products Services') > 0.9 exclut 90 % des résultats à faible pertinence et ne renvoie que les 10 % ayant le score de pertinence le plus élevé.
Le résultat suivant est renvoyé :
+------+---------------------------------------------+--------------------+
| id | content_alinlp | score |
+------+---------------------------------------------+--------------------+
| 1 | Customers Need Better Products and Services | 0.3922937512397766 |
+------+---------------------------------------------+--------------------+
MATCH() FUZZY()
MATCH() FUZZY() prend en charge les requêtes de correspondance floue. Elle fait correspondre le texte recherché en se basant sur la distance d'édition de Levenshtein. Si la saisie contient des erreurs, une requête de correspondance floue peut toujours renvoyer un contenu proche du mot-clé.
Syntaxe
SELECT * FROM `table_name` WHERE match (`column_name`) fuzzy('term') [max_edits(n)];
Paramètres
table_name: la table à rechercher.column_name: la colonne à rechercher.term: le mot-clé à rechercher.max_edits(n): la distance d'édition maximale (facultative), qui correspond au nombre minimal de modifications (insertions, suppressions ou substitutions) nécessaires pour transformer la chaîne A en chaîne B. Valeur par défaut : 2. Valeurs valides : entiers de 0 à 2. Par exemple, une modification transformewindosenwindowsen insérant le caractère w, donc la distance d'édition maximale entrewindosetwindowsest de 1.
Exemple 1 : Requête approximative
SELECT id, content
FROM tbl_fulltext_demo
WHERE MATCH(content_standard) FUZZY('hangzou');
Si vous ne spécifiez pas max_edits, la distance d'édition maximale est par défaut de 2. Le mot-clé mal orthographié hangzou correspond toujours à Hangzhou. Le résultat suivant est renvoyé :
+------+-----------------------------+
| id | content |
+------+-----------------------------+
| 3 | Hangzhou, Zhejiang Province |
+------+-----------------------------+
Pour limiter la distance d'édition maximale à 1, ajoutez la clause max_edits(1) :
SELECT id, content
FROM tbl_fulltext_demo
WHERE MATCH(content_standard) FUZZY('hangzou') max_edits(1);
Le résultat suivant est renvoyé :
+------+-----------------------------+
| id | content |
+------+-----------------------------+
| 3 | Hangzhou, Zhejiang Province |
+------+-----------------------------+
Exemple 2 : Requête approximative avec une distance d'édition de 2
SELECT id, content
FROM tbl_fulltext_demo
WHERE MATCH(content_standard) FUZZY('Wuhan Chang') max_edits(2);
Le résultat suivant est renvoyé :
+------+-------------------------+
| id | content |
+------+-------------------------+
| 2 | Wuhan Changjiang Bridge |
+------+-------------------------+
MATCH() PHRASE()
MATCH() PHRASE() prend en charge les requêtes par expression. Elle recherche dans la colonne spécifiée un contenu correspondant à plusieurs mots-clés. Lorsque tous les mots-clés correspondent, vous pouvez utiliser le paramètre slop comme condition supplémentaire pour déterminer si la requête par expression est satisfaite.
Syntaxe
SELECT * FROM `table_name` WHERE match (`column_name`) phrase('term1 term2') [slop(n)]
Paramètres
table_name: la table à rechercher.column_name: la colonne à rechercher.term1 term2: la liste des mots-clés à rechercher. Séparez les mots-clés par des espaces. L'ordre des mots-clés affecte les résultats de correspondance.slop(n): le nombre maximal de déplacements (facultatif). Après que l'analyseur a divisé le texte en une liste de termes, chaque terme est numéroté dans l'ordre en commençant par 0. Les termes sont déplacés vers la gauche ou la droite pour correspondre à la liste de mots-clés spécifiée par le paramètre phrase. Valeur par défaut : 0. Valeurs valides : entiers de 0 à 6. Par exemple, l'analyseur Standard diviseNeed Better Products and ServicesenNeed,Better,Products,andetServices.
|
Texte |
Need |
Better |
Products |
and |
Services |
|
Position |
0 |
1 |
2 |
3 |
4 |
phrase('Need Products') : la distance de déplacement est de 1, ce qui signifie que
Needse déplace d'une position vers la droite ouProductsse déplace d'une position vers la gauche.phrase('Need and') : la distance de déplacement est de 2, ce qui signifie que
Needse déplace de deux positions vers la droite ouandse déplace de deux positions vers la gauche.
Exemple 1 : Requête par expression en anglais
AnalyticDB for MySQL utilise l'analyseur Standard intégré, qui divise Hangzhou, Zhejiang Province en Hangzhou, Zhejiang et Province selon les configurations par défaut.
Recherchez du contenu qui correspond aux mots-clés zhejiang hangzhou.
SELECT id, content
FROM tbl_fulltext_demo
WHERE MATCH(content_standard) PHRASE('zhejiang hangzhou');
Le paramètre slop étant par défaut à 0, la recherche de contenu correspondant aux mots-clés zhejiang hangzhou renvoie un résultat vide :
Empty set
Recherchez du contenu qui correspond aux mots-clés hangzhou Province après un déplacement.
SELECT id, content
FROM tbl_fulltext_demo
WHERE MATCH(content_standard) PHRASE('hangzhou Province') slop(1);
Le résultat suivant est renvoyé :
+------+-----------------------------+
| id | content |
+------+-----------------------------+
| 3 | Hangzhou, Zhejiang Province |
+------+-----------------------------+
Recherchez du contenu qui correspond aux mots-clés zhejiang hangzhou après deux déplacements.
SELECT id, content
FROM tbl_fulltext_demo
WHERE MATCH(content_standard) PHRASE('zhejiang hangzhou') slop(2);
Le résultat suivant est renvoyé :
+------+-----------------------------+
| id | content |
+------+-----------------------------+
| 3 | Hangzhou, Zhejiang Province |
+------+-----------------------------+
Exemple 2 : Requête par expression avec les analyseurs IK et Standard
Dans les scénarios de correspondance par expression en chinois utilisant MATCH() PHRASE(), l'analyseur AliNLP intégré et l'analyseur Ngram peuvent ne pas parvenir à faire correspondre les données interrogées. Utilisez plutôt l'analyseur Standard ou l'analyseur IK.
Recherchez du contenu qui correspond aux mots-clés Products Services après un déplacement.
SELECT id, content
FROM tbl_fulltext_demo
WHERE MATCH(content_ik) PHRASE('Products Services') slop(1);
Le résultat suivant est renvoyé :
+------+---------------------------------------------+
| id | content |
+------+---------------------------------------------+
| 1 | Customers Need Better Products and Services |
+------+---------------------------------------------+
Recherchez du contenu qui correspond aux mots-clés Products Services après deux déplacements.
SELECT id, content
FROM tbl_fulltext_demo
WHERE MATCH(content_standard) PHRASE('Products Services') slop(2);
Le résultat suivant est renvoyé :
+------+---------------------------------------------+
| id | content |
+------+---------------------------------------------+
| 1 | Customers Need Better Products and Services |
+------+---------------------------------------------+
Prise en charge de la mise en surbrillance
Mise en surbrillance à l'aide d'une fonction
AnalyticDB for MySQL prend en charge la fonction fulltext_highlight(nom_colonne), qui met en surbrillance les mots-clés correspondants dans une colonne d'index en texte intégral.
Exemple 1 : Mettre en surbrillance les mots-clés MATCH() AGAINST()
Mettez en surbrillance les mots-clés dans une requête sur une seule colonne.
SELECT MATCH (content_alinlp) AGAINST ('Wuhan Changjiang') AS score, fulltext_highlight(content_alinlp)
FROM tbl_fulltext_demo
WHERE MATCH (content_alinlp) AGAINST ('Wuhan Changjiang') > 0.9
ORDER BY score DESC LIMIT 3;
WHERE MATCH(content_alinlp) AGAINST('Wuhan Changjiang') > 0.9 exclut 90 % des résultats à faible pertinence et ne renvoie que les 10 % ayant le score de pertinence le plus élevé.
Le résultat suivant est renvoyé :
+--------------------+-------------------------------------------+
| score | fulltext_highlight(content_alinlp) |
+--------------------+-------------------------------------------+
| 0.2615291476249695 | <em>Wuhan</em> <em>Changjiang</em> Bridge |
+--------------------+-------------------------------------------+
Mettez en surbrillance les mots-clés dans une requête multicolumnes.
SELECT MATCH (content_alinlp) AGAINST ('Wuhan Changjiang') AS score, fulltext_highlight(content_alinlp)
FROM tbl_fulltext_demo
WHERE MATCH (content_alinlp) AGAINST ('Wuhan Changjiang') > 0.9
AND MATCH (content_alinlp) AGAINST ('Bridge') > 0.9
ORDER BY score DESC LIMIT 3;
WHERE MATCH(content_alinlp) AGAINST('Wuhan Changjiang') > 0.9 exclut 90 % des résultats à faible pertinence et ne renvoie que les 10 % ayant le score de pertinence le plus élevé.
Le résultat suivant est renvoyé :
+--------------------+----------------------------------------------------+
| score | fulltext_highlight(content_alinlp) |
+--------------------+----------------------------------------------------+
| 0.2615291476249695 | <em>Wuhan</em> <em>Changjiang</em> <em>Bridge</em> |
+--------------------+----------------------------------------------------+
Exemple 2 : Mettre en surbrillance les mots-clés MATCH() FUZZY()
SELECT id, MATCH(content_standard) FUZZY('Wuhan Chang') as score, fulltext_highlight(content_standard)
FROM tbl_fulltext_demo
WHERE MATCH(content_standard) FUZZY('Wuhan Chang');
Le résultat suivant est renvoyé :
+------+-------+-------------------------------------------+
| id | score | fulltext_highlight(content_standard) |
+------+-------+-------------------------------------------+
| 2 | 0.0 | <em>Wuhan</em> Chang<em>jiang</em> Bridge |
+------+-------+-------------------------------------------+
Exemple 3 : Mettre en surbrillance les mots-clés MATCH() PHRASE()
SELECT id, MATCH(content_ik) PHRASE('Products Services') slop(1) as score, fulltext_highlight(content_ik)
FROM tbl_fulltext_demo
WHERE MATCH(content_ik) PHRASE('Products Services') slop(1);
Le résultat suivant est renvoyé :
+------+---------------------+---------------------------------------------------------------+
| id | score | fulltext_highlight(content_ik) |
+------+---------------------+---------------------------------------------------------------+
| 1 | 0.16922473907470703 | Customers Need Better <em>Products</em> and <em>Services</em> |
+------+---------------------+---------------------------------------------------------------+
Personnaliser la mise en surbrillance à l'aide d'un hint
AnalyticDB for MySQL met en surbrillance les résultats de recherche en texte intégral avec les balises <em> et </em> par défaut. Vous pouvez également utiliser un hint pour définir fulltext_highlight_pre_tag et fulltext_highlight_post_tag afin de définir les balises de surbrillance gauche et droite.
Les exemples suivants utilisent <span> et </span> comme balises de surbrillance.
Exemple 4 : Mise en surbrillance personnalisée pour MATCH() AGAINST()
/*+ fulltext_highlight_pre_tag=<span>,fulltext_highlight_post_tag=</span>*/
SELECT MATCH (content_alinlp) AGAINST ('Wuhan Changjiang') AS score, fulltext_highlight(content_alinlp)
FROM tbl_fulltext_demo
WHERE MATCH (content_alinlp) AGAINST ('Wuhan Changjiang') > 0.9
ORDER BY score DESC LIMIT 3;
WHERE MATCH(content_alinlp) AGAINST('Wuhan Changjiang') > 0.9 exclut 90 % des résultats à faible pertinence et ne renvoie que les 10 % ayant le score de pertinence le plus élevé.
Le résultat suivant est renvoyé :
+--------------------+---------------------------------------------------+
| score | fulltext_highlight(content_alinlp) |
+--------------------+---------------------------------------------------+
| 0.2615291476249695 | <span>Wuhan</span> <span>Changjiang</span> Bridge |
+--------------------+---------------------------------------------------+
Exemple 5 : Mise en surbrillance personnalisée pour MATCH() FUZZY()
/*+ fulltext_highlight_pre_tag=<span>,fulltext_highlight_post_tag=</span>*/
SELECT MATCH (content_alinlp) FUZZY ('Wuhan Changjiang') AS score, fulltext_highlight(content_alinlp)
FROM tbl_fulltext_demo
WHERE MATCH (content_alinlp) FUZZY ('Wuhan Changjiang') > 0.9
ORDER BY score DESC LIMIT 3;
WHERE MATCH(content_alinlp) FUZZY('Wuhan Changjiang') > 0.9 exclut 90 % des résultats à faible pertinence et ne renvoie que les 10 % ayant le score de pertinence le plus élevé.
Le résultat suivant est renvoyé :
+--------------------+---------------------------------------------------+
| score | fulltext_highlight(content_alinlp) |
+--------------------+---------------------------------------------------+
| 0.0 | <span>Wuhan</span> <span>Changjiang</span> Bridge |
+--------------------+---------------------------------------------------+
Exemple 6 : Mise en surbrillance personnalisée pour MATCH() PHRASE()
/*+ fulltext_highlight_pre_tag=<span>,fulltext_highlight_post_tag=</span>*/
SELECT MATCH (content_alinlp) PHRASE ('Wuhan') AS score, fulltext_highlight(content_alinlp)
FROM tbl_fulltext_demo
WHERE MATCH (content_alinlp) PHRASE ('Wuhan') > 0.9
ORDER BY score DESC LIMIT 3;
WHERE MATCH(content_alinlp) PHRASE('Wuhan') > 0.9 exclut 90 % des résultats à faible pertinence et ne renvoie que les 10 % ayant le score de pertinence le plus élevé.
Le résultat suivant est renvoyé :
+---------------------+-----------------------------------------------------------------------------------+
| score | fulltext_highlight(content_alinlp) |
+---------------------+-----------------------------------------------------------------------------------+
| 0.13076457381248474 | Customers Need Better <span>Products</span> <span>and</span> <span>Services</span> |
+---------------------+-----------------------------------------------------------------------------------+