2017-09-29 4 views
0

Ich stoße auf einige ernste Probleme mit einer benutzerdefinierten Suche. Alles was ich will ist eine Wildcard Suche in drei Feldern und das Ergebnis sollte nach einem anderen Feld gefiltert werden. In Elastica führt es in dieser Abfrage:Elasticsearch Gefilterte Bool-Abfrage

{ 
    "bool":{ 
     "should":[ 
     { 
      "wildcard":{ 
       "ean":"*180g*" 
      } 
     }, 
     { 
      "wildcard":{ 
       "titel":"*180g*" 
      } 
     }, 
     { 
      "wildcard":{ 
       "interpret":"*180g*" 
      } 
     } 
     ], 
     "filter":[ 
     { 
      "term":{ 
       "genre":{ 
        "value":"Rock", 
        "boost":1 
       } 
      } 
     } 
     ] 
    } 
} 

Eigentlich kann ich nicht einen Fehler finden, aber Elasticsearch gibt mir nicht gefilterten Ergebnisse. Was geschieht? Elasticsearch gibt ALLE Elemente mit dem gefilterten Ausdruck zurück, wenn die Booleschen Werte entweder wahr oder falsch sind. Wenn ich den Filter als "Muss" hinzufüge, bekomme ich die gleichen Ergebnisse? Was ist hier falsch !?

+1

Sie sollten '' minimum_should_match ": 1' in Ihrer' bool' Abfrage hinzufügen. – Val

+0

Das ist es! Danke vielmals! – gmuehl

Antwort

1

Sie müssen "minimum_should_match": 1 in Ihrer bool Abfrage hinzufügen.

{ 
    "bool":{ 
     "minimum_should_match": 1, 
     "should":[ 
     { 
      "wildcard":{ 
       "ean":"*180g*" 
      } 
     }, 
     { 
      "wildcard":{ 
       "titel":"*180g*" 
      } 
     }, 
     { 
      "wildcard":{ 
       "interpret":"*180g*" 
      } 
     } 
     ], 
     "filter":[ 
     { 
      "term":{ 
       "genre":{ 
        "value":"Rock", 
        "boost":1 
       } 
      } 
     } 
     ] 
    } 
}