繁体   English   中英

MySQL FULLTEXT查询问题

[英]MySQL FULLTEXT query issue

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

索引:

abovr表的索引

查询:

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

在这里,一旦我运行以上查询,就不会返回任何DJ行。 该表中有3行,其值为dj

您的搜索词简而言之

如在mysql文档

在全文搜索中,某些单词会被忽略:

任何太短的单词都会被忽略。 全文搜索发现的默认最小单词长度对于InnoDB搜索索引为3个字符,对于MyISAM为4个字符。 您可以通过在创建索引之前设置配置选项来控制截止值:InnoDB搜索索引使用innodb_ft_min_token_size配置选项,MyISAM使用ft_min_word_len。

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

他们不使用50%阈值。

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

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

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

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

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

全文索引是您尝试执行的错误方法。 但是,您的特定问题是最小字长,取决于结尾,它是3或4(默认情况下)。 这在文档中进行了说明 ,特别是在此处

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

我怀疑您正在尝试变得聪明。 您可能已经听过“不要以分隔字符串存储内容列表”的建议。 但是您反而反对“啊,但是我可以使用全文索引”。 可以 ,尽管您会发现更复杂的查询不能很好地优化。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM