如何实现Algolia按日期维度的精细化筛选功能
Algolia日期精细化筛选实现方案

前置配置
- 把所有需要用于筛选的日期字段(包括你提到的
arrival date、created date)统一转为**Unix时间戳(毫秒/秒级均可,全链路保持单位统一即可)**存入Algolia索引,不要存格式化日期字符串,否则无法进行数值范围比对。 - 进入Algolia后台对应索引的配置页,将用于筛选的日期字段加入
attributesForFaceting列表,开启筛选权限,否则过滤规则不会生效。
核心实现逻辑
1. 前端计算时间阈值
用户点击对应时间筛选选项时,提前在业务侧算好时间范围的边界值,Algolia本身不支持动态时间运算,所有阈值必须提前算好以固定数值传入。
以点击「最近7天」选项为例,JS侧计算7天前时间戳的代码如下:
// 获取当前时间毫秒级时间戳 const currentTimestamp = Date.now(); // 计算7天对应的毫秒数,得到7天前的时间阈值 const sevenDaysRange = 7 * 24 * 60 * 60 * 1000; const thresholdTimestamp = currentTimestamp - sevenDaysRange;
2. 拼接过滤参数发起搜索
调用Algolia搜索接口时,在filters参数中拼接数值范围过滤规则,筛选出日期字段大于等于阈值的记录即可:
const algoliaClient = algoliasearch('你的应用ID', '你的搜索端API Key'); const targetIndex = algoliaClient.initIndex('你的业务索引名'); targetIndex.search('', { // 其余业务搜索参数 // 如果要基于arrival date筛选,就把字段名替换为你索引中arrival date对应的时间戳字段名 filters: `created_date >= ${thresholdTimestamp}` }).then(searchRes => { // 渲染返回的筛选结果 console.log(searchRes.hits); });
其余选项扩展
所有时间范围筛选逻辑完全一致,只需要修改对应时间偏移量即可:
- 今天:偏移量为当前时间到当日0点的时间差,以当日0点时间戳作为阈值
- 最近30天:偏移量改为
30 * 24 * 60 * 60 * 1000 - 自定义日期区间:将用户选择的开始、结束日期分别转为时间戳,拼接过滤规则为
date_field >= 开始时间戳 AND date_field <= 结束时间戳
注意:不要尝试在filters参数中写动态时间计算表达式,Algolia不支持这类运算,必须提前算好固定数值传入。
内容的提问来源于stack exchange,提问作者hafiz muhammed
相关产品推荐
相关产品推荐

