首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ElasticSearch轮胎双场条件滤波器

ElasticSearch轮胎双场条件滤波器
EN

Stack Overflow用户
提问于 2013-08-17 18:05:05
回答 1查看 1.1K关注 0票数 0

我正在用轮胎和rails 3做一个mutli索引查询,我想过滤那些已经批准=> false的场馆,所以我需要某种组合过滤器。

以下是查询

代码语言:javascript
复制
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

这一行删除了所有表演者和用户,因为他们没有一个批准的字段。

代码语言:javascript
复制
s.filter(:term, :approved => true )

这条线显然消除了所有的非场馆,这是不好的。

代码语言:javascript
复制
s.filter(:term, { :approved => true, :index_name => 'venues'} )

除了添加一个认可的:所有用户和表演者的真实字段之外,还有其他的想法吗?我想这是我想要的概念:

代码语言:javascript
复制
s.filter(:term, :approved => true, :if => {:index_name => 'venues'} )

编辑,感谢Mallox,我找到了应该的构造,但我仍然在努力实现它轮胎。看起来下面的代码应该可以工作,但是它不会返回任何查询的结果。我还删除了"{:terms => { :index_name => "performers",“users”},“以确保不是我使用索引名或多行查询才是问题所在,但仍然没有成功。有人能在轮胎上说明一下如何做到这一点吗?

代码语言:javascript
复制
      s.filter(:bool, :should => [ 
        {:terms => { :index_name => ["performers", "users"]}},
        {:term => { :approved => true}},
      ] )
EN

回答 1

Stack Overflow用户

发布于 2013-08-17 18:18:57

所以我对Ruby知之甚少,但是您想要构建的ElasticSearch查询将基于一个bool过滤器,其中包含一些“应该”条目(这将转换为包含OR)。

因此,在你的例子中,一些类似于:

代码语言:javascript
复制
"filter" : {
    "bool" : {
        "should" : [
            {
                "terms" : { "_type" : ["Performers","Users"] }
            },
            {
                "term" : { "approved" : true }
            }
        ]
    }
}

看看这里的文档,也许这会有帮助::http://www.elasticsearch.org/guide/reference/query-dsl/bool-filter/

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18291840

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档