Le problème
Lors de la tentative d'effectuer des recherches en texte intégral sur une table MySQL contenant des informations sur le produit, les résultats ne sont pas renvoyés malgré la présence de termes correspondants. Par exemple, une recherche de « stylo » ou « un stylo » dans la colonne « Produit » ne renvoie aucun résultat.
L'enquête
Après examen du schéma de la table, il a été découvert que la colonne « Produit » était définie comme un index FULLTEXT. Cependant, le tableau ne contenait que deux lignes de données, qui incluaient les termes « stylo » et « un stylo ».
La solution
1. Variété croissante des données :
Les algorithmes de recherche en texte intégral nécessitent une quantité suffisante de données pour détecter des modèles significatifs. Avec seulement deux lignes de données, l'algorithme était incapable de faire la différence entre les mots courants et peu courants, ce qui entraînait des résultats de recherche médiocres.
Exemple :
CREATE TABLE testproduct ( Id VARCHAR(16), prod_name TEXT, ProductIdType VARCHAR(8), PRIMARY KEY (Id), FULLTEXT (prod_name) ) ENGINE=MyISAM; insert into testproduct (id,prod_name,productidtype) values ('B00005N5PF','one pen and a good price for a pen','ASIN'); insert into testproduct (id,prod_name,productidtype) values ('B570J5XS3C',null,'ASIN');
En insérant plus de données avec une variété de termes et d'expressions, l'algorithme peut mieux classer les mots et améliorer la précision de la recherche.
2. Remplacement des mots vides :
MySQL maintient une liste de mots courants, appelés mots vides, qui sont généralement exclus des recherches en texte intégral. Cependant, dans certains cas, les mots vides peuvent être pertinents pour la recherche.
Exemple :
-- Disable stopword filtering SET ft_stopword_file = ''; -- Rebuild FULLTEXT indexes ALTER TABLE testproduct REBUILD INDEX prod_name;
En remplaçant la liste de mots vides par défaut, des termes pertinents tels que « années » " ou " score " peuvent être inclus dans les résultats de recherche.
3. Utilisation des modes booléen et langage naturel :
Le mode booléen nécessite des correspondances exactes, tandis que le mode langage naturel permet des variations et des synonymes. L'utilisation du mode langage naturel peut élargir les résultats de la recherche.
Exemple :
SELECT * FROM testproduct WHERE MATCH(prod_name) AGAINST('+harpoon +article' IN NATURAL LANGUAGE MODE);
En utilisant ces techniques, la fonctionnalité de recherche en texte intégral peut être améliorée pour fournir des informations précises. et des résultats significatifs pour un plus large éventail de requêtes.
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!