在弹性搜索中使用独立过滤器的多类型搜索

时间:2013-01-03 11:24:16

标签: elasticsearch ruby-on-rails-2 tire

我为每个帐户都有一个单独的索引,其中指定了每个模型的映射(用户和评论 - 只是一个示例,实际的应用程序有很多模型)。

include Tire::Model::Search

Tire.index('account_1') do
  create(
    :mappings => {
      :user => {
        :properties => {
          :name => { :type => :string, :boost => 10 },
          :company_name => { :type => :string, :boost => 5 },
          :blocked => { :type => :boolean, :include_in_all => false }
        }
      },
      :comments => {
        :properties => {
          :description => { :type => :string, :boost => 5 }
        }
      }
    }
  )
end

如何在搜索查询中添加过滤器,以便只有被阻止的用户=>在搜索结果中返回true。 这不应影响评论类型的搜索结果。 这可能吗?在elasticsearch中是否有任何过滤器可以做同样的事情?

1 个答案:

答案 0 :(得分:1)

得到答案......

您可以使用不存在和术语过滤器的组合或组合...

    search_key = 'test'
    Tire.search [account_1] do
      query do
        filtered do
            query { string search_key }
            filter :or, { :not => { :exists => { :field => :blocked } } },
                        { :term => { :blocked => true } }
        end
      end
    end