ElasticSearch-PHP时间戳字段按照天聚合

正常的Elasticserach的时间戳字段按照天进行聚合应该是很简单的(date_histogram),代码如下:

{
    "aggs":{
        "create_date":{//别名
            "date_histogram":{
                "field":"create_time",//时间戳字段
                "interval":"Day",
                "format":"yyyy-MM-dd"//格式化日期
                }
            }
        }
    }
}

interval字段支持多种关键字:year, quarter, month, week, day, hour, minute, second

出来的结果会是以下这种:

{
    "aggregations":{
        "create_date":{
            "buckets":[{
                "key_as_string":"2013-02-02",
                "key":1328140800000,
                "doc_count":1
            },{
                "key_as_string":"2013-02-03",
                "key":1330646400000,
                "doc_count":2
            },
            ...
            ]}
        }
}

然而,对于PHP来说,time()精确到秒,而java和Elasticsearch是精确到毫秒,所以聚合出来的时候会发现所有的key_as_string字段都是1970开头的...因为考虑到表中增加字段比较麻烦,所以找到了可以利用script来实现,将PHP的时间戳乘以1000即可,方法如下:

{
    "query": {
        "filtered": {
            "filter": {
                "bool": {
                    "must": [
                        {
                            "term": {
                                "mid": "33"
                            }
                        }
                    ]
                }
            }
        }
    },
    "aggs": {
        "group_by_date": {
            "terms": {
 				"script": "new Date(doc['created_time'].value * 1000).format('yyyy-MM-dd')"        
 			}
        }
    }
}

这样聚合出来就是按照天进行聚合了。

转载于:https://my.oschina.net/wsyblog/blog/868986

ES (Elasticsearch) 是由 Elasticsearch 公司提供的开源全文搜索及分析引擎,它基于 Lucene,用于构建高性能、分布式的大数据处理系统。ES 支持实时查询,并能高效地处理大量的日志、事件流和其他实时数据源。下面是一些常用的 ES 查询语句及其解释: ### 1. **基本搜索查询** 基础的全文搜索语句,查找包含指定关键字的所有文档。 ```json GET /index_name/_search { "query": { "match": { "field_name": "keyword" } } } ``` 这里 `index_name` 是索引名称,`field_name` 是需要搜索的字段名,`keyword` 是你要搜索的关键字。 ### 2. **范围查询** 用于查询特定范围内值的记录。 ```json GET /index_name/_search { "query": { "range": { "numeric_field": { "gt": 5, "lt": 10 } } } } ``` 在这个例子中,我们查询 `numeric_field` 字段大于5且小于10的记录。 ### 3. **聚合查询** 聚合查询用于对结果集进行统计汇总。 ```json GET /index_name/_search { "aggs": { "my_aggregation": { "terms": { "field": "category", "size": 10 }, "aggs": { "average_price": { "avg": { "field": "price" } } } } } } ``` 这个查询会将所有文档按照 `category` 字段分组,并计算每个类别下平均价格。 ### 4. **过滤查询** 用于进一步缩小搜索结果的条件筛选。 ```json GET /index_name/_search { "query": { "bool": { "must": [ {"term": { "status": "active" }}, {"range": {"timestamp": { "gte": "2021-01-01T00:00:00Z", "lte": "2021-12-31T23:59:59Z" }}} ] } } } ``` 此查询将只返回状态为“active”且时间戳在2021年之间的文档。 ### 5. **高亮显示查询** 用于突出显示查询匹配到的结果。 ```json GET /index_name/_search { "highlight": { "pre_tags": ["<strong>"], "post_tags": ["</strong>"], "fields": { "title": {} } }, "query": { "match": { "title": "keyword" } } } ``` 这将在搜索结果的 `title` 字段中高亮显示匹配的关键字。 ### 相关问题: 1. **如何优化 ES 性能?** 2. **ES 的索引是如何工作的?** 3. **在实际项目中如何安全地利用 ES 进行大规模数据检索?**
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值