You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在CodeIgniter项目的Elasticsearch中查询最近90天数据

在CodeIgniter中使用Elasticsearch获取最近90天数据的解决方案

首先看你的场景:happenon是存储为字符串格式的毫秒级时间戳,Elasticsearch其实可以直接对这类纯数字字符串做数值范围查询,不用额外转成日期类型,我们只需要正确计算出90天前的毫秒时间戳,再调整range查询条件就可以了。

修正后的代码示例

$params['index'] = ES_INDEX;
$params['type'] = ES_REQ_TYPE;
$params['size'] = 30;

// 计算90天前的毫秒级时间戳:strtotime("-90 days")得到秒级时间戳,乘以1000转成毫秒格式
$ninety_days_ago = strtotime("-90 days") * 1000;

// 构造range查询:匹配happenon大于等于90天前,小于等于当前时刻(若需限定到当天凌晨,可换成'now/d')
$params['body']['query']['bool']['filter'][] = [
    'range' => [
        'happenon' => [
            'gte' => $ninety_days_ago,
            'lte' => 'now'
        ]
    ]
];

// 调试输出用
echo "<pre>";
print_r($params);
exit;

关键细节说明

  • 时间戳计算:用strtotime("-90 days")可以简洁获取90天前的秒级时间戳,乘以1000就能转换成和happenon一致的毫秒格式,比手动计算90*24*3600*1000更直观且不易出错。
  • 字段适配逻辑:虽然happenon是字符串类型,但它由纯数字组成,Elasticsearch会自动以数值方式处理这个字段的范围查询,直接用gte和lte对比完全有效。
  • 原代码小问题修正:你之前的代码里es_start和es_end的日期写反了(17-05-2018晚于16-05-2018),换成90天的逻辑后就不需要这两个变量了。

内容的提问来源于stack exchange,提问作者Gopinath Parthee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 09:00:53