2013-08-01 3 views
1

Я пытаюсь исключить объекты, которые удалены .. deleted_at - это поле datetime, и если объект удален, то он имеет отметку времени, иначе его nil.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 

, но это не делает ровно ничего на моем выходе ..

любые намеки?

ответ

2

Таким образом, есть в основном 3 гласит, что поле/свойство может быть в.

  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

благодарит за ваш быстрый ответ! Я хочу только объекты, которые НЕ удалены, что означает delete_at IS NULL .. – Oliver

+0

К сожалению, отредактированный ответ, чтобы удалить фильтр 'not'. – ramseykhalaf

+0

извините за ответ, что поздно. это не имеет никакого значения с этим фильтром или нет .. действительно странно. deleted_at - это поле datetime в db .. мне нужно указать что-то особенное? – Oliver

Смежные вопросы