目前有商品表和订单表。
订单记录了购买的商品 id 和价格。
为了优化商品流的呈现,要为商品做热度排序:
根据商品的浏览量、收藏量、销售额进行评分排序。
同时为了防止热门的商品一直排在前面,对以上信息添加基于时间的权重。
(比如 7 天内销量权重高,15 天权重减半,30 天权重再减半,超过 30 天就不记录在内)
目前数据在 SQL 数据库中,同时有 Redis 作为缓存使用。
在商品数量不断上升的前提下,有没有比较成熟高效的热度排序方案呢 (暂时不考虑 AI 排序)
|  |      1leogm9408leo      2022-11-25 10:42:35 +08:00 这个排序其实是很常见的业务场景,数据同步到 es ,浏览量、收藏量这些作为排序因子,时间作权重因子,在 es 里用排序脚本排序 | 
|  |      2lawsiki      2022-11-25 10:43:52 +08:00 redis zset 排序?每次读取缓存的时候根据权重更新 score | 
|      3jaggle      2022-11-25 10:50:32 +08:00 via iPhone @leogm9408leo 排序脚本性能如何,会不会很慢呢,因为我想到这样就没法用索引了 | 
|  |      4leogm9408leo      2022-11-25 11:04:08 +08:00 @jaggle #3 es 做这种简单脚本排序性能还是很 OK 的,算是业界最常用的开源组件了。当然也看你们的数据规模,如果总共也就几千条数据要排序,那全量 load 到内存里直接计算成本更低,如果有百万的在售商品,那用 es 更省心 | 
|  |      5liuhuansir      2022-11-25 11:12:15 +08:00 看你举例的权重方案,估计对实时性要求也不高,直接搞成定时任务,跑完入库就行了吧 | 
|  |      6Hanggi OP @leogm9408leo 不用 ES 呢? | 
|  |      7leogm9408leo      2022-11-25 11:54:41 +08:00 @Hanggi #6 看业务的数据量和实时性要求,如果数据量少,可以全部 load 到内存做计算,如果实时性要求不高,可以用定时任务异步算分 | 
|      8wudaye      2022-11-25 12:00:57 +08:00 加个热度字段或者热度索引表,然后定时任务更新热度就行了 | 
|  |      9Hanggi OP | 
|      10ghostwind      2022-11-25 16:44:43 +08:00 热度排序是 topN 的还是 全排序的 |