2012-03-23 5 views
2

Ich benutze Reifen mit elasticsearch, und ich bin ratlos, wie eine boolesche Abfrage mit der Option minimum_number_should_match erstellen und werfen Sie auch eine Reihe von Abfragen in gespeichert Ein Block.So erstellen Sie eine Bool-Abfrage mit minimum_number_should_match, wenn Abfragen als Blöcke gespeichert

Also, ich habe

options = {:minimum_number_should_match => 1} 
s = Tire.search 'variations' do |search| 
     search.query do |query| 
     query.boolean options, &keyword_query(params[:keyword]) unless params[:keyword].blank? 
     end 
    end 

def keyword_query(keyword) 
    lambda do |boolean| 
     boolean.should { string "name:*#{keyword}*"} 
     boolean.should { string "number:*#{keyword}*"} 
     boolean.should { string "nrf:*#{keyword}*"} 
     boolean.should { string "base_color:*#{keyword}*"} 
     boolean.should { string "skus:*#{keyword}*"} 
     boolean.should { string "color_name:*#{keyword}*"} 
    end 
    end` 

Aber die Option ist mit dem Ende Abfrageanforderung nicht wird zu Elasticsearch hinzugefügt. keyword_query gibt ein Lambda zurück. Gibt es eine andere Möglichkeit, die Optionen zu dieser booleschen Abfrage hinzuzufügen?

+0

Es wurde herausgefunden - im Moment fügt Reifen erst Optionen hinzu, wenn Sie das erste Mal boolean aufrufen. Ich hatte eine Menge anderer boolescher Abfragen vor der oben aufgelisteten, und so wurden meine Optionen in den Äther geworfen. – timting

+0

Sie sollten Ihre Lösung als Ihre Antwort posten und dann akzeptieren. [Check dies für weitere Informationen] (http://blog.stackoverflow.com/2011/07/its-ok-to-ask-and-answer-your-own-questions/) – Azolo

+0

@timting: Azolo hat Recht. – karmi

Antwort

0

Es wurde herausgefunden - ab sofort fügt Reifen erst beim ersten Booleschen Aufruf Optionen zur Booleschen Abfrage hinzu. Ich hatte eine Menge anderer boolescher Abfragen vor der oben aufgelisteten, und so wurden meine Optionen in den Äther geworfen.