gpt4 book ai didi

MySQL 全文搜索奇怪的行为

转载 作者:行者123 更新时间:2023-11-29 03:05:26 25 4
gpt4 key购买 nike

我为一家商店制作了一个网站,该网站使用 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 的结果。不过,我无法在品牌中获得任何关于 Pandora 的结果。它们确实存在!我试过在 MySql 中运行查询,但我遇到了同样的问题。

在导致问题的“品牌”列中搜索“Pandora”是什么原因?有人有什么想法吗?

谢谢!

最佳答案

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

Words that are present in 50% or more of the rows are considered common and do not match.

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

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

顺便说一句,您可以(阅读确实应该)按如下方式重写您的查询:

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

关于MySQL 全文搜索奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16302083/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com