Elasticsearch聚合:是否可以在聚合中引用过滤器/查询数据

时间:2014-09-08 08:23:11

标签: elasticsearch nosql-aggregation

所以请考虑这些数据:

映射

{
    "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"
}
...

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

我需要的是进行聚合,但我不能在没有外部脚本的情况下想办法。

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

我需要做的不是特定的" type1"但是对于所有这些事件,所以我的聚合应该为每个" type1" 事件设置一个存储桶,然后在该存储桶中显示在之前10分钟发生的类型列表" type1" 但在type1开头后以我们为此实例找到的那些类型的数量开始计算。

所以根据我的理解,我需要某种方式来使查询/过滤器获取所有type1事件,然后以某种方式在我的聚合中引用我的结果的日期字段,但我无法找到如何或是否它根本不可能。

我希望这是有道理的。

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

1 个答案:

答案 0 :(得分:1)

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