MyIsam全文搜索,针对多个%term%

时间:2018-11-01 03:47:04

标签: mysql sql search full-text-search 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)

但是它返回的结果太多了(好像在返回是否找到了任何术语而不是仅找到所有找到的术语。

1 个答案:

答案 0 :(得分:1)

在每个“单词”前放置+

AGAINST('+qf* +episodic +sg_1001* +JPG' in boolean mode)

您是否将最小字长设置为2?如果没有,可能还会有其他麻烦。

+避免了“太多”。

现在考虑使用FULLTEXT,考虑切换到InnoDB。

您可能不得不放弃使用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来照顾他们。