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?
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
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
@timting: Azolo hat Recht. – karmi