MySQL 在两个未按相关性排序的表上进行 MATCH AGAINST

MySQL MATCH AGAINST on Two Tables Not Sorting by Relevance

我有一个使用 MATCH AGAINST 的存储过程,它最初返回按相关性排序的数据,这正是我想要的。但是,当我添加一个 LEFT JOIN 和第二个 MATCH AGAINST 时,它现在从两者返回数据,但不再按相关性排序。现在自动按ID排序。

从 table 按相关性排序:

BEGIN
    SELECT
        dictionary.id,
        dictionary.`term`,
        dictionary.`definition`
    FROM itDictionary dictionary
    WHERE MATCH(dictionary.term, dictionary.definition)
    AGAINST(_query IN NATURAL LANGUAGE MODE);
END

从两个 table 返回,但以某种方式按 ID 排序:

BEGIN
    SELECT
        dictionary.id,
        dictionary.`term`,
        dictionary.`definition`,
        links.id,
        links.`name`,
        links.`url`
    FROM itDictionary dictionary
        LEFT JOIN itRelatedLinks links ON links.term_id = dictionary.id
    WHERE MATCH(dictionary.term, dictionary.definition)
    AGAINST(_query IN NATURAL LANGUAGE MODE)
        OR MATCH(links.name)
    AGAINST(_query IN NATURAL LANGUAGE MODE);
END

我接近了吗?

你可以这样做

SELECT
    dictionary.id,
    dictionary.`term`,
    dictionary.`definition`,
    links.id,
    links.`name`,
    links.`url`
FROM itDictionary dictionary
    LEFT JOIN itRelatedLinks links ON links.term_id = dictionary.id
WHERE MATCH(dictionary.term, dictionary.definition)
AGAINST(_query IN NATURAL LANGUAGE MODE)
    OR MATCH(links.name)
AGAINST(_query IN NATURAL LANGUAGE MODE)
ORDER BY MATCH(dictionary.term, dictionary.definition)
AGAINST(_query IN NATURAL LANGUAGE MODE)
    + MATCH(links.name)
AGAINST(_query IN NATURAL LANGUAGE MODE);

它会把两者的分数相加,然后得到一个综合分数来排序

当然,您可以为每个分数添加一个因素以优先考虑一个