我将 Rails 与 ElasticSearch 结合使用。作为映射器,我正在使用 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]
如何编写在 archived_exercise_ids
中包含 id
的结果练习中不考虑的搜索方法?
你可以按照以下方式做一些事情
tire.search(...) do
query do
filtered do
query {all}
filter :not, {:ids => {:type => :exercise, :values => archived_exercise_ids}}
end
end
end
你也可以使用 terms过滤器而不是 ids filter - 后者的特殊之处在于它使用内部 elasticsearch _id,所以 _id 是否被索引并不重要
就我个人而言,我不倾向于做这些。而是索引存档属性并过滤该属性。
我是一名优秀的程序员,十分优秀!