我的索引文档看起来像这样:
{
"fun_field": [...]
}
我非常希望对数组长度求和,以获得所有fun_field数组中的元素总数。我一直在尝试很多组合,而且还没有能够让它发挥作用。
有没有人能够流利地说出神秘的弹性搜索方言来描述我所要求的内容?
答案 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"
}
}
}
}
答案 2 :(得分:0)
已接受的解决方案对我不起作用,但我能够获得与何文的脚本版本相同的答案,而没有任何脚本字段。
{
"size": 0,
"aggs" : {
"row_count" : {
"value_count": {
"field": "fun_field.keyword"
}
}
}
}