比较不同表中mySQL全文搜索的相关性得分

比较不同表中mySQL全文搜索的相关性得分,mysql,full-text-search,Mysql,Full Text Search,场景: 我有5张表都需要搜索。我有适当的全文索引(索引?)。我可以使用匹配和对照,并根据它们的相关性得分进行排序,来逐个搜索 问题是我想合并和交织所有5个表的搜索结果,并以相关性得分为基础。像这样: (SELECT *, MATCH(column) AGAINST (query) as score FROM table1 WHERE MATCH (column) AGAINST (query)) UNION (SELECT *, MATCH(column) AGAINST (query) as

场景

我有5张表都需要搜索。我有适当的全文索引(索引?)。我可以使用匹配和对照,并根据它们的相关性得分进行排序,来逐个搜索

问题是我想合并和交织所有5个表的搜索结果,并以相关性得分为基础。像这样:

(SELECT *, MATCH(column) AGAINST (query) as score
FROM table1
WHERE MATCH (column) AGAINST (query))
UNION
(SELECT *, MATCH(column) AGAINST (query) as score
FROM table2
WHERE MATCH (column) AGAINST (query))
UNION
...
ORDER BY score DESC
除了表1的行数可能是表2的两倍之外,这种方法工作得很好。因此,由于mySQL考虑了相关性的唯一性,表1的结果得分通常明显高于表2的结果


最终:如果我想平均加权每个表的结果,我如何规范5个大小不同的表的结果分数?

您对五个表的结果进行的联合使我相信您可能应该将这五个表合并为一个表(可能还有一列标识五种数据类型中的一种,目前分布在五个表中)

类似地,您可以将文本列存储在一个表中,如下所示:

CREATE TABLE text_table (
    text_col TEXT,
    fk INT, -- references the PK of an item in either table1, or table2, or...
    ref_table INT, -- identifies the related table, e.g. 1 means 'table1', etc.
    FULLTEXT INDEX (text_col)
)
然后您可以在此表上运行全文搜索。
将结果与实际数据表连接起来似乎很简单。

注意:


YaK提出的上述建议可能是问这个问题的大多数情况下的最佳选择。我实际采取的方法是记录5个表中每个表的平均最高相关性得分。然后,我将所有未来相关性得分除以该因子,尝试“正常化”得分,以便将其与releva进行比较nce在其他表格中的得分。到目前为止,它运行良好,但并不完美(特别是大型查询).

我曾考虑过合并这些表,但也有其他情况得益于它们的排他性。我的退步是您提供的概念,即创建一个仅由5个感兴趣的表组合而成的可搜索列组成的表。我只是希望避免重复数据。不过,感谢您给出的清晰简洁的答案,穆ch非常感谢。也许你可以将文本“移动”,而不是复制到此表中。只需向其添加一个数字主键,并从数据表中引用它。这是一个非常好的选择。谢谢你的回复,我非常感谢。