我在搜索中使用Elastic Search和Tire。
我创建了 Search 类来搜索我的所有模型。
class Link < ActiveRecord::Base
  ...
  tire.mapping do
    indexes :id, :type => 'string', :index => :not_analyzed
    indexes :app_id, :type => 'string', :index => :not_analyzed
    indexes :title, analyzer: 'snowball', boost: 100
  end
  def to_indexed_json
    to_json(
      only: [:id, :app_id, :title]
    )
  end    
end
class Search
  def results
    search = Tire.search [:questions, :answers, :links, :events] do
      query { string "#{term}" }
    end
    search.results
  end
end
案例是只返回来自 Apps12和13.
所以我尝试使用search.filter :and, must: {term: {app_id: [12, 13]}}but only过滤所有结果questions,links并且answers有app_id属性。我也想全部归还events。
好的模式将如何做到这一点?
编辑: 现在像下面这样对我有用:
multi_search = Tire.multi_search do
  search :without_app, indices: [:events, :past_events, :reviews] do
    query { match :_all, "#{term}" }
  end
  search :with_app, indices: [:questions, :answers, :links, :service_providers] do
    query do
      filtered do
        query { match :_all, "#{term}" }
        filter :terms, app_id: app_ids
      end
    end
  end
end
multi_search.results[:with_app].to_a + multi_search.results[:without_app].to_a