2016-04-29 14 views
-1

Ich habe ein elastisches Dokument, strukturiert [vereinfacht] wie folgt aus:Elastic Suche Unter Liste Filter

{ 
"Contest": { 
    "Name": "Room1", 
    "Participants": [ 
    { 
    "PlayerID": "tester1", 
    "Score": "30" 
    }, 
    { 
     "PlayerID": "tester2", 
     "Score": "40" 
    }, 
    { 
     "PlayerID": "tester3", 
     "Score": "10" 
    } 
    ] 
} 

}

Wie ich diese abfragen kann und wieder ein Ergebnis erhalten, des Wettbewerbs, und nur das Participant-Objekt mit einem Score von über 35?

Wenn ich das Objekt abfrage und einen Filter verwende, bekomme ich die gesamte Teilnehmerliste zurück, was ich nicht brauche; Ich brauche nur eine Liste der Objekte, die die Suchkriterien erfüllen. Muss ich mit verschachtelten Dokumenten umstrukturieren?

Antwort

0

Verwenden inner_hits wie:

{ 
"query": { 
    "nested": { 
    "path": "Participants", 
    "query": { 
     "range": { 
     "Participants.score": { 
      "from": 35 
     } 
     } 
    }, 
    "inner_hits" : {} 
    } 
    } 
} 

Ergebnisse von inner_hits erforderlich Fetch.

+0

Danke, das habe ich gefunden, aber nur als Hinweis: Der Output denormalisiert die Struktur, die ich als nicht ideal empfinde. – Andy

+0

Haben Sie eine andere Lösung gefunden, die die Struktur nicht denormalisiert? –

Verwandte Themen