我一直在寻找资源来解释此查询如何按相关性对检索到的项目进行精确排序,并且无法找到任何内容。 希望你们其中一个人可以向我解释它的物流?
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解释这些" word"结果(单词,显然没有任何值/数字/清除顺序)并根据相关性对它们进行排序?
是否因为布尔全文搜索为这些搜索词提供了隐藏的数值?就像AGAINST条款一样:
AGAINST ('+apple -macintosh ~microsoft >windows' IN BOOLEAN MODE)
喜欢" apple"获得值100," macintosh"值为-100," microsoft"值为20," windows"值为40(以反映操作员效果)?
我知道这个过程过于简单化(特别是在考虑列是否包含多个搜索词时),但这是我得到的最好的。
我基本上需要的是对WHERE子句(查询代码的下半部分)的外行术语解释作为整体对查询结果的影响。