现在有这么一个需求,查询满足多条件的数据,条件会有很多,满足条件的次数越多排序越靠前,怎么实现呢?
最好的情况是满足不同条件有不同的匹配分,满足条件的匹配分越高越靠前,目前能想到的方案通过在 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 2
@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 2021-10-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
|