Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL:为什么全文的分数总是1?_Mysql_Full Text Search_Relevance - Fatal编程技术网

MySQL:为什么全文的分数总是1?

MySQL:为什么全文的分数总是1?,mysql,full-text-search,relevance,Mysql,Full Text Search,Relevance,如果我运行此查询并打印每行的分数,它们总是1: 以下是一些示例查询结果: First | Last | Score ------------------------------ Jonathan | Bush | 1 Joshua | Gilbert | 1 Jon | Jonas | 1 这是我运行的查询: SELECT First, Last, MATCH(First, Last) AGAINST ('Jon' IN BOOLEA

如果我运行此查询并打印每行的分数,它们总是1:

以下是一些示例查询结果:

First     |  Last     | Score
------------------------------
Jonathan  |  Bush     | 1
Joshua    |  Gilbert  | 1
Jon       |  Jonas    | 1
这是我运行的查询:

SELECT First, Last, MATCH(First, Last) AGAINST ('Jon' IN BOOLEAN MODE) AS score 
FROM users 
WHERE MATCH(First, Last) AGAINST('Jon' IN BOOLEAN MODE)
ORDER BY score DESC;

布尔模式仅支持二进制答案,无论搜索字符串是否出现在列中,都表示0或1。要获得计算权重的十进制结果,必须对索引列使用“匹配对”

您可以通过这种方式使用布尔模式来获取您的wheight:

SELECT *, ((1.3 * (MATCH(column1) AGAINST ('query' IN BOOLEAN MODE))) +
(0.6 * (MATCH(column2) AGAINST ('query' IN BOOLEAN MODE)))) AS relevance
FROM table WHERE ( MATCH(column1,column2) AGAINST
('query' IN BOOLEAN MODE) ) ORDER BY relevance DESC
布尔模式的优点是,您可以在非索引列上使用它,但只能使用0,1作为结果,非布尔模式返回十进制结果,但只能应用于索引列。。。另请参见。

使用as分数的结果:

SELECT First, Last, MATCH(First, Last) AGAINST ('Jon') AS score 
FROM users 
WHERE MATCH(First, Last) AGAINST('+Jon' IN BOOLEAN MODE)
ORDER BY score DESC;
注意:请注意+运算符。此选项仅在
布尔模式下可用

我之所以建议按相关性排序的
自然模式
,是因为它返回给
Jon Chris

Jon Chris        | Jonas
Jon Martin Chris | Jonas
Jon Martin Chris | Jonas
Jon Chris        | Jonas
布尔模式
可以返回
+Jon+Chris

Jon Chris        | Jonas
Jon Martin Chris | Jonas
Jon Martin Chris | Jonas
Jon Chris        | Jonas

这是因为这两个词都是在返回分数2的
布尔模式下找到的,但是
自然模式
为第一个条目增加了更多,因为直接命中和/或直接跟随词返回更好的搜索结果。

接受的答案部分正确。根据MySQL文档,匹配可以返回浮动。数据库引擎(如果是MyISAM)在匹配时只返回1。InnoDB全文搜索与匹配匹配将返回浮动,以便根据匹配结果排序更高质量的匹配。

分数可能总是
1
(或
0
)的另一个原因是如果全文索引发生了许多更改:运行
优化表my_表将修复这些降级的索引,正如页面中所记录的。

非常感谢您的回答,问题是我的一列没有全文索引,因此没有布尔模式它就无法工作。但是没有布尔模式的另一个问题是,我不能在单词中搜索,所以我需要写下整个单词来得到一个结果。例如,使用布尔模式,我可以搜索
Jo
,我将得到包含
Jo
的结果,这是因为在布尔模式下,我可以使用
*
等运算符。Hm,听起来很难:-)您考虑过使用ApacheLucene()吗?还有一个php的API(如果您使用它的话)。Lucene创建自己的索引,您可以执行您梦想的每个查询;-)我正在使用Node.js,mysql很好,我已经在我的一个PHP应用程序中完成了我想要的。我现在真的不知道该怎么做。我真的不明白你的答案是什么:)为什么你要在那里乘?好吧,我认为每种技术都有一些限制,所以你可以使用mysql:-)如果你使用node.js,你可能需要努力切换到lucene的使用。。。lucene只是mysql的一个补充。您不必对所有内容都使用它,只需对“硬”查询使用它,但这样我就需要将数据库拆分到系统中?