2017-03-14 1 views
0

Ich habe drei Felder status, type und search. Was ich will, ist, die Daten zu suchen, die status gleich zu NEW enthält oder status gleich zu IN PROGRESS und type gleich abc oder type gleich zu xyz und search enthält (teilweise Übereinstimmung).Übereinstimmung Abfrage auf elastische Suche mit mehreren oder Bedingungen

Mein Aufruf sieht unten wie -

{ 
"query": { 
    "bool" : { 
     "must" : [{ 
       "match": { 
       "status": { 
        "query": "abc", 
        } 
       } 
       }, { 
        "match": { 
        "type": { 
         "query": "NEW", 
         } 
        } 
       },{ 
        "query_string": { 
         "query": "*abc*", /* for partial search */ 
         "fields": ["title", "name"] 
        } 
       }] 
     } 
    } 
} 

Antwort

1

Nest Ihr boolqueries. Ich denke, was Sie vermissen das ist:

"bool": { "should": [ 
    { "match": { "status": "abc" } }, 
    { "match": { "status": "xyz" } } 
]} 

Dies ist eine Abfrage, die als einzige der sollte Klauseln müssen übereinstimmen sollten Klauseln angegeben.

EDIT die Unterschiede zu erklären:

{ 
    "query": { 
     "bool": { 
     "must": [ 
      { 
       "bool": { 
        "should": [ 
        { 
         "match": { 
          "status": "abc" 
         } 
        }, 
        { 
         "match": { 
          "status": "xyz" 
         } 
        } 
        ] 
       } 
      }, 
      { 
       "terms": { 
        "type": [ 
        "NEW", 
        "IN_PROGRESS" 
        ] 
       } 
      }, 
      { 
       "query_string": { 
        "query": "*abc*", 
        "fields": [ 
        "title", 
        "name" 
        ] 
       } 
      } 
     ] 
     } 
    } 
} 

So haben Sie eine boolquery oben. Jede der 3 inneren Abfragen muss wahr sein.

  1. Die erste ist eine verschachtelte boolquery, die wahr ist, wenn der Status entweder abc oder xyz entspricht.
  2. Die zweite ist wahr, wenn der Typ genau entspricht NEU oder IN_PROGRESS - Beachten Sie den Unterschied hier. Die erste würde auch ABC oder aBc oder möglicherweise "abc XYZ" abhängig von Ihrem Analysator entsprechen. Vielleicht möchten Sie Begriffe für beide.
  3. Das dritte ist, was Sie vorher hatten.
+0

Wie werde ich einschließen und Typ entspricht etwas? –

+0

Überprüfen Sie die vollständige Abfrage –

Verwandte Themen