MySQL 如何高效实现多条件查询,根据查询条件满足次数排序?

2021-10-28 09:27:17 +08:00
 CathayChen

现在有这么一个需求,查询满足多条件的数据,条件会有很多,满足条件的次数越多排序越靠前,怎么实现呢?

最好的情况是满足不同条件有不同的匹配分,满足条件的匹配分越高越靠前,目前能想到的方案通过在 select 里通过 if 判断是否满足给某个字段+分,这样感觉效率会很低,有没有更好的方案呢?

2401 次点击
所在节点    MySQL
15 条回复
7Qi7Qi
2021-10-28 09:52:20 +08:00
case when .... then weight1 else 0 end + case when .... then weight2 else 0 end ....
这样?
CathayChen
2021-10-28 09:54:19 +08:00
@7Qi7Qi 这样效率会不会很低,目前是准备这样做的
JKeita
2021-10-28 10:07:56 +08:00
这种不是应该上 es 吗
shanghai1943
2021-10-28 10:15:14 +08:00
莫非每个条件都查一次,然后在结果里计算出现的次数?这个听起来用 MySQL 实现有点复杂。
CathayChen
2021-10-28 10:15:31 +08:00
@JKeita 没毛病,不能为了一个小需求就上 es 吧
micean
2021-10-28 10:15:37 +08:00
如果不用 es 的话,自己来做一个索引表,按权重计算汇总一个数字用于排序,按及时性要求来设计全量或增量更新
debuggerx
2021-10-28 10:20:06 +08:00
https://stackoverflow.com/questions/3333665/rank-function-in-mysql

这样的需求直接用 mysql 应该是避免不了全表扫描,效率高不到哪去的
JKeita
2021-10-28 10:39:56 +08:00
@CathayChen 这要看你这需求的使用频率吧,如果很频繁完全可以上 es
thetbw
2021-10-28 10:47:19 +08:00
@CathayChen 既然是小需求,就干脆砍了吧,给领导说做不了😎
yuanshuai1995
2021-10-28 10:49:17 +08:00
@thetbw #9 没毛病 哈哈哈哈
chenjiangui998
2021-10-28 13:07:34 +08:00
全表查出来, 代码排序
ipwx
2021-10-28 13:12:21 +08:00
你这需求是典型的全文检索算法的需求。

对,就是让你上 ES 。
fengpan567
2021-10-28 13:50:57 +08:00
整不了
fxxkgw
2021-10-28 14:27:47 +08:00
我是看了好多遍美团技术团队的这篇文章,感觉很受用。

https://tech.meituan.com/2014/06/30/mysql-index.html
SonivelY
2021-10-29 11:10:30 +08:00
不想用 ES 的话,试试更加轻量的 mysql ngram

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/811141

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX