2016-09-26 4 views
1

Ich habe Abfrageergebnis, das einige Daten aggregieren, und seine Aggregation Schlüssel ist Nummer. Ich habe versucht, das Ergebnis der Aggregation nach Schlüssel zu sortieren. elasticsearch behandelter Schlüssel als String.Elasticsearch - Get Aggregation Key Sortierung als Nummer

Da die Nummer des aktuellen Ergebnisbereichs ziemlich groß ist, kann sie auf der Clientseite nicht geändert werden. Irgendeine Idee davon?

Hier ist meine Abfrage.

"aggregations" : { 
       "startcount" : { 
        "terms" : { 
         "script" : "round(doc['startat'].value/1000)", 
         "size" : 1000, 
         "order" : { "_term" : "asc" } 
        } 
       } 
      } 

und aktuelle Ergebnis-Bucket.

"buckets": [ 
     { 
      "key": "0", 
      "doc_count": 68 
     }, 
     { 
      "key": "1", 
      "doc_count": 21 
     }, 
     { 
      "key": "10", 
      "doc_count": 6 
     }, 
     { 
      "key": "11", 
      "doc_count": 16 
     }, 

Es ist mein erwartetes Ergebnis.

"buckets": [ 
    { 
     "key": "0", 
     "doc_count": 68 
    }, 
    { 
     "key": "1", 
     "doc_count": 21 
    }, 
    { 
     "key": "2", // not '10' 
     "doc_count": 6 
    }, 
    { 
     "key": "3", // not '11' 
     "doc_count": 16 
    }, 
+0

In Ihrem Mapping, welche Art ist das 'startat' Feld hat? – Val

+0

Typ ist 'Datum' und Format ist 'strict_date_optional_time || epoch_millis'. –

+0

Ich verwende besser date_histogram. Danke mir einen anderen Standpunkt zu geben. –

Antwort

3

den value_script Ansatz sollte das alphabetische Sortierung Problem beheben:

Beispiel:

{ 
    "size": 0, 
    "aggregations": { 
     "startcount": { 
     "terms": { 
      "field": "startat", 
      "script": "round(_value/1000)", 
      "size": 1000, 
      "order": { 
       "_term": "asc" 
      } 
     } 
     } 
    } 
} 
+0

funktioniert für mich. Danke :) –

+0

froh, dass es geholfen hat! – keety

Verwandte Themen