更新记录
111(2021-12-06) 下载此版本
刚写完
平台兼容性
阿里云 | 腾讯云 | 支付宝云 |
---|---|---|
√ | √ | × |
云函数类插件通用教程
使用云函数类插件的前提是:使用HBuilderX 2.9+
文章帖子排序算法【x-sort】 很多应用经常都会根据用户的交互信息对内容进行排序,因为项目需要抄了一个简单的排序算法。 使用方法: const xSort = require('x-sort'); let score = xSort.calcScore({ create_time: 内容建立毫秒时间戳, update_time: 内容更新毫秒时间戳(可空), view_num: 内容浏览数(可空), comment_num: 内容评论数(可空), fav_num: 内容收藏数(可空), agree: 点赞数(可空), disagree: 反对数(可空) }); score为计算结果。
算法原理:
总得分指标/时间量^时间重力因子
分子包括文章相关的各种数据属性,这里对view_num浏览量做了一次去对数处理,主要是为了防止某些浏览量较大的文章异军突起,待在榜单迟迟不动。 comment_num评论数、fav_num收藏数直接加和到分子中,作为文章热门程度的考虑因素。 这里可以自由添加你需要的任何交互信息到分子中,当然也可以对这类信息做取对数操作。
分母是对时间因子的考虑,宏观上来看,就是文章热度和创建时间成反比。公式:(1 +create/2 + update/2)^i 可以通过对 i 变量的调控来改变时间因子对热度的影响。这里的create和update是创建时间、更新时间跟现在时间的小时数差值。 经过多次测试,最终分别将日、周、月的 i 值选取为 1.0、0.5、0.3。默认设置为1.0
例子: 建立数据n表ews,并建立score倒序索引。 本地执行云函数console就会在news表插入数据,然后浏览器运行就可以看到排好序的新闻列表了。 另外写了个把排序分数和_id拼接的方法,这样每个文章的score都是唯一的,可以在翻页的时候直接作为next_id来使用 score = xSort.sortId(socre,_id); 生产类似这样的0000006561adf26e3445870001a10827 分数值,前8位带前导零的分数值,后24是系统_id