2

我为一家商店制作了一个网站,该网站使用 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 中运行查询,但遇到了同样的问题。

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

谢谢!

4

1 回答 1

1

默认情况下,MySQL 全文搜索会忽略常用词

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

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

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

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

SELECT id, name, description
FROM Products
WHERE MATCH(brand, description, name) AGAINST('$term' IN BOOLEAN MODE)
于 2013-04-30T15:17:49.213 回答