1

所以考虑这个数据:

映射

{
    "testIndex": {
        "mappings": {
            "testType": {
                "properties": {
                    "eventType": {
                        "type": "string",
                        "index": "not_analyzed"
                    },
                    "eventStarted": {
                        "type": "date"
                    },
                    "eventEnded": {
                        "type": "date"
                    }
                }
            }
        }
    }
}

和一些示例数据来了解什么是什么

{    
    "eventType" : "type1",
    "eventStarted" "2014-09-01 08:00:01",
    "eventEnded" "2014-09-01 09:21:57"
},
{    
    "eventType" : "type1",
    "eventStarted" "2014-09-01 10:01:07",
    "eventEnded" "2014-09-01 10:28:11"
},
{    
    "eventType" : "type2",
    "eventStarted" "2014-09-01 09:13:46",
    "eventEnded" "2014-08-11 09:21:51"
},
{    
    "eventType" : "type3",
    "eventStarted" "2014-08-11 10:13:46",
    "eventEnded" "2014-08-11 10:21:51"
}
...

这个想法是有些事件时不时地独立发生,我们记录它们何时开始和何时结束。

我需要的是进行聚合,但如果没有一些外部脚本,我想不出办法。

聚合应该给我:在eventType “type1”开始之前 10 分钟到 0 分钟发生的所有eventTypes的列表,并在“type1 开始之后结束。

而且我不需要针对特定​​的“type1”事件而是针对所有事件,因此我的聚合应该为每个“type1”事件都有一个存储桶,然后在该存储桶中列出在“type1”之前最多 10 分钟发生的类型列表"但在 type1 以我们为此实例找到的这些类型的数量开始计数之后结束。

因此,据我了解,我需要某种方式来进行查询/过滤以获取所有 type1 事件,然后以某种方式在我的聚合中引用我的结果的日期字段,但我找不到如何或是否有可能。

我希望这是有道理的。

很抱歉这个问题很长,但我认为这个抽象的例子会让我的问题更清楚。

4

1 回答 1

1

Elasticsearch 聚合构建仅依赖于当前文档属性的存储桶。在这里,您尝试根据其他文档的值构建存储桶(从概念上讲,这是一个连接)——这是不可能的。

于 2014-09-10T20:51:07.557 回答