MYSQL 实现加权排序

MYSQL · 2023-07-07

优化一商城列表搜索页,同事发来一篇文章。嗯,搞。
加权排序类似于加权平均,有所侧重。
在商城中,商品名称,关键词,规格,商品描述等类似于一片片文章。
希望名称,关键词的权重高于描述。找到用户更想查询到的数据。

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;
    把所有的权重的积做排序,值大的为接近的最为靠前。
    还可做其他方面的权重,例如关键字在标题中位置等权衡顺序。

2014.09.23 mysql 一条sql语句实现实现搜索功能(加权排序)

mysql 加权排序
Theme Jasmine by Kent Liao