2008-11-14 9 views
5

Lorsque vous utilisez la recherche de texte intégral MySQL en mode booléen, certains caractères, tels que + et -, sont utilisés comme opérateurs. Si je fais une recherche pour quelque chose comme "C++", il interprète le + comme un opérateur. Quelle est la meilleure pratique pour traiter ces personnages spéciaux?Traitement des caractères spéciaux MySQL Full Text

La méthode que j'utilise actuellement consiste à convertir tous les caractères + dans les données en _plus. Il convertit également les caractères &, @,/et # en une représentation textuelle.

Répondre

4

Il n'y a aucun moyen de le faire en utilisant joliment la recherche en texte intégral de MySQL. Ce que vous faites (en remplaçant les caractères spéciaux par une chaîne prédéfinie) est la seule façon de le faire. Vous pouvez envisager d'utiliser Sphinx Search à la place. Il prend apparemment en charge l'échappement des caractères spéciaux, et par tous les rapports est nettement plus rapide que la recherche en texte intégral par défaut.

3

MySQL est assez brutal dans les jetons qu'il ignore lors de la création de ses index de texte intégral. Je dirais que là où il a rencontré le terme "C++", il supprimerait probablement les caractères plus, ne laissant que C, puis l'ignorerait parce qu'il est trop court. Vous pourriez probablement configurer MySQL pour inclure des mots à une seule lettre, mais ce n'est pas optimisé pour cela, et je doute que vous puissiez l'obtenir pour traiter les caractères plus comme vous voulez.

Si vous avez besoin d'un bon moteur de recherche interne où vous pouvez configurer des choses comme ceci, consultez Lucene qui a été porté dans plusieurs langues including PHP (in the Zend framework).

Ou si vous avez besoin de plus de 'tagging' que de recherche de texte, alors quelque chose d'autre peut être plus approprié.

Questions connexes