【问题标题】:MySQL FULLTEXT query issueMySQL FULLTEXT 查询问题
【发布时间】:2018-02-28 12:29:53
【问题描述】:

我正在尝试使用 mysql FULLTEXT 进行查询,但不幸的是,即使表包含那些输入关键字,它也会返回空结果。

表:user_skills

+----+----------------------------------------------+
| id |                    skills                    |
+----+----------------------------------------------+
|  1 | Dance Performer,DJ,Entertainer,Event Planner |
|  2 | Animation,Camera Operator,Film Direction     |
|  3 | DJ                                           |
|  4 | Draftsman                                    |
|  5 | Makeup Artist                                |
|  6 | DJ,Music Producer                            |
+----+----------------------------------------------+  

索引:

查询:

SELECT id,skills 
FROM user_skills 
WHERE ( MATCH (skills) AGAINST ('+dj' IN BOOLEAN MODE))  

在这里,一旦我运行上述查询,DJ 行都不会返回。表中有 3 行的值为 dj

【问题讨论】:

  • 可能是你的任期太短了

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


【解决方案1】:

全文索引是您尝试做的错误的方法。但是,您的具体问题是最小字长,即 3 或 4(默认情况下),具体取决于结尾。这在documentation 中进行了解释,特别是here

重置值后,您需要重新创建索引。

我怀疑你是想变得聪明。您可能听说过“不要将事物列表存储在分隔字符串中”的建议。但是您反而反驳了“啊,但我可以使用全文索引”。你可以,虽然你会发现更复杂的查询并不能很好地优化。

只要做对就行。创建关联表user_skills,每个用户和用户拥有的每个技能一行。您会发现它更易于在查询、防止重复、优化查询等方面使用。

【讨论】:

    【解决方案2】:

    您的搜索词太短了

    在 mysql 文档中

    有些词在全文搜索中会被忽略:

    任何太短的单词都会被忽略。全文搜索找到的默认最小单词长度为三个字符 InnoDB 搜索索引,或者 MyISAM 的四个字符。你可以控制 通过在创建之前设置配置选项来截断 index: InnoDB 搜索的 innodb_ft_min_token_size 配置选项 索引,或 ft_min_word_len 用于 MyISAM。

    .

    布尔全文搜索具有以下特点:

    他们不使用 50% 的阈值。

    它们不会自动按照相关性递减的顺序对行进行排序。 您可以从前面的查询结果中看到: 最高相关性是包含两次“MySQL”的那个,但它是 最后列出,而不是第一个。

    即使没有 FULLTEXT 索引,它们也可以工作,尽管搜索 以这种方式执行会很慢。

    应用最小和最大字长全文参数。

    https://dev.mysql.com/doc/refman/5.6/en/fulltext-natural-language.html

    https://dev.mysql.com/doc/refman/5.6/en/fulltext-boolean.html

    【讨论】:

    • @TimBiegeleisen .. 是的 ..(我知道)答案是一般性的 ...无论如何 .. 答案更新删除了参考。停用词 .. 感谢您的建议
    猜你喜欢
    • 1970-01-01
    • 2010-11-22
    • 2011-11-14
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    相关资源
    最近更新 更多