myisam全文搜索多个%term%

gc0ot86w  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(285)

我试图搜索一个名为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)

但它返回的结果太多了(似乎它返回的是如果找到任何项,而不是只找到所有项)。

sycxhyv7

sycxhyv71#

+ 在每个“单词”前面:

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

最小字长设置为2吗?如果没有,可能还有其他麻烦。
这个 + 避免“太多”。
考虑一下切换到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 去照顾他们。

相关问题