You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL全文搜索:匹配单词复数而非任意后缀字符的优化方法

MySQL全文搜索匹配指定单词变体(避免超长后缀误匹配)

你的问题出在布尔模式下的*前缀通配会匹配所有以目标词开头的内容,不管后缀长度。要只匹配Mary、Marys或Mary's,可以用以下两种方案:

方案1:精确指定匹配项

直接在全文搜索中列出所有需要匹配的完整词,用双引号包裹实现精确匹配:

SELECT *
FROM newssitestwo 
WHERE MATCH(snippet, name) AGAINST('"Mary" "Marys" "Mary\'s"' IN BOOLEAN MODE)
ORDER BY datePublished DESC
LIMIT 300

这种方式最直接,适合你只需要处理简单加s复数和所有格的场景,不会出现误匹配。

方案2:结合正则表达式过滤

如果需要保留一定的灵活性,先通过全文搜索缩小范围,再用正则限制后缀:

SELECT *
FROM newssitestwo 
WHERE MATCH(snippet, name) AGAINST('Mary*' IN BOOLEAN MODE)
  AND (snippet REGEXP '[[:<:]]Mary(''s|s)?[[:>:]]' OR name REGEXP '[[:<:]]Mary(''s|s)?[[:>:]]')
ORDER BY datePublished DESC
LIMIT 300

这里[[:<:]]和[[:>:]]是MySQL的单词边界标记,确保匹配的是独立单词;(''s|s)?表示可选的s或's后缀,精准限制了允许的变体形式。

内容的提问来源于stack exchange,提问作者Jimmison Johnson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 15:39:21