2014-12-04 13 views
8

Mam duży problem ze zrozumieniem podstawy systemu zapytań ES.elasticsearch uzyskując zbyt wiele wyników, potrzebuję filtrowania zapytań pomocowych

Mam następującą kwerendę na przykład:

{ 
    "size": 0, 
    "query": { 
    "bool": { 
     "must": [ 
     { 
      "term": { 
      "referer": "www.xx.yy.com" 
      } 
     }, 
     { 
      "range": { 
      "@timestamp": { 
       "gte": "now", 
       "lt": "now-1h" 
      } 
      } 
     } 
     ] 
    } 
    }, 
    "aggs": { 
    "interval": { 
     "date_histogram": { 
     "field": "@timestamp", 
     "interval": "0.5h" 
     }, 
     "aggs": { 
     "what": { 
      "cardinality": { 
      "field": "host" 
      } 
     } 
     } 
    } 
    } 
} 

To żądać zbyt wiele wyników:

"status" : 500, "reason" : "ElasticsearchException[org.elasticsearch.common.breaker.CircuitBreakingException: Data too large, data for field [@timestamp] would be larger than limit of [3200306380/2.9gb]]; nested: UncheckedExecutionException[org.elasticsearch.common.breaker.CircuitBreakingException: Data too large, data for field [@timestamp] would be larger than limit of [3200306380/2.9gb]]; nested: CircuitBreakingException[Data too large, data for field [@timestamp] would be larger than limit of [3200306380/2.9gb]]; "

Mam tryied ten wniosek:

{ 
    "size": 0, 
    "filter": { 
    "and": [ 
     { 
     "term": { 
      "referer": "www.geoportail.gouv.fr" 
     } 
     }, 
     { 
     "range": { 
      "@timestamp": { 
      "from": "2014-10-04", 
      "to": "2014-10-05" 
      } 
     } 
     } 
    ] 
    }, 
    "aggs": { 
    "interval": { 
     "date_histogram": { 
     "field": "@timestamp", 
     "interval": "0.5h" 
     }, 
     "aggs": { 
     "what": { 
      "cardinality": { 
      "field": "host" 
      } 
     } 
     } 
    } 
    } 
} 

I chciałbym filtrować dane, aby uzyskać poprawny wynik, każda pomoc byłaby mile widziana!

Odpowiedz

12

Znalazłem rozwiązanie, to trochę dziwne. Mam następnie dimzak adviced i wyczyścić cache:

curl --noproxy localhost -XPOST "http://localhost:9200/_cache/clear" 

Następnie użyłem filtrowanie zamiast odpytywania jako Olly zaproponował:

{ 
    "size": 0, 
    "query": { 
    "filtered": { 
     "query": { 
     "term": { 
      "referer": "www.xx.yy.fr" 
     } 
     }, 
     "filter" : { 
     "range": { 
      "@timestamp": { 
      "from": "2014-10-04T00:00", 
      "to": "2014-10-05T00:00" 
      } 
     } 
     } 
    } 
    }, 
    "aggs": { 
    "interval": { 
    "date_histogram": { 
    "field": "@timestamp", 
    "interval": "0.5h" 
    }, 
    "aggs": { 
    "what": { 
     "cardinality": { 
     "field": "host" 
     } 
    } 
    } 
    } 
    } 
} 

nie mogę dać ci zarówno ansxwer, myślę dimzak zasługuje najlepiej, ale kciuki do was dwóch facetów :)

+0

Wymyśliłem inne, znacznie czyściejsze rozwiązanie, dam ci znać, kiedy skończę z testowaniem –

+0

Alexandre Mélard, jakie było twoje czystsze rozwiązanie? – spuder

+1

Niestety, nie miałem na to więcej czasu, musiałem pozostawić ten temat na boku, ale postaram się napisać coś na mój temat –

6

Możesz najpierw wyczyścić pamięć podręczną, a następnie wykonać powyższe zapytanie, jak pokazano here.

Innym rozwiązaniem może być usunięcie przedział lub zmniejszyć zakres czasu w zapytaniu ...

My najlepiej byłoby jasne cache albo pierwszy, albo przydzielić więcej pamięci do elasticsearch (więcej here)

4

Używanie filtr poprawi wydajność:

{ 
    "size": 0, 
    "query": { 
    "filtered": { 
     "query": { 
      "term": { 
      "referer": "www.xx.yy.com" 
      } 
     }, 
     "filter" : {"range": { 
      "@timestamp": { "gte": "now", "lt": "now-1h" 
       } 
      } 
      } 
     } 
    }, 
    "aggs": { 
    "interval": { 
     "date_histogram": { 
     "field": "@timestamp", 
     "interval": "0.5h" 
     }, 
     "aggs": { 
     "what": { 
      "cardinality": { 
      "field": "host" 
      } 
     } 
     } 
    } 
    } 
} 

można również stwierdzić, że date range jest lepsza niż data histogramu - trzeba określić wiader siebie.

to analizowane pole referer? lub czy chcesz dokładnego dopasowania w tym przypadku - jeśli tak, ustaw go na not_analyzed.

Czy jest dużo mocy w polu hostname? czy próbowałeś wstępnego mieszania wartości?

+0

przy wykonywaniu zapytania, dostaję SearchPhaseExecutionException –

+0

ok, tylko brakuje nawiasów klamrowych wokół filtra ... –

+0

Przeprosiny - zaktualizowałem kod, aby dodać szelki –

Powiązane problemy