【问题标题】:MySQL FullText search?MySQL全文搜索?
【发布时间】:2010-10-22 05:43:06
【问题描述】:

我正在开发我网站中的搜索功能。我想为用户提供一个最好的搜索机制。我正在使用 PHP/MYSQL。

假设用户搜索“运动”。

我有 30 条包含单词“sport”的记录和 5 条包含单词“sports”的记录,但是当我搜索运动时,以下查询仅返回包含单词“sport”的结果 30。但实际上我认为提供良好搜索结果的最佳方式是显示所有 30+5 条记录,所有记录有运动或运动。

SELECT DISTINCT p.id, p.title, p.descr, p.tags FROM pdata p WHERE MATCH (p.title, p.tags, p.descr) AGAINST ('sport')

请告诉我一些文章或一些提示和技巧,使用它们我将能够提供良好的搜索功能。

【问题讨论】:

    标签: mysql database search full-text-search


    【解决方案1】:
    ...MATCH (p.title, p.tags, p.descr) AGAINST ('sport*' IN BOOLEAN MODE)
    

    可能会成功。

    编辑,MySQL documentation 是解决此类问题的绝佳资源! :)

    【讨论】:

    • 击中目标 :) 哇。嘿,它的工作完美。但我不明白为什么它之前没有给我数据(没有 * 和 IN BOOLEAN MODE 关键字)?请告诉我。
    • 但又遇到了一个问题。当我搜索 AGAINST ('ipl*' IN BOOLEAN MODE) 时,它只返回一个结果,而我有 5 条记录,标题中有“ipl”字样、标签和描述列。那为什么它只返回一个结果。当我搜索“ICL”时,它返回 0 个结果,而我有一个包含 ICL 的记录。
    【解决方案2】:

    只需在搜索字符串中使用 % 通配符。这将允许匹配由搜索字符串形成的任何单词。遗憾的是,您需要处于布尔模式才能使用此通配符。此外,所有搜索字符串必须大于 3 个字符才能使用全文搜索显示。这可以在mysql系统设置中更改,但默认为3。

    【讨论】:

      【解决方案3】:

      在您的情况下,我会进行以下查询:

      选择 p.id、p.title、p.descr、p.tags FROM pdata p WHERE (p.title LIKE '%SPORT%' 或 p.tags LIKE '%SPORT%' 或 p.descr LIKE'%SPORT%')

      此查询将查找涵盖运动杂志、夏季运动等的任何文章。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-07-03
        • 1970-01-01
        • 1970-01-01
        • 2011-01-15
        • 2016-08-24
        • 2021-01-28
        • 2012-01-16
        相关资源
        最近更新 更多