2017-02-16 9 views
0

Ich würde Suche mit einem Filter tun möchten, führen nicht ausschließen, dass eine Bedingung entsprechen OR anothor Zustand:Elasticsearch: make a sollte in einen Filter

Ich habe versucht, ein muss in einen Filter zu tun, aber es funktioniert nicht:

POST /my_index/_search 
{ 
    "query": { 
    "bool": { 
     "filter": [ 
     { 
      "should": [ 
      { 
       "match": { 
       "type1_title": "searched match" 
       } 
      }, 
      { 
       "match": { 
       "type2_title": "searched match" 
       } 
      } 
      ] 
     } 
     ] 
    } 
    } 
} 

es hebt diesen Fehler:

"error": { 
    "root_cause": [ 
     { 
     "type": "parsing_exception", 
     "reason": "[should] query malformed, no start_object after query name", 
     "line": 9, 
     "col": 21 
     } 
    ], 
    "type": "parsing_exception", 
    "reason": "[should] query malformed, no start_object after query name", 
    "line": 9, 
    "col": 21 
    }, 
    "status": 400 
} 

wissen Sie, ob wir ein oder in einem Filter tun?

Antwort

1

Warum nicht einfach bool/should, da hier keine Notwendigkeit für filter

POST /my_index/_search 
{ 
    "query": { 
    "bool": { 
      "minimum_should_match": 1, 
      "should": [ 
      { 
       "match": { 
       "type1_title": "searched match" 
       } 
      }, 
      { 
       "match": { 
       "type2_title": "searched match" 
       } 
      } 
      ] 
    } 
    } 
} 

Wenn Sie wirklich das bool/filter/should Konstrukt halten wollen, dann müssen Sie es wie folgt tun:

POST /my_index/_search 
{ 
    "query": { 
    "bool": { 
     "filter": [ 
     { 
     "bool": { 
      "should": [ 
      { 
       "match": { 
       "type1_title": "searched match" 
       } 
      }, 
      { 
       "match": { 
       "type2_title": "searched match" 
       } 
      } 
      ] 
     } 
     } 
     ] 
    } 
    } 
} 
+0

Ihnen danken, Sie sind richtig, aber ich gab ein einfaches Beispiel. Ich möchte wirklich einen oder in einem Filter machen. Weißt du, ob es eine Funktion ist? –

+1

'sollte' ist ein OR-Filter – Val

+0

Ich habe meine Antwort aktualisiert, wenn Sie wirklich den Filter behalten möchten – Val