Elasticsearch,获得平均文档长度

时间:2015-02-05 02:46:49

标签: elasticsearch

在弹性搜索中是否有更好的方法(除了发布匹配所有查询并手动平均所有返回文档的长度)以获得特定索引的平均文档长度?

4 个答案:

答案 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"}}}

请在此处查看详细信息:https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-avg-aggregation.html