提问人:rahul anand 提问时间:5/27/2022 最后编辑:forpasrahul anand 更新时间:5/31/2022 访问量:309
Mysql按相关性和标题排序
Mysql order by relevance and title
问:
我有一个搜索功能的 sql 查询,它有点复杂,但它效果很好。
SELECT
SQL_CALC_FOUND_ROWS p.id as id,
p.title as title,
co.title as company,
p.price as price,
p.image_url as image_url FROM products p
JOIN product_categories pc ON p.id = pc.product_id
JOIN categories cat ON pc.category_id = cat.id
JOIN companies co ON p.company_id = co.id
WHERE MATCH(p.title) AGAINST("nalle" IN BOOLEAN MODE)
OR MATCH(p.description) AGAINST("nalle" IN BOOLEAN MODE)
OR MATCH(cat.title) AGAINST("nalle" IN BOOLEAN MODE)
OR MATCH(co.title) AGAINST("nalle" IN BOOLEAN MODE)
GROUP BY p.id
ORDER BY p.title
LIMIT :offset, :limit
现在,它是按产品标题排序的,但它应该把最相关的结果放在第一位。这意味着,如果它同时匹配 p.title 和 p.description,则比仅匹配 p.title 更相关。最好的匹配是匹配所有四个。
由于查询的复杂性,我不知道如何计算它。
答:
0赞
forpas
5/27/2022
#1
4 个函数中的每一个都返回一个布尔值,其计算结果为 1 或 0,因此您可以获取所有返回值的总和并按该降序排序:MATCH()
ORDER BY MATCH(p.title) AGAINST("nalle" IN BOOLEAN MODE) +
MATCH(p.description) AGAINST("nalle" IN BOOLEAN MODE) +
MATCH(cat.title) AGAINST("nalle" IN BOOLEAN MODE) +
MATCH(co.title) AGAINST("nalle" IN BOOLEAN MODE) DESC
评论
0赞
Asgar
5/27/2022
#2
使用相关性分数怎么样。我找到了一个这样的例子:
SELECT table. * ,
MATCH (
col1, col2, col3
)
AGAINST (
'+(Term1) +(Term1)'
) AS Score
FROM table
WHERE MATCH (
col1, col2, col3
)
AGAINST (
'+(Term1) +(Term1)'
)
我相信你可以弄清楚剩下的
评论