我正在使用 Tyre 和 rails 3 进行多索引查询,我想过滤掉已批准 => false 的场地,所以我需要某种组合过滤器。
这是查询
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
此行删除所有执行者和用户,因为他们没有 :approved 字段。
s.filter(:term, :approved => true )
这条线显然删除了所有不好的非场地。
s.filter(:term, { :approved => true, :index_name => 'venues'} )
除了向所有用户和执行者添加一个已批准的:真实字段之外,还有什么想法吗?我认为这样的东西是我在概念上想要的:
s.filter(:term, :approved => true, :if => {:index_name => 'venues'} )
编辑感谢 Mallox 我能够找到应该构造,但我仍在努力实现它轮胎。看起来下面的代码应该可以工作,但它不会在任何查询中返回任何结果。我还删除了 "{:terms => { :index_name => ["performers", "users"]}}",以确保问题不是我使用索引名称或多行查询,并且仍然没有运气。任何人都可以阐明如何在轮胎中做到这一点吗?
s.filter(:bool, :should => [
{:terms => { :index_name => ["performers", "users"]}},
{:term => { :approved => true}},
] )