【问题标题】:Query with MATCH AGAINST a string returns more than strict equality to the string使用 MATCH AGAINST 查询字符串返回的不仅仅是严格相等的字符串
【发布时间】:2025-12-19 12:15:11
【问题描述】:

我正在尝试在 MySQL 中使用 MATCH AGAINST 选择产品。

标题的长度指定为单个数字加上字母m(表示米),即1m2m5m 等。

当我尝试将5m network cable 与下面的查询匹配时,它也会返回0.5m network cable1.5m network cable 等。

如何在 2 个字符的字符串上获得准确的单词 MATCH

我的查询:

SELECT title, category, price
FROM products_table
USE index (prod_idx)
WHERE (MATCH (title) AGAINST ('+"5m" +"network" +"cable"' IN BOOLEAN MODE))

【问题讨论】:

  • 我不是SQL专家,所以我没有答案,但可能是1.5m cable没有被选中,因为它包含5m,而是因为它包含@987654334 @,否则你可能有一个 OR 操作而不是你想要的 AND
  • 没有 MATCH AGAINST 的经验,但有一些关于全文索引的经验,我想到的是 . 符号被解释为句子的结尾,而不是小数点符号。因此你的结果。但是,不知道如何为此配置mysql。也许是语言环境?
  • 还有被忽略的短词全文搜索的问题。以防万一。 MySQL Full-text search - search for short words

标签: mysql match match-against


【解决方案1】:

问题是 FULLTEXT 会想到 '.'作为单词 ender/starter/separator,但您想将其视为一个字母。所以,把它变成一个字母:

插入数据时,改变'.'到 '_' 使 0.5m 变为 0_5m,这将被视为一个单词。对搜索字符串进行相同的更改。

【讨论】: