mysql - MyIsam 针对多个 %term% 进行全文搜索

标签 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)

但它返回的结果太多(似乎是在找到任何术语时才返回,而不是仅返回找到所有术语的结果。

最佳答案

+放在每个“单词”前面:

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

您是否将 min-word-length 设置为 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 来处理它们。

关于mysql - MyIsam 针对多个 %term% 进行全文搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53094967/

相关文章:

sql - MySQL - 是否可以获取层次结构中的所有子项?

mysql - 以动态名称作为字段的表

php - SQL 到 ActiveRecord 条件

mysql - 具有 hasMany 关系的递归查询

javascript - 如何加快大型库存文件的 javascript/jquery 速度?

mysql - 如何编写 SQL 查询以获取行中最长的大于零值的序列数?

mysql - 按一列中的值分组

sql - 如果一列为空,则在 SELECT 上选择不同的列

java - 获取与给定上下文相似的文本的最佳方法

algorithm - 谷歌如何识别没有空格的2个词?