Elasticsearch,获取平均文档长度

Elasticsearch, get average document length

在 elasticsearch 中有没有更好的方法(除了发出匹配所有查询并手动计算所有返回文档的长度的平均值)来获取特定索引的平均文档长度?

在黑暗中拍摄,但结合脚本的分面或聚合可能会做到。

{
    ...,

    "aggs" : {
        "avg_length" : { "avg" : { "script" : "doc['_all'].length" } }
    }
}

_size mapping field,如果启用,应该免费给你每个文档的大小。将它与 avg 聚合结合起来应该可以得到你想要的。类似于:

{
  "query" : {"match_all" : {}},
  "aggs" : {"avg_size" : {"avg" : {"terms" : {"field" : "_size"}}}}
}

我使用过这段代码(我启用了_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"}}
  }
}

在 ElasticSearch 6.2 中,您应该只使用以下行(无需添加 'terms'):

  "aggs" : 
      {"avg_size" : 
           {"avg" : 
               {"field" : "_size"}}}

查看详情:https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-avg-aggregation.html