輪胎允許您使用旨在反映JSON API一個DSL建立一個elasticsearch查詢,例如:撰寫多個紅寶石塊輪胎查詢
search = Tire::Search::Search.new
search.query do
boolean do
should { match :title, "Red" }
should { match :synopsis, "Red" }
should { match :brand_title, "Red" }
end
boolean do
must { term :excluded, false }
end
end
我想分開處理伸到我自己的DSL來定義,可以建立起來的查詢組,有點像Rails的範圍:
class Proxy
def initialize
@queries = []
end
def results
search = Tire::Search::Search.new
queries = @queries
search.query do
# …? What should go here to search the combined set of conditions?
end
end
def term t
query do
boolean do
should { match :title, t }
should { match :synopsis, t }
should { match :brand_title, t }
end
end
end
def included bool
query do
boolean do
must { term :excluded, !bool }
end
end
end
private
def query &block
@queries << block
end
end
p = Proxy.new
p.term "Red"
p.included true
p.results
的問題是,輪胎不允許超過一個search.query
塊 - 後續query
小號取代以前的一個。我可以使用類似instance_eval的東西在查詢塊的正確上下文中運行多個塊嗎?
任何想法,如果這將適用於像:term這樣的過濾器?我試了一下,似乎只有最後一個proc才能成爲instance_eval'd get的ES。謝謝。 – brupm