2016-03-19 15 views
0

So filtern Sie Dokumente in elasticsearch 2.2, bevor Sie eine Abfrage ausführen. Ich habe diese Seite referenziert, konnte aber immer noch keine korrekte Anfrage stellen.Filter in elasticsearch 2.2

https://www.elastic.co/guide/en/elasticsearch/reference/2.2/query-filter-context.html

{ 
"size" : 9999, 
"query" : { 
"bool" : {  
    "filter" : { 
    "bool" : { 
     "must" : [ { 
     "exists" : { 
      "field" : "dvd" 
     } 
     } ] 
    } 
    }, 
    "should" : [{ 

    "bool" : { 
     "must" : [ { 
     "match" : { 
      "rec" : { 
      "query" : "CKS", 
      "type" : "boolean" 
      } 
     } 
     }, { 
     "match" : { 
      "date" : { 
      "query" : "2016-03-09", 
      "type" : "boolean" 
      } 
     } 
     } ] 
    } 

    }] 
} 
    } 
} 

Das ist, was ich .. ich mit jeweils 2 Must-Klausel habe viel Should Klauseln zu tun versuchen. Eine beliebige der Klausel sollte übereinstimmen, um das Dokument abzurufen. Ich habe nur eine Klausel enthalten, um es einfach zu machen. Die Abfrage funktioniert einwandfrei. Ich möchte Filter darüber anwenden. Dokumente vor dem Abfragen filtern Aber das funktioniert nicht.

Ich verwende Elasticsearch 2.2 ... Bitte lassen Sie mich wissen, wie man Dokumente in dieser Version von elasticsearch filtert.

Ich denke, Post-Filter ist für andere Zwecke.

Antwort

1

würde vorschlagen, eine Änderung am Filterteil der Bool-Abfrage vorzunehmen. Sie können ein Array von Abfragen an das Filterelement übergeben. Es wäre als worden: { "filter" : [ { "exists": { "field" : "dvd" } } ] }

+0

Was ist, wenn ich zwei existieren Filter im OR-Zustand anwenden möchte. ie) Wenn eines der Felder in exists exists existiert, filter das doc. Es ist nicht notwendig, beide Felder zu haben. – user2526641

0

In Bezug auf Ihren Kommentar unter Jettro Frage:

Sie können im Filterblock Bool Abfrage wie so einen Bool Abfrage/Filter verwenden:

{ 
    "query": { 
    "bool": { 
     "filter": { 
     "bool": { 
      "should": [ 
      { 
       "exists": { 
       "field": "dvd" 
       } 
      }, 
      { 
       "exists": { 
       "field": "album" 
       } 
      } 
      ] 
     } 
     } 
    } 
    } 
} 

Jetzt Dokumente mit entweder das DVD-Feld oder das Albumfeld wird zurückgegeben.

Verwandte Themen