mysql - 针对多个 %term% 的 MyIsam 全文搜索
问题描述
我有一个名为 filepath 的字段,我正在尝试搜索。这是一个示例路径:
/mnt/qfs-X/Asset_Management/XG_Marketing_/Episodic-SG_1001_1233.jpg
我希望能够搜索以下内容并获得匹配项:
search = "qf episodic sg_1001 JPG"
我将如何在 mysql/myisam 中进行全文搜索?我现在拥有的是:
SELECT * FROM x_files2 WHERE MATCH(path)
AGAINST('qf episodic sg_1001 JPG' in boolean mode)
但是它返回的结果太多了(如果找到任何术语,而不是仅找到所有术语,它似乎就会返回。
解决方案
放在+
每个“单词”的前面:
AGAINST('+qf* +episodic +sg_1001* +JPG' in boolean mode)
您是否将最小字长设置为 2?如果没有,可能还有其他麻烦。
避免“+
太多”。
考虑切换到 InnoDB,因为它有FULLTEXT
.
您可能不得不放弃使用 FULLTEXT 并切换到LIKE
:
WHERE path LIKE '%qf%episodic%sg_1001%JPG%'
如果性能是一个问题,请考虑类似
WHERE MATCH(path) AGAINST('...' IN BOOLEAN MODE) -- using some of the words
AND path LIKE '...' -- as above
将MATCH
首先运行,大大减少可能的行数,然后LIKE
处理细节。
请注意,单词的中间不能用于AGAINST
. 那些可以被排除在外,依靠LIKE
照顾他们。
推荐阅读
- mfc - 为什么我使用 MsgWaitForMultipleObjects 时无法退出 MFC 程序?
- java - 如何将嵌入文档从 Mongo DB 导出到 java 中的 excel 工作表
- google-cloud-datastore - 谷歌云数据存储 - 交易
- javascript - 在 MongoDB 中搜索
- oracle - 我正在尝试使用我的自动化随处客户端连接 oracle 12 c db
- sql - Teradata SQL Assistent 15 中的 MOD 运算符
- python - 如何最好地替换 Python 中的大量 if then 语句
- javascript - 尝试通过网站上的模态制作“联系细节”按钮,但每个人都获得相同的“模态内容”
- c# - C# 设置更积极的垃圾回收
- vba - VBA 提取数据:在没有 Next 的情况下出现编译错误