我有一个按出席者分组的事件索引,每个事件都是一个嵌套文档,其中包括他们出席的时间戳以及其他信息,例如事件名称。
文档源本质上是这样的:
{
"_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是否有一种方式可以将文档聚合应用为过滤器?