【发布时间】:2018-03-10 05:07:27
【问题描述】:
我有一个按参加活动的个人分组的活动索引,每个活动都是一个嵌套文档,其中包含他们参加的时间戳以及活动名称等其他信息。
文档来源基本上是这样的:
{
"_id" : 1,
"events" : [
{
"name" : "example event", // keyword type
"eventDatetime" : "2018-02-26 04:02:57" // date type
},
{
"name" : "other example event",
"eventDatetime" : "2017-01-01 12:00:01"
},
{
"name" : "final example event",
"eventDatetime" : "2016-06-12 12:00:00"
}
]
}
我想查询搜索 API 以回答以下问题:“查找 2016 年参加超过 3 场活动的所有个人”。本质上相当于 SQL having count(*) > 3 子句。查询的日期范围是用户定义的,因此在索引时间预先计算字段是不可能的。我们需要能够滚动浏览所有文档结果。索引大小以亿计,因此应用层的任何后处理都不是可行的解决方案。
如果需要运行此查询,可以重组文档格式,但任何格式都需要按个人分组,因为我们可能同时查询文档中的其他字段,例如年龄和其他活动都有自己的时间戳,因此将事件本身作为主文档是不可行的。
Elasticsearch 是否有办法将文档聚合作为过滤器应用?
【问题讨论】:
标签: elasticsearch