Jak mogę użyć filtru w połączeniu z agregatem w elastycznym wyszukiwaniu?Wiele filtrów i agregat w elastycznej analizie
Oficjalna dokumentacja podaje jedynie trywialne przykłady dla filter i dla aggregations i brak formalnego opisu zapytania dsl - porównaj np. z postgres documentation.
Poprzez wypróbowanie znalazłem następującą kwerendę, która jest akceptowana przez elasticsearch (parsowanie) bez błędów, ale ignoruje podane filtry:
{
"filter": {
"and": [
{
"term": {
"_type": "logs"
}
},
{
"term": {
"dc": "eu-west-12"
}
},
{
"term": {
"status": "204"
}
},
{
"range": {
"@timestamp": {
"from": 1398169707,
"to": 1400761707
}
}
}
]
},
"size": 0,
"aggs": {
"time_histo": {
"date_histogram": {
"field": "@timestamp",
"interval": "1h"
},
"aggs": {
"name": {
"percentiles": {
"field": "upstream_response_time",
"percents": [
98.0
]
}
}
}
}
}
}
Niektórzy sugerują, używając query
zamiast filter
. Jednak oficjalna dokumentacja ogólnie zaleca the opposite filtrowanie dokładnych wartości. Kolejny problem z query
: podczas gdy filtry oferują and
, query
, nie.
Czy ktoś może wskazać mi dokumentację, blog lub książkę, które opisują pisanie nietrywialnych zapytań: co najmniej jeden agregat plus wiele filtrów.
jesteś prawdopodobnie moją ulubioną osobą w tej chwili. Walczyłem z tym od wielu godzin. – simonmorley
W tym rozwiązaniu pole top aggr nazywa się "filtrowane" i nie należy go mieszać z http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-filtered-query.html, więc użyj innej nazwy (np. "aggresults") - pod tą nazwą otrzymasz wyniki w odpowiedzi. Sprawdź referencję: http://www.elastic.co/guide/en/elasticsearch/reference/master/search-aggregations-bucket-filter-aggregation.html i odpowiedz na http://stackoverflow.com/a/24823895/565525 . –
Działa z ES 5.x, okrzyki !! –