首页 > 解决方案 > 如何使 MySQL MATCH...AGAINST 使用各种单词分隔符?

问题描述

我有一个包含 300K 字符串值的表。这些值包含所有类型的单词分隔符,因此如下所示:

id  value
1   A B C
2   A B_C
3   A_B-C
4   A-B-C

A假设我想找到包含and的所有四行B。此查询
SELECT * FROM table WHERE MATCH(value) AGAINST('+A +B' IN BOOLEAN MODE); 将仅返回一行以空格分隔的值:
1 A B C

有没有办法MATCH...AGAINST使用其他单词分隔符?我尝试使用LIKE它,它太慢了。

标签: mysqlfull-text-search

解决方案


您可能希望稍微更改您的应用程序和架构以解决此问题。你有两个任务:

任务 1:转换现有数据

假设您需要保持源数据不变:

第 1 步:向您的架构添加一个字段“searchFriendly”,该字段与源数据的数据类型相同。

第 2 步:编写脚本来转换已有的数据。获取整个数据集并进行字符串替换以获取空格。

第 3 步:将转换后的数据保存到新的 searchFriendly 字段。

任务 2:修改应用程序,以便所有未来的数据库保存/更新此数据,同时执行转换并保存该数据。

第 1 步:找到保存这些记录的应用程序部分。

第 2 步:在实际将数据写入数据库之前,执行转换。

第 3 步:在 searchFriendly 字段下,将转换后的数据添加到 API 调用以保存/更新记录。


推荐阅读