如何在 MySQL 中匹配包含逗号的字符串

问题描述

我们的数据库包含许多标题中带有逗号的条目(如在匈牙利语中,它是小数点分隔符而不是句点),并且希望匹配具有正确相关性的条目。如果用户输入的术语是 7,5x20 otherTerm

,则搜索 SQL 当前看起来像这样
SELECT (MATCH(title) AGAINST('(+7,5x20* +otherTerm* ) (7,5x20* otherTerm* ) (+7,5x20 +otherTerm )' IN BOOLEAN MODE)) AS Relevance,id,title,product_id FROM versions

WHERE (MATCH(title) AGAINST('(+7,5x20 +otherTerm )' IN BOOLEAN MODE))

ORDER BY Relevance DESC LIMIT 50

现在结果顺序给出了更高的相关性,例如。 5x207,5x20 所以必须对逗号进行某种字符转义,防止 MySQL 将它们作为分隔字符串处理。我没有找到合适的。

提前感谢您的帮助。

编辑:目前无法将标题分解为更易消化的数据。真的在寻找转义逗号或用“匹配任何单个字符”运算符(如正则表达式中的点)替换它的解决方案。

解决方法

FULLTEXT 索引不是为处理数字而设计的,无论数字的区域设置如何。

一种方法是更改​​传入文本以将您想视为“字母”的标点符号替换为 _。 (并建立一个单独的列来存储这个修改过的文本。然后向其中添加 FULLTEXT 索引而不是“真实”文本。)

请注意,+x 会以一种糟糕的方式失败——一个字符串没有被索引,因此无法找到它们。因此,包含两个短的字符串会导致返回零匹配。

对保存的文本(例如 7_5x20)的更改也需要应用于搜索。

50K 行?编写一个特殊的一次性脚本来对现有的 50K 行执行上述转换。然后将转换合并到 INSERT 和 SELECT 中。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...