比较关联分数来自不同表格的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