Boolean

You can define a boolean filter using as: :boolean:

class ArticleSearch < Caoutsearch::Search::Base
  filter :published, as: :boolean
end

The filter will transform input as booleans:

Article.search(published: "true")
{
  "query": { 
    "bool": { 
      "filter": [ 
        { "range": { "published": true }}
      ]
    }
  }
}

The following values will be casted as false:

Article.search(published: false)
Article.search(published: 0)
Article.search(published: "0")
Article.search(published: "f")
Article.search(published: "false")
Article.search(published: "off")
{
  "query": { 
    "bool": { 
      "filter": [ 
        { "range": { "published": false }}
      ]
    }
  }
}

Empty values (nil, "", []) are ignored. Any other values, will be casted as true:

Article.search(published: true)
Article.search(published: 1)
Article.search(published: "1")
Article.search(published: "t")
Article.search(published: "true")
Article.search(published: "on")
Article.search(published: "whatever")
{
  "query": { 
    "bool": { 
      "filter": [ 
        { "range": { "published": true }}
      ]
    }
  }
}