2010-07-17 20 views
-1

je dois trouver la chaîne suivante: 'C++'Mysql MATCH CONTRE - EN problème BOOLEAN MODE

Mon sql regard de requête comme ceci:

SELECT * 
FROM shop_product 
WHERE 
    MATCH(shop_product.name, shop_product.product_model, shop_product.keywords, shop_product.part_number, shop_product.upc, shop_product.brand_name) 
    AGAINST ('c++' IN BOOLEAN MODE)) 
GROUP BY `product_id` 
LIMIT 0, 25 

Ce script ne renvoie aucun résultat même si existe des enregistrements contenant ce mot. Comment résoudre ce problème?

Merci.

+0

Et vos colonnes ont des index de texte intégral appropriés? Vos tables sont-elles des tables MyISAM? –

+0

Oui, les colonnes sont des index de texte intégral dans une table MyIsam. – Emanuel

Répondre

1

"+" n'est pas un caractère "mot". Vous devez probablement utiliser LIKE ou REGEXP.

+1

Y a-t-il un caractère d'échappement pour MATCH AGAINST? – Emanuel

0

Vous pouvez rechercher sans BOOLEAN MODE:

SELECT * 
FROM shop_product 
WHERE 
    MATCH(shop_product.name, shop_product.product_model, shop_product.keywords, shop_product.part_number, shop_product.upc, shop_product.brand_name) 
    AGAINST ('c++')) 
GROUP BY `product_id` 
LIMIT 0, 25 

Je pense que le + est juste pour le mode booléen un caractère spécial.

+0

autant que je l'ai compris le problème est qu'il n'indexe même pas le '+' s. Je peux être complètement faux si! –

2

Les mots de moins de quatre caractères ne sont pas recherchés en mode BOOLEAN ou NATURAL MODE.