如何匹配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* ) (7,5x20* otherTerm* ) (+7,5x20 +otherTerm )' IN BOOLEAN MODE))
ORDER BY Relevance DESC LIMIT 50

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

谢谢你的帮助。

编辑:将标题分解成更易于理解的数据目前还不可行。真正寻找解决方案,转义逗号或替换为'匹配任何单个字符'操作符,如regex中的点。

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

一种方法是更改输入文本,以替换您希望视为"字母"的标点符号。变成,比如说,_。(并构建一个单独的列,用于存储修改后的文本。然后用FULLTEXT索引代替"real"索引。文本。)

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

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

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

相关内容

  • 没有找到相关文章