MySQL全文搜索异常行为

MySQL全文搜索异常行为,mysql,full-text-search,Mysql,Full Text Search,我为一家商店建立了一个网站,它使用sql表来管理有关其产品的数据 我使用全文搜索,因此用户可以轻松地搜索股票 搜索运行查询,以将术语与产品的品牌、名称和描述相匹配,如下所示: $search_prods = $db_connection->query(" SELECT `id`,`name`,`description` FROM `Products` WHERE Match(`brand`) Against('$term')

我为一家商店建立了一个网站,它使用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')

    ");
除了处理“潘多拉”品牌外,搜索工作正常。如果我搜索不同的品牌,我会得到我的结果。如果我搜索潘多拉,我会得到名称中带有潘多拉的结果,描述中带有潘多拉的结果。不过,潘多拉在这个品牌上没有任何效果。他们确实存在!我试着在MySql中运行查询,我也遇到了同样的问题

在“品牌”一栏中搜索“潘多拉”会引发什么问题??有人有什么想法吗


谢谢

默认情况下,MySQL全文搜索:

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

如果超过50%的产品是“潘多拉”品牌,那么这就是解释

您可能希望尝试在查询中添加修改器以禁用此功能

顺便说一句,您可以(阅读真的应该)将查询重写如下:

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

谢谢你的回答,也谢谢你的建议。我最初是这样写查询的,结果失败了。由于我阅读的示例仅与一列匹配,因此我认为这是函数的一个限制。我想我是第一次打错了什么…@user1537360“我最初是这样写我的查询的”=>你是指我答案的第一部分(添加
布尔模式
)还是第二部分(简化查询)?我潜在的问题是:它解决了问题吗?;)我的意思是,我最初构建了我的查询,就像您建议整合这三个方面一样。在阅读了您的评论之后,我再次尝试,并得到了相同的问题,但随后我注意到您的查询包含布尔模式。当我加入布尔模式时,它解决了这个问题。至于我在作品中提到的问题,你说得对。问题是,我的演示产品中有5/8属于该品牌。我添加了一些其他品牌的产品,问题就解决了。我根本没有正确地研究这个函数,因为我一直很忙,所以谢谢你的帮助!