gpt4 book ai didi

elasticsearch - 使用 Elasticsearch 聚合结果作为过滤器

转载 作者:行者123 更新时间:2023-11-29 02:53:25 25 4
gpt4 key购买 nike

我有一个事件索引,按参加事件的个人分组,每个事件都是一个嵌套文档,带有他们参加时间的时间戳以及其他信息,例如事件名称。

文档源基本上是这样的:

{
"_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 是否有一种方法可以从本质上将文档聚合应用为过滤器?

最佳答案

如果您正在寻找跨文档的聚合(即每个用户多个文档),这样的事情应该可行

GET /_search
{
"_source": false,
"query": {
"nested" : {
"path" : "events",
"query" : {
"range" : {
"events.eventDatetime" :{
"gte": "01/01/2016",
"lte": "12/31/2016",
"format": "MM/dd/yyyy"
}
}
}
}
},
"aggs":{
"user_event_count":{
"terms":{
"field": "id",
"min_doc_count":4
}
}
}
}

但是,如果您还想要内部文档聚合,我认为您将不得不在客户端发布流程

关于elasticsearch - 使用 Elasticsearch 聚合结果作为过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49197598/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com