mysql - 如何使 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
它,它太慢了。
解决方案
您可能希望稍微更改您的应用程序和架构以解决此问题。你有两个任务:
任务 1:转换现有数据
假设您需要保持源数据不变:
第 1 步:向您的架构添加一个字段“searchFriendly”,该字段与源数据的数据类型相同。
第 2 步:编写脚本来转换已有的数据。获取整个数据集并进行字符串替换以获取空格。
第 3 步:将转换后的数据保存到新的 searchFriendly 字段。
任务 2:修改应用程序,以便所有未来的数据库保存/更新此数据,同时执行转换并保存该数据。
第 1 步:找到保存这些记录的应用程序部分。
第 2 步:在实际将数据写入数据库之前,执行转换。
第 3 步:在 searchFriendly 字段下,将转换后的数据添加到 API 调用以保存/更新记录。
推荐阅读
- amazon-web-services - aws sam ECR 标签名称
- c++ - 添加/删除 .cpp 文件后,带有 PCH 的 CMake 重建所有项目
- reactjs - React-leaflet 更新标记位置和图标优化
- sql - postgresql 请求获得第一次出现的重复值
- database - GraphQL API (Astra DB) - 现有表和字段的列表
- html-lists - 你能设置 li::marker 元素的样式吗
- swift - 声明一个类内部的结构
- flutter - 如何检查是否已经收听了任何活动的流?
- continuous-integration - 修改 Bamboo 发布元数据
- python-3.x - 我有一个文本内容很长的数据框,我希望将其保存为表格(以 .PNG 格式),但文本被裁剪掉了