2017-10-18 7 views
1

J'ai des documents avec une structure (simplifiée) comme ceci:Comment revenir exactement un document par match bool

{uuid: 1, timestamp: "2017-10-18T01:30:00.000Z", "key": "value"} 
{uuid: 2, timestamp: "2017-10-18T01:30:00.000Z", "key": "value"} 
{uuid: 1, timestamp: "2017-10-18T01:25:00.000Z", "key": "value"} 
{uuid: 2, timestamp: "2017-10-18T01:25:00.000Z", "key": "value"} 
{uuid: 1, timestamp: "2017-10-18T01:20:00.000Z", "key": "value"} 
{uuid: 2, timestamp: "2017-10-18T01:20:00.000Z", "key": "value"} 

Maintenant, je suis en train d'obtenir exactement un documents par uuid match comme si (avec le dernier horodatage):

query: { 
    bool: { 
     should: [{ 
      match: { 
       uuid: 1 
      } 
     }, 
     { 
      match: { 
       uuid: 2 
      } 
     }] 
    } 
} 

Cependant, la requête retourne plusieurs documents ci-dessus pour les deux uuid s. Comment puis-je modifier ma requête pour renvoyer deux derniers documents avec uuid1 et 2 comme ceci:

{uuid: 1, timestamp: "2017-10-18T01:30:00.000Z", "key": "value"} 
{uuid: 2, timestamp: "2017-10-18T01:30:00.000Z", "key": "value"} 

Répondre

3

Je suggère d'utiliser une agrégation terms couplée à un sous-agrégation top_hits, comme ceci:

{ 
    "query": { 
    "bool": { 
     "should": [ 
     { 
      "term": { 
      "uuid.keyword": 1 
      } 
     }, 
     { 
      "term": { 
      "uuid.keyword": 2 
      } 
     } 
     ] 
    } 
    }, 
    "aggs": { 
    "uuids": { 
     "terms": { 
     "field": "uuid.keyword" 
     }, 
     "aggs": { 
     "latest": { 
      "top_hits": { 
      "size": 1, 
      "sort": { 
       "timestamp": "desc" 
      } 
      } 
     } 
     } 
    } 
    } 
} 
+0

Cette Résultats de la requête avec le message d'erreur suivant: '{" erreur ": {" root_cause ": [{" type ":" parsing_exception "," raison ":" Attendu [START_OBJECT] sous [champ], mais a reçu [VALUE_STRING] dans [terms] "," line ": 1," col ": 99}]," type ":" parsing_exception "," raison ":" Attendu [START_OBJECT] sous [champ], mais a reçu un [V] ALUE_STRING] dans [terms] "," line ": 1," col ": 99}," status ": 400}' – Pono

+0

Mon mauvais ... corrigé! – Val

+0

Maintenant, ES se lamente sur "Fielddata est désactivé sur les champs de texte par défaut". Dois-je l'activer sur le champ 'uuid'? – Pono