2015-02-05 21 views

Odpowiedz

9

_size mapping field, jeśli włączona, powinno dać rozmiar każdego dokumentu za darmo. Łącząc to z agregacją avg, otrzymasz to, czego chcesz. Coś jak:

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

Podoba mi się to lepiej niż moja odpowiedź :) –

+3

Jeśli chcesz uzyskać rozmiar dokumentów, musisz poinstruować ES, by zapisał rozmiar dla każdego dokumentu: https://www.elastic.co/guide/en/elasticsearch/reference/1.4/mapping-size-field.html –

+0

O ile nie używasz Elasticsearch 2.0 lub starszych, ta funkcja nie jest już obsługiwana. – lucabelluccini

1

Strzał w ciemno, ale fasety lub agregacje w połączeniu ze scenariuszem mogą to zrobić.

{ 
    ..., 

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

To się nie udaje z [email protected]f59))], od [0], rozmiar [10]: zapytanie nie powiodło się [Nie udało się wykonać głównego zapytania]]; zagnieżdżone: GroovyScriptExecutionException [MissingPropertyException [Exception evaluation property 'length' for org.elasticsearch.index.fielddata.ScriptDocValues ​​$ Strings, Reason: groovy.lang.MissingPropertyException: Brak takiej właściwości: length for class: java.lang.String]]; " –

+0

spróbuj doc ['_ all']. Values.size() zamiast – Arun

+0

Po pierwsze, pole _all nie zawsze jest obecne, ponieważ zależy od szablonu indeksu Po drugie, w ten sposób uzyskujesz' The ' _all field to specjalne pole catch-all, które łączy wartości wszystkich pozostałych pól w jeden duży ciąg, używając spacji jako ogranicznika, [...] 'jak na https://www.elastic.co/guide/ pl/elasticsearch/reference/current/mapping-all-field.html i jest przestarzała w wersji 6.x – lucabelluccini

2

Użyłem tego kodu (mam włączony _source)

{ 
    "query" : {"match_all" : {}}, 
    "aggs":{ 
    "avg_length" : { "avg" : { "script" : "_source.toString().length()"}} 
    } 
} 

Cóż, znaki .. .Przy struny są UTF-8, aby uzyskać bajty:

{ 
    "query" : {"match_all" : {}}, 
    "aggs":{ 
    "avg_length" : { "avg" : { "script" : "_source.toString().getBytes(\"UTF-8\").length"}} 
    } 
} 
Powiązane problemy