2013-08-01 63 views
1

我试图排除被删除的对象.. deleted_at是一个日期时间字段,如果该对象被删除它有一个时间戳,否则其零。Elasticsearch和轮胎排除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 

但是这确实对我的输出正好没什么..

任何提示?

回答

2

所以基本上有三种状态字段/属性可以是。

  1. 它不会在文件中存在。
  2. 它确实存在,并将其值设置为null
  3. 它确实存在,并且该值如果我理解正确的话,你要的文档,其中deleted_at处于状态的东西有效(或非空)

1或2。我认为你需要创建的这相当于:

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

内丢失的过滤器会发现这是在状态1(existence: true)或状态2(null_value: true)所有文档。

祝你好运!

+0

感谢您的快速回复!我只想要不被删除的对象,这意味着deleted_at IS NULL .. – Oliver

+0

糟糕,编辑的答案删除'not'过滤器。 – ramseykhalaf

+0

很抱歉,迟到了。它没有任何区别与这个过滤器或不..真的很奇怪。 deleted_at是在数据库中的日期时间字段..我必须指定一些特殊的东西吗? – Oliver