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