2009-04-28 6 views
1

Je travaille sur la fonctionnalité de recherche sur mon site web. Je veux fournir un meilleur mécanisme de recherche aux utilisateurs. J'utilise PHP/MYSQL.MySQL FullText recherche?

Disons que l'utilisateur a cherché "sport". J'ai 30 enregistrements ayant le mot "sport" et 5 enregistrements ayant le mot "sport" mais lorsque je suis à la recherche de sport, la requête suivante ne renvoie que le résultat 30 qui a le mot "sport". Mais en fait, je pense que la meilleure façon de fournir un bon résultat de recherche est d'afficher tous les enregistrements 30 + 5, tous les records ayant du sport ou du sport.

SELECT DISTINCT p.id, p.title, p.descr, p.tags FROM pdata p WHERE MATCH (p.title, p.tags, p.descr) AGAINST ('sport') 

S'il vous plaît me dire quelques articles ou quelques conseils & astuces à l'aide que je vais être en mesure de fournir une bonne fonctionnalité de recherche.

Répondre

2
...MATCH (p.title, p.tags, p.descr) AGAINST ('sport*' IN BOOLEAN MODE) 

Peut faire l'affaire.

Modifier, le MySQL documentation est une excellente ressource pour ce genre de problèmes! :)

+0

Frapper la cible :) wow. Hey c'est parfait. Mais je ne comprends pas pourquoi il ne me donnait pas de données avant (sans * et mot clé IN BOOLEAN MODE) ?? S'il vous plaît dites-moi. – Prashant

+0

Mais quand je suis à la recherche d'AGAINST ('ipl *' IN BOOLEAN MODE), alors il retourne un seul résultat alors que j'ai environ 5 enregistrements qui ont un mot "ipl" dans le titre, les balises et les colonnes descr. Alors pourquoi son seul retour d'un résultat. et quand je cherche "ICL" alors son retour 0 résultats alors que j'ai un enregistrement qui ont ICL dedans. – Prashant

0

Utilisez simplement le caractère générique% dans vos chaînes de recherche. Cela permettra de faire correspondre tous les mots formés par la chaîne de recherche. Malheureusement, vous devrez être en mode booléen pour que ce caractère générique fonctionne. De plus, toutes les chaînes de recherche doivent contenir plus de 3 caractères pour apparaître en utilisant la recherche en texte intégral. cela peut être changé dans les paramètres du système de MySQL, mais la valeur par défaut est 3.

0

Dans votre cas, je voudrais faire la requête suivante:

SELECT p.id, p.title, p.descr, p .tags DE pdata p OU (p.title COMME '% SPORT%' OU p.tags LIKE '% SPORT%' OU p.descr LIKE '% SPORT%')

Cette requête trouverait tous les articles qui couvrent les magazines sportifs, les sports d'été.

Questions connexes