elasticsearch - 如何过滤弹性搜索中的连续天数?
问题描述
这是我的场景,我想找到连续登录我们网站等于或大于 3 天的用户。例如:
{"login_time":"2018-01-01T18:19:07.982Z", "user_id":123}
{"login_time":"2018-01-01T08:30:07.982Z", "user_id":456}
{"login_time":"2018-01-02T09:39:07.982Z", "user_id":123}
{"login_time":"2018-01-03T08:20:07.982Z", "user_id":123}
{"login_time":"2018-01-03T08:20:07.982Z", "user_id":456}
所以,user_id:123 已经连续登录了 3 天,user_id:456 已经连续登录了 1 天,我希望在 Elasticsearch 返回时我可以删除 user_id:456。
这是我的 ES JSON:
GET event-tracking/_search
{
"aggs": {
"login_by_day": {
"date_histogram": {
"field": "login_time",
"interval": "day"
},
"aggs": {
"user_id": {
"terms": {
"field": "user_id",
"size": 10
}
}
}
}
}
}
和回应:
"aggregations": {
"login_by_day": {
"buckets": [
{
"key_as_string": "2018-01-01T00:00:00.000Z",
"key": 1514764800000,
"doc_count": 2,
"user_id": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": 123,
"doc_count": 1
},
{
"key": 456,
"doc_count": 1
}
]
}
},
{
"key_as_string": "2018-01-02T00:00:00.000Z",
"key": 1514851200000,
"doc_count": 1,
"user_id": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": 123,
"doc_count": 1
}
]
}
},
{
"key_as_string": "2018-01-03T00:00:00.000Z",
"key": 1514937600000,
"doc_count": 2,
"user_id": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": 123,
"doc_count": 1
},
{
"key": 456,
"doc_count": 1
}
]
}
}
]
}
}
然后,我必须编写一些代码来过滤结果。我的问题是如何在没有任何代码的情况下使用 ES JSON 来访问它。
提前致谢。
解决方案
推荐阅读
- gitlab - GitLab CI - 独立环境部署和语义发布
- python - pygame 射手子弹落后
- mysql - MySQL:连接三个表,比较两个值
- ios - 某些文档的 Firebase Cloud Firestore 安全规则
- r - 如何使用 R 访问 Youtube Data API v3
- c++ - 尝试访问地图 C++ 地图第二部分中的数据
- ios - 可以保护 Mobile Safari 缓存免受物理访问吗?
- javascript - 返回包含该特定元素的完整数组
- google-chrome-extension - 浏览器清除数据后未清除 Microsoft Graph 登录数据
- docker - windows server 2019上rabbitmq的docker镜像