Elastic Search/Tire: How do I filter a boolean attribute?
elasticsearch, ruby, ruby-on-rails, ruby-on-rails-3, tire
Solution
filter :term, :private => false
Should do the trick. Depending on whether you want to do stuff with facets it may be more efficient to do your filtering a filtered query rather than at the top level, ie
tire.search(...) do
query do
filtered do
query { string, params[:query] }
filter :term, :private => false
end
end
end
It shouldn't change the results though.
You can also do this with a `bool` filter, but not quite how you tried - within a bool filter you need to build up a structure that says what's optional and what's not
For example
tire.search(load: true, page: params[:page], per_page: 20) do
query { string params[:query] } if params[:query].present
filter :bool, :must => {:term => {:private => true}}
end
A `bool` filter is slower than using an `and` filter (which is what tire does behind the scenes if you specify multiple filters) but obviously gives you more flexibility.
Problem
I want to filter the private boolean of my class so it only shows resources that aren't private but it's not working for me. (I dumbed down the code tremendously) ``` mapping do indexes :private, type: "boolean" indexes :name, type: "string" end end def self.search(params) tire.search(load: true, page: params[:page], per_page: 20) do query { string params[:query] } if params[:query].present? # So far I've tried... # filter :bool, :private => ["false"] # filter :bool, private: false end end ``` How do I do this correctly?