Ruby on rails 3 ElasticSearch轮胎双字段条件过滤器
我正在用Tire和rails 3进行一个多索引查询,我想过滤掉那些已经批准=>false的场馆,所以我需要一些组合过滤器 这是一个问题Ruby on rails 3 ElasticSearch轮胎双字段条件过滤器,ruby-on-rails-3,filter,
elasticsearch,tire,Ruby On Rails 3,Filter,
elasticsearch,Tire,我正在用Tire和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
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'} )
除了向所有用户和执行者添加“approved:true”字段之外,还有其他想法吗?我想这是我在概念上想要的:
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}},
] )
所以我对Ruby和Tire知之甚少,但是您想要构建的ElasticSearch查询将基于bool过滤器,其中包含一些“应该”条目(将转换为包含或) 因此,在您的案例中,大致如下:
"filter" : {
"bool" : {
"should" : [
{
"terms" : { "_type" : ["Performers","Users"] }
},
{
"term" : { "approved" : true }
}
]
}
}
请查看此处的文档,可能会有所帮助:
:所以我对Ruby和Tire知之甚少,但是您想要构建的ElasticSearch查询将基于bool过滤器,其中包含一些“应该”条目(将转换为包含或) 因此,在您的案例中,大致如下:
"filter" : {
"bool" : {
"should" : [
{
"terms" : { "_type" : ["Performers","Users"] }
},
{
"term" : { "approved" : true }
}
]
}
}
请查看此处的文档,可能会有所帮助:
:谢谢你的回答。我要向上投票,因为它指出了我需要的结构。然而,Tire似乎对多个嵌套的should boolean子句有一些不可靠的支持(我希望我错了)。希望有人能帮我把轮胎修好。谢谢你的回答。我要向上投票,因为它指出了我需要的结构。然而,Tire似乎对多个嵌套的should boolean子句有一些不可靠的支持(我希望我错了)。希望有人能帮我把轮胎修好。