0

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

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

感谢您提前提供任何帮助。

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

4

1 回答 1

0

FULLTEXT索引不是为处理数字而设计的,无论数字的语言环境如何。

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

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

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

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

于 2021-01-21T20:56:19.347 回答