2016-04-20 2 views
1

Jemand bitte helfen Sie mir, expires_at IS NULL zur ES-Abfrage unten hinzuzufügen. Ich schaute in Dealing with Null Values Abschnitt für missing Filter, aber die Art, wie ich es verwendet (unten angezeigt) bewirkt, dass nicht abgelaufene Dokumente nicht im Ergebnis erscheinen, so offensichtlich mache ich hier etwas falsch.Die Auswahl von Dokumenten mit einem bestimmten Feld wird in Elasticsearch auf NULL gesetzt.

Hinweis: Ich möchte nicht or query verwenden, weil es deprecated in 2.0.0-beta1 ist.

QUERY

{ 
    "query": { 
    "filtered": { 
     "query": { 
     "bool": { 
      "must": [ 
      { 
       "term": { 
       "order_id": "123" 
       } 
      }, 
      { 
       "term": { 
       "is_active": 1 
       } 
      }, 
      { 
       "range": { 
       "expires_at": { 
        "gt": "2016-07-01T00:00:00+0000" 
       } 
       } 
      } 
      ] 
     } 
     } 
    } 
    } 
} 

Das ist, worauf ich bin mit dem Ziel:

SELECT * FROM orders 
WHERE 
order_id = '123' AND 
is_active = '1' AND 
(expires_at > '2016-07-01T00:00:00+0000' OR expires_at IS NULL) 

Dies ist, was ich tat, aber un-abgelaufene Dokumente zeigen nicht so in diesem Fall nach oben das ist falsch.

{ 
    "query": { 
    "filtered": { 
     "filter": { 
     "missing": { 
      "field": "expires_at" 
     } 
     }, 
     "query": { 
     "bool": { 
      "must": [ 
      ...... 
      ...... 
      ] 
     } 
     } 
    } 
    } 
} 

Meine ES Version:

{ 
    "status" : 200, 
    "name" : "Fan Boy", 
    "version" : { 
    "number" : "1.3.4", 
    "build_hash" : "a70f3ccb52200f8f2c87e9c370c6597448eb3e45", 
    "build_timestamp" : "2014-09-30T09:07:17Z", 
    "build_snapshot" : false, 
    "lucene_version" : "4.9" 
    }, 
    "tagline" : "You Know, for Search" 
} 

Antwort

1

Dies sollte es tun:

{ 
    "query": { 
    "filtered": { 
     "query": { 
     "bool": { 
      "must": [ 
      { 
       "term": { 
       "order_id": "123" 
       } 
      }, 
      { 
       "term": { 
       "is_active": 1 
       } 
      }, 
      { 
       "bool": { 
       "should": [ 
        { 
        "range": { 
         "expires_at": { 
         "gt": "20160101000000" 
         } 
        } 
        }, 
        { 
        "filtered": { 
         "filter": { 
         "missing": { 
          "field": "expires_at" 
         } 
         } 
        } 
        } 
       ] 
       } 
      } 
      ] 
     } 
     } 
    } 
    } 
} 
+0

Fehler bekommen: '{ "Code": 500, "message":" SearchPhaseExecutionException [konnte nicht ausgeführt werden phase [query], alle Shards fehlgeschlagen shardFailures {[3JYUoUpWRya90oiKlk2RGQ] [my_index_dev] [0]: SearchParseException [[my_index_dev] [0]: von [-1], size [-1]: Parse Fail [konnte die Quelle nicht analysieren. ... tatsächliche Abfrage erscheint hier .... verschachtelt: QueryParsingException [[my_index_dev] No Abfrage registriert für [fehlende]]; ' – BentCoder

+0

Aktualisierte die Abfrage. Hab nicht gedacht, dass du eine so alte Version benutzt. Übrigens solltest du upgraden. –

+0

Das ist der eine! Vielen Dank. Upgrade wird eines Tages stattfinden :) – BentCoder

Verwandte Themen