多领域术语聚合方法

2024-06-09 06:40:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我对DSL非常陌生,目前正努力在弹性搜索索引中的多个字段上执行类似“groupby”的复合SQL。我从参考文件上了解到www.elastic.co术语聚合不支持从同一文档中的多个字段收集术语。
为克服此限制,提供了两个选项:脚本或复制到字段。
在我使用脚本或复制请求意见/解决方案之前,我想了解是否已用尽所有其他选项。
当前成功运行的代码是:

    query_result = {"query":{
                  "bool": {
                    "must": [{"range": {"flStDttmEst": {"gte":"2017-06-20 10:00:00","lte":"2017-06-20 11:55:00",}}},
                            ],               
                    "filter": [
                            {"terms": {"proto": ["6","17"]}},
                            {"terms": {"dstAd": ["165.130.217.", "165.130.217.","165.130.217.","165.130.217.","165.130.217." ]}}      
                              ],
                           }
                         },
                  "aggregations":{
                        "SumPKTSaggs":{
                            "date_histogram":{"field":"flStDttmEst","interval":"hour","format":"yyyy-MM-dd HH:mm:ss"},
                            "aggs":{"SumPkts":{
                                "sum":{"field":"smPkts"}}}},
                        "SumACKaggs":{
                            "date_histogram":{"field":"flStDttmEst","interval":"hour","format":"yyyy-MM-dd HH:mm:ss"},
                            "aggs":{"SumACK":{
                                "sum":{"field":"smACK"}}}}


                                 }
               }
return 

JSON和Python数据帧的输出是:

    {
"SumACKaggs": {
    "buckets": [
        {
            "SumACK": {
                "value": 23721.0
            },
            "doc_count": 19493,
            "key": 1497952800000,
            "key_as_string": "2017-06-20 10:00:00"
        },
        {
            "SumACK": {
                "value": 23530.0
            },
            "doc_count": 19441,
            "key": 1497956400000,
            "key_as_string": "2017-06-20 11:00:00"
        }
    ]
},
"SumPKTSaggs": {
    "buckets": [
        {
            "SumPkts": {
                "value": 1310745.0
            },
            "doc_count": 19493,
            "key": 1497952800000,
            "key_as_string": "2017-06-20 10:00:00"
        },
        {
            "SumPkts": {
                "value": 1308840.0
            },
            "doc_count": 19441,
            "key": 1497956400000,
            "key_as_string": "2017-06-20 11:00:00"
        }
    ]
}
}

        time                SumOfPkts   SumOfACKs
    0   2017-06-20 10:00:00 1310745.0   23721.0
    1   2017-06-20 11:00:00 1308840.0   23530.0

然而,我的最终目标是不仅使用时间作为“groupby”聚合,而且使用proto和dstAd等其他变量。你知道吗

请建议和感谢您这么多的时间!!你知道吗

史蒂夫


Tags: key脚本fieldstringdocvalueas选项