шин позволяет создать запрос elasticsearch с использованием DSL, предназначенный для отражения API JSON, например:Составляя запрос шины из нескольких блоков рубина
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
s заменить предыдущую. Можно ли использовать нечто вроде instance_eval для запуска нескольких блоков в правильном контексте блока запроса?
Любая идея, если бы это работало с фильтрами вроде: term? Я попробовал, бит кажется, что только последний proc будет отправлен экземпляром instance_eval'd. Спасибо. – brupm