
现在有这么一个需求,查询满足多条件的数据,条件会有很多,满足条件的次数越多排序越靠前,怎么实现呢?
最好的情况是满足不同条件有不同的匹配分,满足条件的匹配分越高越靠前,目前能想到的方案通过在 select 里通过 if 判断是否满足给某个字段+分,这样感觉效率会很低,有没有更好的方案呢?
1 7Qi7Qi 2021-10-28 09:52:20 +08:00 case when .... then weight1 else 0 end + case when .... then weight2 else 0 end .... 这样? |
2 CathayChen OP @7Qi7Qi 这样效率会不会很低,目前是准备这样做的 |
3 JKeita 2021-10-28 10:07:56 +08:00 这种不是应该上 es 吗 |
4 shanghai1943 2021-10-28 10:15:14 +08:00 莫非每个条件都查一次,然后在结果里计算出现的次数?这个听起来用 MySQL 实现有点复杂。 |
5 CathayChen OP @JKeita 没毛病,不能为了一个小需求就上 es 吧 |
6 micean 2021-10-28 10:15:37 +08:00 如果不用 es 的话,自己来做一个索引表,按权重计算汇总一个数字用于排序,按及时性要求来设计全量或增量更新 |
7 debuggerx 2021-10-28 10:20:06 +08:00 https://stackoverflow.com/questions/3333665/rank-function-in-mysql 这样的需求直接用 mysql 应该是避免不了全表扫描,效率高不到哪去的 |
8 JKeita 2021-10-28 10:39:56 +08:00 @CathayChen 这要看你这需求的使用频率吧,如果很频繁完全可以上 es |
9 thetbw 2021-10-28 10:47:19 +08:00 @CathayChen 既然是小需求,就干脆砍了吧,给领导说做不了 |
10 yuanshuai1995 2021-10-28 10:49:17 +08:00 @thetbw #9 没毛病 哈哈哈哈 |
11 chenjiangui998 2021-10-28 13:07:34 +08:00 全表查出来, 代码排序 |
12 ipwx 202110-28 13:12:21 +08:00 你这需求是典型的全文检索算法的需求。 对,就是让你上 ES 。 |
13 fengpan567 2021-10-28 13:50:57 +08:00 整不了 |
14 fxxkgw 2021-10-28 14:27:47 +08:00 |
15 SonivelY 2021-10-29 11:10:30 +08:00 不想用 ES 的话,试试更加轻量的 mysql ngram |