我正在使用 MYSQL 为查询返回的每个结果生成一个分数。然后按分数对结果进行排序。
似乎无法正常工作的部分是当我尝试为已搜索的每个标签添加分数并将结果分配给时。所以假设我搜索标签“example”、“test”和“tag”,我的结果之一被分配给标签“example”、“test”、“someothertag”它应该得到10分因为有 2 场比赛。
实际发生的情况是,如果匹配,无论匹配多少标签,我都会得到 5 分。如果没有匹配的标签,则为 0。
以下是从搜索生成的查询之一的示例。
SELECT DISTINCT results.*,
(
5*(MATCH(tags.name) AGAINST('"self employed"' IN BOOLEAN MODE)) +
5*(MATCH(tags.name) AGAINST('"rental income"' IN BOOLEAN MODE)) +
5*(MATCH(tags.name) AGAINST('"commission income"' IN BOOLEAN MODE)) +
5*(MATCH(tags.name) AGAINST('"bankruptcy"' IN BOOLEAN MODE)) +
5*(MATCH(tags.name) AGAINST('"condo approval"' IN BOOLEAN MODE)) +
1*usefulness +
10*shares
) AS score
FROM results
INNER JOIN categories c on results.ID = c.RESULT_ID
INNER JOIN tags ON results.id = tags.result_id
WHERE c.name in ('purchase', 'condo', 'va')
AND ( tags.name = 'self employed' OR tags.name = 'rental income' OR tags.name = 'commission income' OR tags.name = 'bankruptcy' OR tags.name = 'condo approval' )
AND ( results.scope = 'all' OR results.scope = 'hi' )
AND published = 1
GROUP BY results.ID
having count(distinct c.c_id) = 3
ORDER BY score DESC
LIMIT 8 OFFSET 0