Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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中按相关性对布尔全文搜索进行排序,解释了吗?_Mysql_Sorting_Boolean_Full Text Search_Match Against - Fatal编程技术网

MySQL中按相关性对布尔全文搜索进行排序,解释了吗?

MySQL中按相关性对布尔全文搜索进行排序,解释了吗?,mysql,sorting,boolean,full-text-search,match-against,Mysql,Sorting,Boolean,Full Text Search,Match Against,我一直在寻找资源来解释这个查询是如何按照相关性对检索到的项目进行精确排序的,但一直没有找到任何相关信息。 希望你们中的一位能向我解释一下它的物流 SELECT *, MATCH(body, subject) AGAINST ('words' IN BOOLEAN MODE) AS relevance FROM `messages` WHERE MATCH(body, subject) AGAINST ('words' IN BOOLEAN MODE) ORDER BY relevance DE

我一直在寻找资源来解释这个查询是如何按照相关性对检索到的项目进行精确排序的,但一直没有找到任何相关信息。 希望你们中的一位能向我解释一下它的物流

SELECT *, MATCH(body, subject) AGAINST ('words' IN BOOLEAN MODE) AS relevance 
FROM `messages`
WHERE MATCH(body, subject) AGAINST ('words' IN BOOLEAN MODE)
ORDER BY relevance DESC
在本例中,我知道此查询的前半部分在messages.body和messages.subject列中搜索搜索词“words”。然后,它以“随机顺序”返回这些结果(不考虑布尔运算符)(按先找到的顺序排列,然后按第二个顺序排列,依此类推)

然而,我不理解的是MySQL如何解释WHERE子句和查询的其余部分。重复前半段代码如何根据相关性对结果重新排序

例如,ORDER BY子句按desc.数字顺序对users.user_id列进行排序对我来说很有意义,因为每一行/单元格都有明确的顺序(例如-3、2、1等等)

但是(回到原始查询)MySQL如何解释这些“单词”结果(单词,显然没有任何值/数字/清晰顺序)并根据相关性对它们进行排序

是因为布尔全文搜索为这些搜索项提供隐藏的数值吗?如反对条款为:

AGAINST ('+apple -macintosh ~microsoft >windows' IN BOOLEAN MODE)
就像“苹果”的值为100,“麦金塔”的值为-100,“微软”的值为20,“windows”的值为40(以反映运营商的影响)

我知道这过于简化了过程(特别是当考虑一列是否包含多个搜索词时),但这是我得到的最好结果



我基本上需要的是一个关于WHERE子句(查询代码的第二部分)对整个查询结果的影响的外行术语解释

匹配。。。根据
的计算结果为一个数字,更好的匹配具有更高的值。当你按这些顺序订购时,你首先会得到更好的匹配。这句话让它更清楚。我试着在没有WHERE子句的情况下输入查询。从所见即所得的角度考虑结果——它返回3列:第一列是你的主题,第二列是你的身体,第三列是你的匹配值。Where子句只是告诉ORDER BY子句在按desc.ORDER排序时“使用这些数值!”。我之所以感到困惑,是因为我认为查询的前半部分从未提供匹配列及其第一位的数值,而是返回匹配的非数值,where子句独立于select和order,在本例中,没有它,您将获得相同的顺序。它只是过滤掉不匹配的行。