Maison > base de données > tutoriel mysql > Pourquoi ma recherche plein texte MySQL échoue-t-elle avec des données insuffisantes et des mots vides ?

Pourquoi ma recherche plein texte MySQL échoue-t-elle avec des données insuffisantes et des mots vides ?

Susan Sarandon
Libérer: 2024-12-04 15:28:12
original
418 Les gens l'ont consulté

Why is My MySQL Fulltext Search Failing with Insufficient Data and Stop Words?

Échec de la recherche en texte intégral MySQL : données insuffisantes et mots vides

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');
Copier après la connexion

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;
Copier après la connexion

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);
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal