MySQL FULLTEXT 查询问题

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

我正在尝试使用 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                            |
+----+----------------------------------------------+  

索引:

Indexes for the abovr table

查询:

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

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

最佳答案

全文索引对于您尝试做的事情来说是错误的方法。但是,您的具体问题是最小字长,它是 3 或 4(默认情况下),具体取决于结尾。这在 documentation 中有解释。 , 具体来说 here .

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

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

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

关于MySQL FULLTEXT 查询问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49029656/

相关文章:

php - 如果它们在 mySQL 中具有相同的值,如何不对行计数两次?

php - 为什么不显示我的数据?

sql - 在不存在的行上有 "select for update" block

mysql - 是否有一种优雅且高效的 SQL 方式来列出所有子字符串位置?

rest - 无限制地从 couchbase 全文搜索 rest API 获取所有结果

mysql - 瑞典语字符排序问题 Å Ä Ö MySQL

MySQL查询根据动态数据获取列

sql - 为什么批量插入/更新速度更快?批量更新如何进行?

php - MySQL/PHP/SugarCRM 调度

sql - FULLTEXT 索引会加速 LIKE 条件吗?