0

我一直在寻找资源来解释此查询如何按相关性对检索到的项目进行准确排序,但一直找不到。希望你们中的一个可以向我解释它的后勤工作?

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 列中搜索搜索词“单词”。然后它返回那些结果,(不管布尔运算符如何)以“随机顺序”(按首先找到的内容排序,然后找到第二个,依此类推)。

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

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

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

是因为布尔全文搜索为这些搜索词提供了隐藏的数值吗?就像如果 AGAINST 子句读取:

AGAINST ('+apple -macintosh ~microsoft >windows' IN BOOLEAN MODE)

像“apple”的值为 100,“macintosh”的值为 -100,“microsoft”的值为 20,“windows”的值为 40(以反映运算符效果)?

我知道这过于简化了过程(尤其是在考虑一列是否包含多个这些搜索词时),但这是我得到的最好的。


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

4

0 回答 0