Elasticsearch和Tire排除deleted_at对象

时间:2013-08-01 14:38:52

标签: ruby-on-rails elasticsearch tire

我正在尝试排除被删除的对象.. deleted_at是一个日期时间字段,如果该对象被删除,则它有一个时间戳,否则为零。

这是我的代码:

tire.search(load: true, page: params[:page], per_page: 2) do
  query { string params[:query], default_operator: "AND" } if params[:query].present?
  filter :missing, field: :deleted_at
end

但这对我的输出完全没有任何意义..

任何提示?

1 个答案:

答案 0 :(得分:2)

因此,基本上有3个状态可以包含字段/属性。

  1. 文档中不存在。
  2. 确实存在且值设置为null
  3. 它确实存在且值是有效的(或非空的)
  4. 如果我理解正确,您需要deleted_at处于状态1或2的文档。我认为您需要创建相应的文档:

    "filter" : {
        "missing" : { 
            "field" : "deleted_at",
            "existence" : true,
            "null_value" : true
        }
    }
    

    内部缺失过滤器将查找处于状态1(existence: true)或状态2(null_value: true)的所有文档。

    祝你好运!