针对多个 %term% 的 MyIsam 全文搜索
MyIsam fulltext search against multiple %term%
我正在尝试搜索一个名为文件路径的字段。这是一个示例路径:
/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)
但它返回的结果太多(似乎是在找到任何术语时才返回,而不是只返回所有找到的结果。
在每个'word'前面加上+
:
AGAINST('+qf* +episodic +sg_1001* +JPG' in boolean mode)
您是否将最小字长设置为 2?如果没有,可能还有其他问题。
+
避免"too many".
考虑切换到 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
来照顾它们。
我正在尝试搜索一个名为文件路径的字段。这是一个示例路径:
/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)
但它返回的结果太多(似乎是在找到任何术语时才返回,而不是只返回所有找到的结果。
在每个'word'前面加上+
:
AGAINST('+qf* +episodic +sg_1001* +JPG' in boolean mode)
您是否将最小字长设置为 2?如果没有,可能还有其他问题。
+
避免"too many".
考虑切换到 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
来照顾它们。