2016-03-08 79 views
1

我已经查看了mysql的布尔全文搜索文档,并且有书面说,MATCH将返回一个浮点值以及一个示例。在其他地方,我发现对此的引用状态相同,MATCH将按相关性分数返回浮点数。为什么MATCH返回整数相关性而不是float

但是当我运行此查询

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" 

在我的理解是,“香蕉和草莓”系列应该得到比其他两个更高的分数,因为有两个词匹配?

+0

计算相关性的方式取决于您是否在进行BOOLEAN搜索以及使用的是哪个表引擎。 – CBroe

+0

在这种情况下,表引擎是MyISAM。关于布尔搜索。据我所知,默认的操作符是OR(编辑:文档指出,当没有指定+或 - 时,该字是可选的) – Ello

+0

您的查询实际上不会过滤任何不匹配的行。 '...匹配(......)反对(...在BOOLEAN模式中)'会排除这个有点神奇的双重目的表达式计算为0(假)的行。唯一的其他可能的布尔结果是1. –

回答

0

我刚刚在我的一张桌子上遇到过这种情况,其中一张不同的桌子提供了预期的结果。选中以验证您的表未设置为MyISAM(只在匹配时返回1),您会希望InnoDB获得您的匹配返回的浮点值,以便您可以按匹配的顺序进行排序。

+0

谢谢,这从来没有在文档中声明:/ – Ello

+0

我知道这是相当晚,希望它仍然会有所帮助。 – BrendonKoz

相关问题