2015-09-28 8 views
5
auf gefilterten Abfrage übereinstimmen

Ist es möglich, eine Abfrage wie dieseMinimum sollte

"query": { 
    "filtered": { 
    "filter": { 
     "terms": { 
      "names": [ 
      "Anna", 
      "Mark", 
      "Joe" 
      ], 
      "execution" : "and" 
     } 
     } 
    } 
    } 

Mit der "minimum_should_match": "2" Aussage haben?

Ich weiß, dass ich eine einfache Abfrage verwenden kann (ich habe es versucht, es funktioniert), aber ich brauche den Score nicht berechnet werden. Mein Ziel ist nur Dokumente zu filtern, die 2 der Werte enthalten.

Beeinträchtigt das Ergebnis die Zeit, die zum Abrufen des Dokuments benötigt wird, in der Regel sehr stark?

Mit dieser Abfrage:

"query": { 
    "filtered": { 
    "filter": { 
     "terms": { 
      "names": [ 
      "Anna", 
      "Mark", 
      "Joe" 
      ], 
      "execution" : "and", 
      "minimum_should_match": "2" 
     } 
     } 
    } 
    } 

habe ich diesen Fehler:

QueryParsingException[[my_db] [terms] filter does not support [minimum_should_match]] 
+1

Wenn ich Ihre Frage verstehe, suchen Sie alle Dokumente mit 'Anna',' Mark' und 'Joe' im Namensfeld, geben oder nehmen 10% Ähnlichkeit? Was passiert, wenn wir längere Namen wie "Catherine" und "Wilhelmina" haben, die genau übereinstimmen, und der Nachname "Joe" wegen der 10% komplett verworfen wird? – IanGabes

+0

Sorry vielleicht meine Frage war nicht so klar :) Ich habe 90% verwendet, um eine Teilmenge der Liste anzugeben. Ich bearbeite mit 2. Das heißt, ein Dokument mit Anna, Mark und Catherine muss übereinstimmen. Ein Dokument mit Anna, Catherine und Wilhelimina darf nicht übereinstimmen. Das Hauptproblem ist, dass, wenn ich das Minimum verwenden sollte innerhalb einer gefilterten Abfrage übereinstimmen habe ich 'QueryParsingException [[my_db] [Begriffe] Filter unterstützt nicht [minimum_should_match]];' – betto86

Antwort

3

Minimum entsprechen sollte, ist kein Parameter für die terms filter. Wenn das die Funktionalität, die Sie suchen, könnte ich Ihre Abfrage wie folgt umschreiben, zu verwenden, um die eingewickelt bool query in ein query filter:

{ 
    "filter": { 
     "query": { 
     "bool": { 
      "must": [ 
       { 
        "term": { 
        "names": "Anna" 
        } 
       }, 
       { 
        "term": { 
        "names": "Mark" 
        } 
       }, 
       { 
        "term": { 
        "name": "Joe" 
        } 
       } 
      ], 
      "minimum_number_should_match": 2 
     } 
     } 
    } 
} 

Sie Dokumente erhalten passende vorzugsweise genau alle drei, aber die Abfrage wird auch passen Dokument mit genau zwei der drei Begriffe. Die must ist eine implizite und. Wir berechnen auch keine Punkte, da wir die Abfrage als Filter ausgeführt haben.

+0

Alle Vorschläge zur Implementierung in Schienen mit Searchkick Wrapper. – kishore

+1

Verwenden Sie in der Bool-Abfrage nicht "muss". Verwenden Sie stattdessen "sollte", da 'minimum_number_should_match' nur für sollte gilt. – AmazingTurtle