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