如何解决如何在 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
现在结果顺序给出了更高的相关性,例如。 5x20 比 7,5x20 所以必须对逗号进行某种字符转义,防止 MySQL 将它们作为分隔字符串处理。我没有找到合适的。
提前感谢您的帮助。
编辑:目前无法将标题分解为更易消化的数据。真的在寻找转义逗号或用“匹配任何单个字符”运算符(如正则表达式中的点)替换它的解决方案。
解决方法
FULLTEXT
索引不是为处理数字而设计的,无论数字的区域设置如何。
一种方法是更改传入文本以将您想视为“字母”的标点符号替换为 _
。 (并建立一个单独的列来存储这个修改过的文本。然后向其中添加 FULLTEXT
索引而不是“真实”文本。)
请注意,+x
会以一种糟糕的方式失败——一个字符串没有被索引,因此无法找到它们。因此,包含两个短的字符串会导致返回零匹配。
对保存的文本(例如 7_5x20
)的更改也需要应用于搜索。
50K 行?编写一个特殊的一次性脚本来对现有的 50K 行执行上述转换。然后将转换合并到 INSERT 和 SELECT 中。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。