Maison  >  Article  >  base de données  >  Techniques de recherche en texte intégral dans MySQL

Techniques de recherche en texte intégral dans MySQL

WBOY
WBOYoriginal
2023-06-15 17:33:352590parcourir

MySQL est l'une des bases de données relationnelles les plus couramment utilisées à l'heure actuelle, et la recherche en texte intégral y est également une fonction très importante. Cet article vous présentera les techniques de recherche en texte intégral dans MySQL et vous aidera à mieux utiliser MySQL pour la recherche en texte intégral.

1. Configurer la prise en charge de la recherche en texte intégral

Pour utiliser la fonction de recherche en texte intégral dans MySQL, vous devez d'abord vous assurer que le serveur a activé cette fonction. Dans MySQL 5.6.4 et supérieur, vous pouvez vérifier si la recherche en texte intégral a été activée via la commande suivante :

SHOW VARIABLES LIKE 'innodb_ft%';

Si innodb_ft_server est défini sur ON, la recherche en texte intégral a été activée.

Si la prise en charge de la recherche en texte intégral n'est pas activée, vous devez modifier le fichier my.cnf (ou my.ini) pour définir la valeur du paramètre ft_min_word_len sur la longueur minimale du mot que vous recherchez. Par défaut, sa valeur est 4. Par exemple, si vous souhaitez rechercher des mots de longueur 3, vous devez modifier sa valeur en 3 et redémarrer le service MySQL.

2. Créer un index de texte intégral

Lorsque la prise en charge de la recherche en texte intégral est activée, vous pouvez créer un index de texte intégral pour la table qui doit être recherchée. Créer un index de texte intégral est aussi simple que de créer un index FULLTEXT sur les colonnes qui nécessitent une recherche en texte intégral. Par exemple, si vous souhaitez effectuer une recherche en texte intégral au sein du corps d'un article, vous pouvez créer un index FULLTEXT sur la colonne "contenu" de la table "articles" à l'aide de la commande suivante :

ALTER TABLE articles ADD FULLTEXT(content);

Cela créera un Index FULLTEXT sur la colonne "contenu" pour les requêtes de recherche en texte intégral Accélération. Notez que les index FULLTEXT ne peuvent être créés que sur des colonnes de types de données CHAR, VARCHAR ou TEXT. Une fois l'index de texte intégral créé, la recherche en texte intégral peut commencer.

3. Utiliser une requête de recherche en texte intégral

La syntaxe de la recherche en texte intégral à l'aide de MySQL est très similaire aux instructions de requête SQL ordinaires. Par exemple, l'instruction pour rechercher tous les articles contenant le mot « MySQL » est la suivante :

SELECT * FROM articles WHERE MATCH(content) AGAINST('MySQL');

Parmi eux, la clause MATCH précise les colonnes à rechercher, et la clause AGAINST précise les mots-clés à rechercher. Si vous souhaitez effectuer une recherche en texte intégral dans plusieurs colonnes, répertoriez simplement les colonnes. Par exemple, pour rechercher des articles contenant « MySQL » à la fois dans le corps et dans le titre de l'article, vous pouvez utiliser la commande suivante :

SELECT * FROM articles WHERE MATCH(title,content) AGAINST('MySQL');

Lorsque nous effectuons des requêtes de recherche en texte intégral, nous devons généralement prêter attention aux problèmes suivants :

  1. Match les mots dans l'ordre : par défaut, MySQL traitera les mots-clés recherchés comme des mots simples et les triera selon la meilleure correspondance. Si vous souhaitez faire correspondre plusieurs mots dans l’ordre, vous pouvez utiliser des guillemets doubles pour entourer les mots. Par exemple, pour interroger tous les articles contenant « MySQL » et « base de données » dans le texte, vous pouvez utiliser la commande suivante :
SELECT * FROM articles WHERE MATCH(content) AGAINST('"MySQL database"' IN BOOLEAN MODE);
  1. Utiliser la correspondance de modèle booléen : MySQL fournit une requête de modèle booléen, qui nous permet de rechercher des données de manière plus flexible. . Par exemple, pour retrouver tous les articles qui contiennent « MySQL » mais pas « base de données » dans le texte, vous pouvez utiliser la commande suivante :
SELECT * FROM articles WHERE MATCH(content) AGAINST('+MySQL -database' IN BOOLEAN MODE);

En mode booléen, le signe plus « + » signifie que le mot doit être inclus, et le "signe moins" signifie qu'il ne contient pas le mot, "astérisque" signifie correspondre à n'importe quel mot, "guillemets doubles" signifie correspondre à la phrase complète.

  1. Ajuster la mesure de similarité : par défaut, MySQL utilise une mesure de similarité basée sur la fréquence des mots pour déterminer la similarité entre les textes. Cependant, dans certains cas, il peut être nécessaire d'ajuster la mesure de similarité. Par exemple, lors de la recherche de paroles de musique, nous accordons plus d'attention à la correspondance qu'à la fréquence des mots. Pour ajuster la mesure de similarité, vous pouvez spécifier le paramètre EN MODE LANGAGE NATUREL AVEC QUERY EXPANSION dans les paramètres de la fonction CONTRE. Par exemple :
SELECT * FROM lyrics WHERE MATCH(text) AGAINST ('+love +song' IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION);

Dans cet exemple, MySQL utilisera des modèles de langage naturel et l'expansion des requêtes pour déterminer la similitude entre les textes, ce qui entraînera de meilleurs résultats de correspondance.

4. Conclusion

La recherche en texte intégral est devenue une fonctionnalité standard dans les bases de données modernes et est largement utilisée dans divers domaines, notamment les réseaux sociaux, les applications liées à la musique et à la vidéo, et bien plus encore. Les techniques de recherche en texte intégral MySQL sont présentées ici. Je pense que ces techniques peuvent vous aider à utiliser MySQL plus efficacement pour la recherche en texte intégral. Bien sûr, il existe de nombreuses autres compétences et techniques qui doivent être apprises et maîtrisées. J’espère que cet article pourra vous ouvrir une nouvelle idée et vous inspirer davantage.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn