2010-07-17 38 views
-1

我需要找到以下字符串:“C++”Mysql的对阵 - IN BOOLEAN MODE问题

我的SQL查询是这样的:

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 

此脚本不返回任何结果,即使有存在包含该词的记录。 如何解决这个问题?

谢谢。

+0

而你的列有适当的全文索引?你的表是MyISAM表吗? – 2010-07-17 11:17:08

+0

是的,列是全文索引,位于MyIsam表中。 – Emanuel 2010-07-17 11:45:33

回答

1

“+”不是“单词”字符。可能你必须使用LIKE或REGEXP。

+1

MATCH AGAINST有没有任何转义字符? – Emanuel 2010-07-17 11:46:13

0

您可以搜索没有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 

我觉得+仅仅是布尔模式的一个特殊字符。

+0

据我了解,问题在于它甚至没有对“+”进行索引。虽然我可能完全错误! – 2010-07-17 16:03:05

2

在BOOLEAN MODE或NATURAL MODE中不搜索少于四个字符的字。