Mysql 为什么MATCH返回整数相关性而不是浮点

Mysql 为什么MATCH返回整数相关性而不是浮点,mysql,match,match-against,Mysql,Match,Match Against,我查阅了mysql的布尔全文搜索文档,有人写道,匹配将返回一个浮点值,并附有一个示例。在我发现的其他地方,对这一点的引用都是相同的,MATCH将通过相关性得分返回一个浮点值 但是当我运行这个查询时 select match(j.name) against('banana* strawberr* coconut*' IN BOOLEAN MODE) as score from juices j order by score desc 我得到0或1 以下是一些分数为1的行: "Banana an

我查阅了mysql的布尔全文搜索文档,有人写道,匹配将返回一个浮点值,并附有一个示例。在我发现的其他地方,对这一点的引用都是相同的,MATCH将通过相关性得分返回一个浮点值

但是当我运行这个查询时

select 
match(j.name) against('banana* strawberr* coconut*' IN BOOLEAN MODE) as score
from juices j
order by score desc
我得到0或1

以下是一些分数为1的行:

"Banana and strawberry flavor" 
"Apple and banana juice" 
"Coconuts with pickles"

据我所知,“香蕉和草莓”这一行应该比其他两行得分更高,因为有两个词是匹配的?

我刚刚在我的一张表上体验到了这一点,其中另一张表提供了预期的结果。检查以验证您的表是否未设置为MyISAM(匹配时仅返回1),您将希望InnoDB获得匹配时返回的浮点值,以便您可以按匹配的秩排序。

我刚刚在我的一个表上遇到过这种情况,其中一个不同的表提供了预期的结果。检查以验证您的表是否未设置为MyISAM(匹配时仅返回1),您需要InnoDB获取匹配时返回的浮点值,以便您可以按匹配的秩排序。

相关性的计算方式取决于您是否进行布尔搜索,以及使用的表引擎。在这种情况下,表引擎为MyISAM。关于布尔搜索。据我所知,默认运算符是OR(编辑:文档中说明,如果没有为+或-赋值,则该词是可选的),那么查询实际上不会过滤任何不匹配的行
WHERE MATCH(…)对(…在布尔模式下)
将排除这个有点神奇的双用途表达式计算结果为0(false)的行。唯一其他可能的布尔结果是1。@Michael sqlbot我知道,但这不是问题的一部分。问题是,为什么(在我上面的例子中)第1、2和3行的结果总是“1”。我希望第2行和第3行的值低于第1行,但高于0。布尔模式不表示返回布尔值。在文档中,布尔模式启用“+-<>~”等术语上的运算符,匹配函数实际上返回分数。结果应该是一个浮点值,而不是最小值。。。你说得对,它确实仍然是一个浮动。。。至少在MySQL 5.6上。然而,对于小数据集,全文的表现并不十分正常。。。如果这是表中仅有的三行,请添加更多,然后查看结果是否更像您所预测的。相关性的计算方式取决于您是否正在进行布尔搜索,以及使用的表引擎。在这种情况下,表引擎是MyISAM。关于布尔搜索。据我所知,默认运算符是OR(编辑:文档中说明,如果没有为+或-赋值,则该词是可选的),那么查询实际上不会过滤任何不匹配的行
WHERE MATCH(…)对(…在布尔模式下)
将排除这个有点神奇的双用途表达式计算结果为0(false)的行。唯一其他可能的布尔结果是1。@Michael sqlbot我知道,但这不是问题的一部分。问题是,为什么(在我上面的例子中)第1、2和3行的结果总是“1”。我希望第2行和第3行的值低于第1行,但高于0。布尔模式不表示返回布尔值。在文档中,布尔模式启用“+-<>~”等术语上的运算符,匹配函数实际上返回分数。结果应该是一个浮点值,而不是最小值。。。你说得对,它确实仍然是一个浮动。。。至少在MySQL 5.6上。然而,对于小数据集,全文的表现并不十分正常。。。如果这是表中仅有的三行,请添加更多内容,看看结果是否更像您所预测的那样。谢谢,文档中从未有过这样的陈述:/I知道已经很晚了,希望仍然有用。谢谢,文档中从未有过这样的陈述:/I知道已经很晚了,希望仍然有用。