我们的数据库包含许多标题中带有逗号的条目(如在匈牙利语中,它是小数点分隔符而不是句号),并且希望匹配那些具有正确相关性的条目。在用户输入的条件为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中。