mysql 全文搜索加权排序实现方式

一、加权排序原理
 
 

二、转化为SQL语句(合理使用case when xx then x else x end 等mysql的函数)
 
 

 
搜索功能的实现:加权排序原理  
1.每一个关键字去匹配标题、标签、摘要都会得到一个权重值,将这个权重值作为排序的依据;
2.如果输入多个关键字,则将每一个关键字匹配所得的权重值求积得到最终的权重值,这样做可以满足“多个关键字均被匹配的排在前面”,然后以这个最终的权重值来排序,具体情况如下。
 
权重默认值(0.1)
情况一:输入两个关键字k1,k2,其中k1匹配一篇文章的摘要,k2也匹配同一篇文章的摘要
匹配项 分值 k1 k2
标题 4 × ×
标签 3 × ×
摘要 2
权重值   0.1+0.1+2 = 2.2 0.1+0.1+2 = 2.2
最终权重值(求积)   2.2×2.2 = 4.84
最终权重值(求和)   2.2+2.2 = 4.4
 
情况二:输入两个关键字k1,k2,其中k1匹配一篇文章的标题、标签、摘要,k2不匹配任何一篇文章
匹配项 分值 k1 k2
标题 4 ×
标签 3 ×
摘要 2 ×
权重值   4+3+2 = 9 0.1+0.1+0.1 = 0.3
最终权重值(求积)   9×0.3 = 2.7
最终权重值(求和)   9+0.3 = 9.3
 
情况三:输入两个关键字k1,k2,其中k1匹配一篇文章的标题、标签、摘要,k2匹配同一篇文章的摘要
匹配项 分值 k1 k2
标题 4 ×
标签 3 ×
摘要 2
权重值   4+3+2 = 9 0.1+0.1+2 = 2.2
最终权重值(求积)   9×2.2 = 19.8
最终权重值(求和)   9+2.2 = 11.2

 
 
  1. SELECT
  2. 1 * (
  3. document.w10 + document.w20 + document.w30
  4. ) * (
  5. document.w11 + document.w21 + document.w31
  6. ) AS w,
  7. document.*
  8. FROM
  9. (
  10. SELECT
  11. 0,
  12. CASE WHEN d.abstracts LIKE '%1%' THEN
  13. 2 ELSE 0.1
  14. END AS w10,
  15. CASE WHEN d.tags LIKE '%1%' THEN
  16. 3 ELSE 0.1
  17. END AS w20,
  18. CASE WHEN d. NAME LIKE '%1%' THEN
  19. 4 ELSE 0.1
  20. END AS w30,
  21. CASE WHEN d.abstracts LIKE '%2%' THEN
  22. 2 ELSE 0.1
  23. END AS w11,
  24. CASE WHEN d.tags LIKE '%2%' THEN
  25. 3 ELSE 0.1
  26. END AS w21,
  27. CASE WHEN d. NAME LIKE '%2%' THEN
  28. 4 ELSE 0.1
  29. END AS w31,
  30. d.*
  31. FROM
  32. document d
  33. ) document LEFT JOIN document dd
  34. ON document.id = dd.id
  35. WHERE
  36. dd.sts = 'normal'
  37. AND to_days( now()) >= to_days(dd.protect_time)
  38. AND dd.create_time >= '2014-07-10 00:00:00'
  39. AND dd.create_time <= '2014-09-23 09:13:56'
  40. AND dd.category_id LIKE '0001%'
  41. AND dd.p_id LIKE '%'
  42. HAVING w > 0.09
  43. ORDER BY
  44. w DESC,
  45. dd.create_time DESC


原文:https://blog.csdn.net/xingxinglaile/article/details/39496755
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值