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

场景

我有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个不同大小的表的结果标准化?


你的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结果似乎很简单。


作为说明:

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

链接地址: http://www.djcxy.com/p/75281.html

上一篇: Comparing Relevance Scores From mySQL full text searches from different tables

下一篇: search on a table and linked tables with fulltext