在弹性搜索中是否有更好的方法(除了发布匹配所有查询并手动平均所有返回文档的长度)以获得特定索引的平均文档长度?
答案 0 :(得分:9)
_size mapping field如果启用,应该免费提供每个文档的大小。将此与avg
聚合相结合可以获得您想要的效果。类似的东西:
{
"query" : {"match_all" : {}},
"aggs" : {"avg_size" : {"avg" : {"terms" : {"field" : "_size"}}}}
}
答案 1 :(得分:2)
我已使用此代码(我已启用_source)
{
"query" : {"match_all" : {}},
"aggs":{
"avg_length" : { "avg" : { "script" : "_source.toString().length()"}}
}
}
好吧,字符串..如果字符串是UTF-8来获取字节:
{
"query" : {"match_all" : {}},
"aggs":{
"avg_length" : { "avg" : { "script" : "_source.toString().getBytes(\"UTF-8\").length"}}
}
}
答案 2 :(得分:1)
在黑暗中拍摄,但是与脚本相结合的方面或聚合可能会这样做。
{
...,
"aggs" : {
"avg_length" : { "avg" : { "script" : "doc['_all'].length" } }
}
}
答案 3 :(得分:0)
在ElasticSearch 6.2中,您只需使用以下行(无需添加'术语'):
"aggs" :
{"avg_size" :
{"avg" :
{"field" : "_size"}}}