2016-04-07 19 views
0

Ich habe einen Index von Forex Tick-Daten und möchte eine Abfrage erstellen, um zum Beispiel Geldpreise innerhalb eines Start- und Enddatums zu erhalten eine gewisse "Auflösung". Was ich unter Auflösung verstehe, ist, dass ich für jede x Minuten oder Stunden einen Wert, den Median oder den Mittelwert, haben möchte.Elasticsearch Query, um den Mittelwert aller x Minuten/Stunden/Tage zu erhalten

Ich vermute, ich brauche die Aggregation des Datumshistogramms zusammen mit der Aggregation der Statistiken - aber wie?

Eine Probe nicht korrekt Abfrage, die ich aktuell gerade arbeite ist:

{ 
     "fields": ["ask_price", "bid_price", "tick_date"], 
     "query": { 
      "match": { 
       "currency_pair": currencyPair 
      } 
     }, 
     "filter": { 
      "range": { 
       "gte": startDate, 
       "lte": endDate, 
       "format": "yyyy-MM-dd" 
      } 
     }, 
     "aggs": { 
      "resolution": { 
       "date_histogram": { 
        "field": "tick_date", 
        "interval": "1m" 
       } 
      } 
     } 
} 

Antwort

0

ich meine Antwort ziehen. Ich muss ein Subaggregation verwenden So wird die endgültige und korrekte Abfrage sein:

{ 
     "query": { 
      "match": { 
       "currency_pair": currencyPair 
      } 
     }, 
     "filter": { 
      "range": { 
       "tick_date": { 
        "gte": startDate, 
        "lte": endDate, 
        "format": "yyyy-MM-dd" 
       } 
      } 
     }, 
     "aggs": { 
      "resolution": { 
       "date_histogram": { 
        "field": "tick_date", 
        "interval": "15m" 
       }, 
       "aggs": { 
        "avg_bid": { 
         "avg": { 
          "field": "bid_price" 
         } 
        }, 
        "avg_ask": { 
         "avg": { 
          "field": "ask_price" 
         } 
        }, 
        "median_bid": { 
         "percentiles": { 
          "field": "bid_price", 
          "percents": [50] 
         } 
        }, 
        "median_ask": { 
         "percentiles": { 
          "field": "bid_ask", 
          "percents": [50] 
         } 
        } 
       } 
      } 
     } 
1

Verwenden subAggregation wie folgt aus: unter Berücksichtigung @ Richa Antwort

{ 
    "fields": ["ask_price", "bid_price", "tick_date"], 
    "query": { 
     "match": { 
      "currency_pair": currencyPair 
     } 
    }, 
    "filter": { 
     "range": { 
      "gte": startDate, 
      "lte": endDate, 
      "format": "yyyy-MM-dd" 
     } 
    }, 
    "aggs": { 
     "resolution": { 
      "date_histogram": { 
       "field": "tick_date", 
       "interval": "1m" 
      }, 

      "aggs": { 
      "statistics": { 
      "stats": { 
       "field": "field_name_whose_stats_are_to_be_found" 
       } 
       } 
      } 
      } 
     } 
    } 
Verwandte Themen