如何从ElasticSearch结果集中排除带有ID的数组?

时间:2014-08-16 15:21:29

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

我正在使用Rails和ElasticSearch。作为mapper我正在使用https://github.com/karmi/retire

我有模型Exercise

class Exercise < ActiveRecord::Base
  mapping do
    # ....
  end

  def self.search(params)
    archived_exercise_ids = [1,2,3,4]
    tire.search(load: true, page: params[:page], per_page: 15) do
      # ES documents have attribute _id

    end
  end
end

我已经为已经存档的练习设置了一组ID,让我们说:

archived_exercise_ids = [1,2,3,4]

如何在id中包含archived_exercise_ids的结果练习中编写不会考虑的搜索方法?

1 个答案:

答案 0 :(得分:1)

你可以按照

的方式做点什么
tire.search(...) do
  query do
    filtered do
      query {all}
      filter :not, {:ids => {:type => :exercise, :values => archived_exercise_ids}}
    end
  end
end

您还可以使用terms过滤器而不是ids过滤器 - 后者的特殊之处在于它使用内部elasticsearch _id,因此_id是否被编入索引无关紧要

就我个人而言,我倾向于不做这些。而是索引归档属性并过滤该属性。