Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment autoriser la recherche en texte intégral avec des tirets dans la requête de recherche

D'ici http://dev.mysql.com/doc /refman/5.0/en/fulltext-search.html

Une solution pour trouver un mot avec un tiret ou un trait d'union est d'utiliser la RECHERCHE PLEIN TEXTE EN MODE BOOLÉEN, et de placer le mot avec le trait d'union / tiret entre guillemets doubles.

Ou d'ici http://bugs.mysql.com/bug.php?id=2095

Il existe une autre solution de contournement. Il a été récemment ajouté au manuel :"Modifier un fichier de jeu de caractères :cela ne nécessite aucune recompilation. La macro true_word_char() utilise une table de "types de caractères" pour distinguer les lettres et les chiffres des autres caractères. . Vous pouvez modifier le contenu de l'un des caractères définissez XMLfiles pour spécifier que '-' est une "lettre". Utilisez ensuite le jeu de caractères donné pour vos index FULLTEXT."

Je n'ai pas essayé par moi-même.

Edit :Voici quelques informations supplémentaires à partir d'ici http:/ /dev.mysql.com/doc/refman/5.0/en/fulltext-boolean.html

Une phrase entre guillemets (""") correspond uniquement aux lignes qui contiennent la phrase littéralement, telle qu'elle a été saisie. Le moteur de texte intégral divise la phrase en mots et effectue une recherche dans l'index FULLTEXT pour les mots. Avant MySQL 5.0.3, le moteur effectuait alors une recherche de sous-chaîne pour la phrase dans les enregistrements trouvés, de sorte que la correspondance doit inclure des caractères non verbaux dans la phrase. Depuis MySQL 5.0.3, les caractères non verbaux n'ont pas besoin d'être mis en correspondance exactement :La recherche de phrases nécessite uniquement que les correspondances contiennent exactement les mêmes mots que la phrase et dans le même ordre. Par exemple, "test phrase" correspond à "test, phrase" dans MySQL 5.0.3, mais pas avant.

Si la phrase ne contient aucun mot dans l'index, le résultat est vide. Par exemple, si tous les mots sont soit des mots vides, soit plus courts que la longueur minimale des mots indexés, le résultat est vide.