【问题标题】:full text search doesn't find anything全文搜索找不到任何东西
【发布时间】:2012-06-11 18:25:29
【问题描述】:

**编辑**

好的,所以我找到了问题,搜索的最小字长为 4,我将其更改为 3,但现在它只找到第 1 行数据,而不是第 2 行数据...

-----原始问题:----

我的 phpmyadmin 上有一个 MyISAM 表,如下所示:

table name: `users`
coulmn name: `name`
row 1 data: 'dan'
row 2 data: 'dan252'

(这只是它的重要部分)

现在名称是全文索引字段,我正在使用这个查询:

SELECT * FROM `users` WHERE MATCH(`name`) AGAINST('dan')

但是 phpmyadmin 返回:

MySQL returned an empty result set (i.e. zero rows). ( Query took 0.0004 sec )

为什么没有找到任何东西?

*编辑*

好的,所以我找到了问题,搜索的最小字长为 4,我将其更改为 3,但现在它只找到第 1 行数据,而不是第 2 行数据...

【问题讨论】:

    标签: sql full-text-search phpmyadmin myisam


    【解决方案1】:

    MATCH 仅适用于带有FULLTEXT 指示的列。而FULLTEXT 指示仅适用于 MyISAM 表。

    其次,'dan' 可能是too short 用于MATCH

    第三,如果您的搜索词匹配超过 50% 的行,则该词被认为太常见并且搜索失败。

    阅读here

    【讨论】:

      【解决方案2】:

      试试这个。

      SELECT * FROM users WHERE MATCH (name) AGAINST ('dan');

      我猜你在表名和 MATCH 中使用了撇号。这是错误的。试试看,让我知道这是否有效。

      【讨论】:

        【解决方案3】:

        我猜你正在尝试返回所有包含“dan”的内容 你可以试试 LIKE 命令。

        SELECT * FROM users WHERE name LIKE '%dan%'
        

        这将返回“dan”和“dan252”以及(如果他在桌子上)“123dan456”。

        你也可以试试

        SELECT * FROM users Match(name) AGAINST('+dan*')
        

        这应该返回相同的东西,并且可能更有效。 如果您只是想使用 'dan',请按照@Kirishna 的说法使用。

        SELECT * FROM users WHERE MATCH (name) AGAINST ('dan')
        

        【讨论】:

        • 我想使用全文而不是 LIKE,第一个返回语法错误,第二个返回空结果
        • 你可以试试SELECT * FROM users WHERE CONTAINS(name,"dan") 我是从Microsoft SQL 那里得到的,所以它可能不起作用。
        猜你喜欢
        • 2012-02-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-06
        • 1970-01-01
        • 1970-01-01
        • 2021-10-29
        • 1970-01-01
        相关资源
        最近更新 更多