2016-11-24 1 views
0

Ich versuche, 2 bool verwenden sollten filtert zusammen: eine, die Objekte enthält keine event_dates.starts_at Werte innerhalb eines Datumsbereich zurückkehrt, zB:Elastische Suche: Objekte mit fehlenden verschachtelten Feldern/leeren Arrays zulassen/finden?

"event_dates": [ 
    { 
     "starts_at": "2016-12-04T08:00:00+07:00" 
    }, 
    { 
     "starts_at": "2016-12-11T08:00:00+07:00" 
    } 
] 

(Werke von selbst in Ordnung), und eine andere, die enthalten können Objekte nicht event_dates.starts_at Felder zur gleichen Zeit, zum Beispiel:

"event_dates": [] 

(eine fehlende Abfrage für diese Verwendung aber scheint die Wirkung des ersten Filters aufzuheben und gibt einfach alles, was in meiner Datenbank)

unten ist die Abfrage, die ich bisher habe:

{ 
    "query":{ 
     "filtered":{ 
     "filter":{ 
      "and":[ 
       { 
        "bool":{ 
        "should":[ 
         { 
          "nested":{ 
           "path":"event_dates", 
           "filter":{ 
           "range":{ 
            "event_dates.starts_at":{ 
             "gte":"20161125", 
             "lte":null, 
             "format":"basic_date" 
            } 
           } 
           } 
          } 
         }, 
         { 
          "missing":{ 
           "field":"event_dates.starts_at" 
          } 
         } 
        ] 
        } 
       } 
      ] 
     } 
     } 
    } 
} 

(es kann einige unnötige Bits sein, da ich dies aus einer größeren Abfrage extrahiert haben). Würde jemand wissen, wo ich falsch liege? Haben Sie versuchen auch die fehlende Filter als verschachtelten Pfad angeben, konnte aber nicht, dass entweder an der Arbeit ...

Antwort

0

Versuchen Sie folgendes:

{ 
    "query": { 
    "filtered": { 
     "filter": { 
     "and": [ 
      { 
      "nested": { 
       "path": "event_dates", 
       "filter": { 
       "bool": { 
        "should": [ 
        { 
         "range": { 
         "event_dates.starts_at": { 
          "gte": "20161125", 
          "lte": null, 
          "format": "basic_date" 
         } 
         } 
        }, 
        { 
         "missing": { 
         "field": "event_dates.starts_at" 
         } 
        } 
        ] 
       } 
       } 
      } 
      } 
     ] 
     } 
    } 
    } 
} 
Verwandte Themen