【问题标题】:MyIsam fulltext search against multiple %term%针对多个 %term% 的 MyIsam 全文搜索
【发布时间】:2018-11-01 03:47:04
【问题描述】:

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

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

【问题讨论】:

    标签: mysql sql search full-text-search myisam


    【解决方案1】:

    在每个“单词”前面加上+

    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 来处理它们。

    【讨论】:

    • 虽然没有“单词”,它只是一个文件路径。即使做+qf 也行不通,除非我在那里放一个通配符——+qf*
    • @David542 - 我添加了* 和其他一些想法。
    • 感谢您的详细回答。我最终选择了另一条路线,因为全文似乎对我的需求没有太大帮助
    猜你喜欢
    • 2013-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-01
    • 1970-01-01
    相关资源
    最近更新 更多