比赛揭幕

时间:2017-05-03 19:11:05

标签: mysql

我想了解MATCH AGAINST背后的情况 它返回0到10的分数,但我不明白标准。我只是能够看到尝试匹配它返回0.0906190574169159的确切字符串,而如果字符串根本不包含它返回0.任何启发?

1 个答案:

答案 0 :(得分:0)

所以我说读了这个,但你说它还不够:dev.mysql.com/doc/refman/5.7/en/fulltext-natural-language.ht ml

相关段落是:

&#34;当在WHERE子句中使用MATCH()时,如前面所示的示例,返回的行将首先自动排序,具有最高的相关性。相关性值是非负浮点数。零相关意味着没有相似性。相关性的计算基于行(文档)中的单词数,行中唯一单词的数量,集合中单词的总数以及包含特定单词的行数。&#34; < / p>

如果您在该页面上执行示例表和插入并运行此查询:

SELECT MATCH (title,body)
    AGAINST ('database' IN NATURAL LANGUAGE MODE) FROM articles;  

你得到:

+--------------------------------------------------------------------------+
| MATCH (title,body)
        AGAINST ('database' IN NATURAL LANGUAGE MODE) |
+--------------------------------------------------------------------------+
|                                                      0.22764469683170319 |
|                                                                        0 |
|                                                                        0 |
|                                                                        0 |
|                                                      0.22764469683170319 |
|                                                                        0 |
+--------------------------------------------------------------------------+

对于返回零的行,没有匹配,对于其他行,该值是基于&#34; good&#34;的排名。它认为比赛是。在这种情况下,匹配是相同的,因此值是相同的。相反,你跑了:

SELECT MATCH (title,body) AGAINST ('Database comparison' IN NATURAL LANGUAGE MODE) FROM articles;

你得到:

+--------------------+
| 0.0906190574169159 |
|                  0 |
|                  0 |
|                  0 |
| 0.6961383819580078 |
|                  0 |
+--------------------+

请注意,现在值不同了。第一个非零结果得分较低,因为其中只有一些现在匹配,而另一个得分高得多表示匹配更好。