Я делаю запрос mutli-index С Tire и rails 3, и я хочу отфильтровать объекты, которые утвердили => false, поэтому мне нужен какой-то комбо-фильтр.ElasticSearch Tire два поля условный фильтр
Вот запрос
query = params[:q]
from = params.delete(:from)
size = params[:size] || 25
Tire.search(
[Venue.index_name,
Performer.index_name, User.index_name], load: true) do |s|
s.query do
string(query, fields: [:_all, :name, :title], use_dis_max: true)
end
s.from from if from
s.size size if size
end.results.to_a
Эта строка удаляет все исполнителям и пользователь, потому что они не имеют: утвержденное поле.
s.filter(:term, :approved => true)
И эта линия, очевидно, удаляет все не-объекты, которые не подходят.
s.filter(:term, { :approved => true, :index_name => 'venues'})
Любые идеи, кроме добавления одобренного: истинного поля для всех пользователей и исполнителей? Я думаю, что-то вроде этого является то, что я хочу концептуально:
s.filter(:term, :approved => true, :if => {:index_name => 'venues'})
EDIT Благодаря Mallox я смог найти Если построить, но я до сих пор пытаюсь реализовать шины. Кажется, что приведенный ниже код должен работать, но он не возвращает никаких результатов по любому запросу. Я также удаляю «{: terms => {: index_name => [" исполнители "," users "]}}," чтобы убедиться, что это не мое использование имени индекса или нескольких строк запроса, которое было проблемой, и до сих пор не повезло. Может ли кто-нибудь пролить свет на то, как это сделать в Тире?
s.filter(:bool, :should => [
{:terms => { :index_name => ["performers", "users"]}},
{:term => { :approved => true}},
])
Спасибо за ваш ответ. Я собираюсь продвинуть его, потому что он указал мне на конструкцию, которая определенно то, что мне нужно. Однако появляется (я надеюсь, что я ошибаюсь), что у Tire есть какая-то изворотливая поддержка множественных вложенных логических предложений. Надеюсь, кто-то может помочь мне заставить его работать с Тиром. – LennonR