2015-02-05 79 views

回答

9

_size mapping field,如果允許,應該給你的每個文件的大小是免費的。將此與avg聚合相結合應該可以得到你想要的。喜歡的東西:

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

我喜歡這個比我的回答更好:) –

+3

如果你想獲得文檔的大小,你需要指示ES來存儲大小對於每個文檔:https://www.elastic.co/guide/en/elasticsearch/reference/1.4/mapping-size-field.html –

+0

除非您使用Elasticsearch 2.0或更早版本,否則不支持此功能。 – lucabelluccini

1

在黑暗中拍攝,但小面或聚合與腳本結合可能會做到這一點。

{ 
    ..., 

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

這實際上失敗[email protected]f59))],從[0],大小[10]:查詢失敗[無法執行主查詢]];嵌套:GroovyScriptExecutionException [MissingPropertyException [爲org.elasticsearch.index.fielddata.ScriptDocValues $字符串評估屬性「長度」的異常,原因:groovy.lang.MissingPropertyException:No such property:length for class:java.lang.String]]; 「 –

+0

嘗試doc ['_ all']。values.size()而不是 – Arun

+0

首先,_all字段並不總是存在,因爲它取決於索引模板 其次,通過這種方式, _all字段是一個特殊的全部字段,它將所有其他字段的值連接成一個大字符串,使用空格作爲分隔符,[...]按照https://www.elastic.co/guide/ en/elasticsearch/reference/current/mapping-all-field.html,它在6.x中被棄用 – lucabelluccini

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