MySQL全文搜索奇怪的行为

时间:2013-04-30 14:14:44

标签: mysql full-text-search

我为一家商店建立了一个网站,该网站使用sql表来管理有关其产品的数据。

我使用全文搜索,因此用户可以轻松搜索股票。

搜索运行查询以将该字词与产品的品牌,名称和描述相匹配,如下所示:

$search_prods = $db_connection->query("

    SELECT      `id`,`name`,`description`
    FROM        `Products`
    WHERE       Match(`brand`) Against('$term')

    UNION

    SELECT      `id`,`name`,`description`
    FROM        `Products`
    WHERE       Match(`description`) Against('$term')

    UNION

    SELECT      `id`,`name`,`description`
    FROM        `Products`
    WHERE       Match(`name`) Against('$term')

    ");

除了处理品牌'潘多拉'之外,搜索工作正常。如果我搜索其他品牌,我会得到我的结果。如果我搜索Pandora,我会在名称中使用Pandora获得结果,并在描述中使用Pandora获得结果。但是,我不能在品牌中使用Pandora获得任何结果。他们确实存在!我已经尝试在MySql中运行查询,我也遇到了同样的问题。

在“品牌”栏目中搜索“潘多拉”是什么导致问题?有人有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

默认情况下,MySQL FullText搜索ignore common words

  

50%或更多行中出现的单词被认为是常见且不匹配。

如果超过50%的产品属于“Pandora”品牌,那就是解释。

您可能需要尝试在查询中添加IN BOOLEAN MODE修饰符以停用此功能。

顺便说一下,你可以(读真的应该)重写你的查询,如下所示:

SELECT id, name, description
FROM Products
WHERE MATCH(brand, description, name) AGAINST('$term' IN BOOLEAN MODE)