2011-11-30 4 views
1

J'ai la structure du tableau suivant:recherche FullText requête dans MySQL

id   bigint(20) 
loc   text 
lastmod  datetime 
changefreq varchar(15) 
priority  float 
isdownloaded tinyint(1) 
mainrepoid bigint(20) 

FullText est activé sur les liens ayant loc, je veux extraire tous les liens ayant à la fois « nom » et les mots «détails de mais devrait ne pas inclure le mot «caractère». J'utilise la requête suivante:

SELECT * 
FROM links 
WHERE MATCH (
    loc 
) 
AGAINST (
    'name+details-character' 
) 

Mais les résultats retournés ont également un mot de «caractère» dans eux. En bref, je veux vraiment toutes les URLs avec cette structure example.com/ nom/id/détails du champ loc.

+1

espaces entre les mots Put, comme: 'nom + de détails -character' – Jauzsika

+0

Got Même résultat. – Ali

Répondre

1

Comme dit Jauzsika dans le commentaire, vous devriez mettre des espaces entre elle.

Si "nom" doit être présent, vous devez également ajouter un plus en face d'elle.

En outre; ces opérateurs ne fonctionnent qu'en mode booléen. Vous devez ajouter IN BOOLEAN MODE à votre déclaration-CONTRE, comme ceci:

SELECT * 
FROM links 
WHERE MATCH (
    loc 
) 
AGAINST (
    '+name +details -character' IN BOOLEAN MODE 
) 
+0

Je veux vraiment toutes les URL avec cette structure http://www.example.com/name/id/details du champ loc. – Ali

+0

Bien que ce qui précède fonctionnera très bien, je préfère opter pour un semblable dans ce cas: Où localiser LIKE '% example.com/name/id/details%' – matthiasmullie

0

Aussi, vous devriez vérifier le système vars ft_max_word_len et ft_min_word_len parce que la recherche plein texte peut sauter certains dossiers en fonction de la longueur du mot.

sys vars