2017-04-18 5 views
2

Angenommen, A ist der übergeordnete Typ und B ist der untergeordnete Typ.Parent-Child-Abfrage

Jetzt hat B ein Feld mit dem Namen 'Ereignis'.

Zum Zeitpunkt t1 wurde B1 (ein Dokument vom Typ 'B') mit dem Feld 'Ereignis' = Erfolg gegen ein Elternteil 'A1' indiziert. Jetzt zum Zeitpunkt t2 wurde ein anderes doc B2 mit "event" = "fail" gegen dasselbe übergeordnete "A1" indiziert.

Was ich zu tun habe, ist alle Eltern zu finden, die kein Kind haben oder nur 'Ereignis' = Erfolgskind (kein einziges 'Ereignis' = Kind scheitern). Ist das möglich?

Eine Lösung, die ich sehen kann, ist mein Elternteil (A1) mit einem Flag zu aktualisieren, wenn 'event' = fehlgeschlagen ist und doc indiziert ist. Aber meine B-Typ-Dokumente haben auch ein Ingestion_time-Feld. Also möchte ich Eltern finden, die nie "Event" = "fail" bekommen haben, die ein Kind im angegebenen Zeitraum enthalten.

+0

Sie verwenden 'has_child' Abfrage können haben: https://www.elastic.co/guide/en /elasticsearch/guide/current/has-child.html – alpert

Antwort

0

Diese Abfrage

{ 
    "query": { 
     "bool": { 
      "must_not": { 
       "has_child": { 
        "type": "b", 
        "query": { 
         "term": { 
          "event": "fail" 
         } 
        } 
       } 
      } 
     } 
    } 
} 

Es alle Eltern ausschließen soll, dass Kinder mit fail Feldwert

+0

Yaah. Genau diese Frage traf mich, nachdem ich diese Frage gestellt hatte. Trotzdem danke. :) Markierte es als Antwort. –