比较相关性分数来自不同表格的mySQL全文搜索

时间:2012-10-26 18:22:05

标签: mysql full-text-search

方案

我有5个表都需要搜索。我有适当的全文索引(索引?)。我可以使用MATCH和AGAINST单独搜索每个,并按相关性分数排序。

问题是我想要组合并交织所有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个不同大小的表的结果进行标准化处理?

2 个答案:

答案 0 :(得分:1)

你对这五个表的结果UNION让我相信你可能应该将这五个表合并为一个表(可能还有一个额外的列,用于标识五种类型的数据之一,目前已传播在五个表中。)

同样,您可以只将文本列存储在一个表中,如下所示:

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)
)

然后你可以在这张桌子上运行全文搜索。 JOIN使用实际数据表的结果似乎很简单。

答案 1 :(得分:0)

作为说明:

YaK的上述建议可能是提出此问题的大多数情景的最佳选择。我实际采取的路线是记录5个表中每个表的平均最高相关性得分。然后,我将通过该因子划分未来的相关性分数,以试图“标准化”分数,以便可以将它们与其他表格的相关性分数进行比较。到目前为止,它运作良好,但并不完美(特别是大型查询)。