elasticsearch,tire,Ruby On Rails 3,Filter,elasticsearch,Tire" /> elasticsearch,tire,Ruby On Rails 3,Filter,elasticsearch,Tire" />

Ruby on rails 3 ElasticSearch轮胎双字段条件过滤器

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

我正在用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 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子句有一些不可靠的支持(我希望我错了)。希望有人能帮我把轮胎修好。