2016-11-02 4 views
1

Ich habe die folgende TabellenstrukturHolen Sie sich aktuelle Datensatz in der Gruppe in Elasticsearch

change_id saveDate  id 
------------------------------- 
1   2014-04-01 205 
2   2014-05-01 205 
3   2014-03-31 111 
4   2014-04-01 111 
5   2014-04-01 333 

Jetzt möchte ich für bestimmte ids = die aktuelle Datensatz erhalten [205, 111]. Ich sollte die Datensätze mit change_id [2,4] bekommen.

Meine Elasticsearch Abfrage ist so weit:

{ 
     "fields": [ 
      "Something.id", 
      "Something.change_id", 
      "Something.saveDate" 
     ], 
     "query": { 
      "terms": { 
       "Something.id": [ 
        "2015", 
        "111" 
       ] 
      } 
     }, 
     "sort": [ 
      { 
       "Something.saveDate": { 
        "order": "desc" 
       } 
      } 
     ], 
     "aggs": { 
      "id": { 
       "terms": { 
        "field": "Something.id", 
        "size": 20 
       } 
      } 
     } 
    } 

I Ergebnis von 4 Zeilen bin immer CHANGE_ID = [2, 1, 4, 3], die absteigend nach Savedate sortiert.

Wie kann ich das filtern und zwei Zeilen erhalten, wo change_id = [4, 2]?

Antwort

2

Sie können top_hits aggregation für diesen Zweck verwenden. Es hat auch source filtering und Sortierfähigkeit.

{ 
    "query": { 
    "bool": { 
     "filter": { 
     "terms": { 
      "Something.id": [ 
      "205", 
      "111" 
      ] 
     } 
     } 
    } 
    }, 
    "size": 0, 
    "aggs": { 
    "unique_id": { 
     "terms": { 
     "field": "Something.id", 
     "size": 20 
     }, 
     "aggs": { 
     "top_result": { 
      "top_hits": { 
      "size": 1, 
      "_source": ["Something.id", "Something.change_id", "Something.saveDate"], 
      "sort": { 
       "Something.saveDate" : "desc" 
      } 
      } 
     } 
     } 
    } 
    } 
} 
+0

Ich und Enas sind absolut glücklich über Ihre Antwort! Genau das, was wir brauchen! Vielen Dank ! –

+0

froh, dass ich helfen konnte. Könnten Sie die Antwort akzeptieren, wenn es für Sie funktioniert hat? – ChintanShah25

Verwandte Themen