优化一商城列表搜索页,同事发来一篇文章。嗯,搞。
加权排序类似于加权平均,有所侧重。
在商城中,商品名称,关键词,规格,商品描述等类似于一片片文章。
希望名称,关键词的权重高于描述。找到用户更想查询到的数据。
SELECT
1 * ( document.w10 + document.w20 + document.w30 )
* ( document.w11 + document.w21 + document.w31 ) AS w,
document.*
FROM
(
SELECT
0,
CASE WHEN d.abstracts LIKE '%1%' THEN
2 ELSE 0.1
END AS w10,
CASE WHEN d.tags LIKE '%1%' THEN
3 ELSE 0.1
END AS w20,
CASE WHEN d.NAME LIKE '%1%' THEN
4 ELSE 0.1
END AS w30,
CASE WHEN d.abstracts LIKE '%2%' THEN
2 ELSE 0.1
END AS w11,
CASE WHEN d.tags LIKE '%2%' THEN
3 ELSE 0.1
END AS w21,
CASE WHEN d. NAME LIKE '%2%' THEN
4 ELSE 0.1
END AS w31,
d.*
FROM
document d
) document LEFT JOIN document dd ON document.id = dd.id
ORDER BY
w DESC,
dd.create_time DESC
其上大意为: 有关键词 1, 2 同时搜索。
- 名字(NAME) 包含 的权重为 4;
- 标签tag包含的权重为3;
- 描述babstracts包含的权重为2;
- 默认权重为0;
把所有的权重的积做排序,值大的为接近的最为靠前。
还可做其他方面的权重,例如关键字在标题中位置等权衡顺序。