Sum数组长度elasticsearch

时间:2017-01-25 23:01:47

标签: elasticsearch

我的索引文档看起来像这样:

{
  "fun_field": [...]
}

我非常希望对数组长度求和,以获得所有fun_field数组中的元素总数。我一直在尝试很多组合,而且还没有能够让它发挥作用。

有没有人能够流利地说出神秘的弹性搜​​索方言来描述我所要求的内容?

3 个答案:

答案 0 :(得分:2)

我发现了一种回避这个问题的迂回方式,而不使用脚本。

{
    "size": 0,
    "aggs" : {
        "outer_agg" : { 
            "nested" : { 
                "path" : "elements"   
            },
            "aggs": {
                "inner_agg": {
                    "top_hits": {
                        "from": 0,
                        "size": 1
                    }
                }
            }
        }
    }
}

这将返回doc_count,这正是我正在寻找的。 ES的DSL将是我的死亡。

答案 1 :(得分:1)

您可以为聚合(或script_fields)定义自己的脚本,这样他们就可以在聚合发生之前对阵列进行求和。对于不同的脚本语言,语法可能会有所不同,但对于Elasticsearch 5中的Painless,您还需要启用内联脚本。

"aggs": {
  "array_sums" : {
    "sum": {
       "script": {
         "lang": "painless",
         "inline": "doc['fun_field'].length"
       }
    }
  }
}

还有其他脚本语言,您可以阅读它们here。聚合here中有一些脚本示例。

答案 2 :(得分:0)

已接受的解决方案对我不起作用,但我能够获得与何文的脚本版本相同的答案,而没有任何脚本字段。

{
    "size": 0,
    "aggs" : {
        "row_count" : { 
            "value_count": {
                "field": "fun_field.keyword"
            }
        }
    }
}