Czy istnieje lepszy sposób w elastycznym wyszukiwaniu (innym niż wydawanie wszystkich zapytań i ręcznym uśrednianiem długości wszystkich zwróconych dokumentów), aby uzyskać średnią długość dokumentu dla określonego indeksu?Elasticsearch, uzyskaj średnią długość dokumentu
Odpowiedz
_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"}}}}
}
Strzał w ciemno, ale fasety lub agregacje w połączeniu ze scenariuszem mogą to zrobić.
{
...,
"aggs" : {
"avg_length" : { "avg" : { "script" : "doc['_all'].length" } }
}
}
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]]; " –
spróbuj doc ['_ all']. Values.size() zamiast – Arun
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
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"}}
}
}
- 1. Podobieństwo dokumentu w ElasticSearch
- 2. MySQL: Uzyskaj średnią różnic czasowych?
- 3. Uzyskaj średnią z dwóch java.util.Date
- 4. Usuwanie pola z dokumentu Elasticsearch
- 5. ElasticSearch facet wyniki bez dokumentu
- 6. Aktualizacja zindeksowanego dokumentu w Elasticsearch
- 7. Uzyskaj długość tablicy JSON.Net
- 8. Jak określić wersję dokumentu w potoku elasticsearch?
- 9. Dodaj dodatkowe atrybuty do istniejącego dokumentu elasticsearch
- 10. Jaki jest maksymalny rozmiar dokumentu Elasticsearch?
- 11. Uzyskaj długość CryptoStream w .Net
- 12. Uzyskaj długość odpowiedzi Ajax jQquery
- 13. Jak uzyskać średnią długość słowa za pomocą Lambda Expression
- 14. ElasticSearch Uzyskaj indeksu nazw i przechowywać Rozmiar
- 15. Uzyskaj wymagane pola z dokumentu w Mongoengine?
- 16. Interfejs API reklam produktowych Amazon: uzyskaj średnią ocenę klientów
- 17. Uzyskaj długość QString w bajtach (bez znaków)
- 18. Uzyskaj szerokość/długość geograficzną od adresu
- 19. Uzyskaj długość bitów użytych w int
- 20. elasticsearch dopasować wszystkie słowa z dokumentu w zapytaniu
- 21. Używanie skryptu do warunkowego aktualizowania dokumentu w Elasticsearch
- 22. Ogranicz długość pola podczas wysyłania zapytania do Elasticsearch
- 23. Agregacja tablicę wartości w elasticsearch
- 24. Ograniczenia ElasticSearch
- 25. Jak obliczyć średnią ważoną w R?
- 26. Uzyskaj identyfikator ostatnio wsuniętego dokumentu w mongoDB ze sterownikiem Java
- 27. Znajdź średnią kolekcji TimeSpans
- 28. Elasticsearch - poprzednia/następna funkcjonalność
- 29. Uzyskaj maksymalną długość kolumny "ciąg" za pomocą LINQ do SQL
- 30. Uzyskaj długość łańcucha w pikselach za pomocą JavaScriptu
Podoba mi się to lepiej niż moja odpowiedź :) –
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 –
O ile nie używasz Elasticsearch 2.0 lub starszych, ta funkcja nie jest już obsługiwana. – lucabelluccini