Date
You can define a date filter using as: :date:
class ArticleSearch < Caoutsearch::Search::Base
filter :published_on, as: :date
end
The filter will build a range query to match any data field type:
Article.search(published_on: Date.today)
{
"query": {
"bool": {
"filter": [
{ "range": { "published_on": { "gte": "2022-23-11", "lte": "2022-23-11"}}}
]
}
}
}
The date filter accepts various types of date:
Article.search(published_on: "2022-10-11")
Article.search(published_on: Date.today)
Article.search(published_on: Time.zone.now)
It also supports elasticsearch's date math:
Article.search(published_on: "now-1h")
Article.search(published_on: "now+2w/d")
Finally, it accepts multiple ranges of arguments:
# Search for articles published before a date:
Article.search(published_on: { less_than: "2022-12-25" })
Article.search(published_on: { less_than_or_equal: "2022-12-25" })
Article.search(published_on: ..Date.new(2022, 12, 25))
Article.search(published_on: [[nil, "now-2w/d"]])
# Search for articles published after a date:
Article.search(published_on: { greater_than: "2022-12-25" })
Article.search(published_on: { greater_than_or_equal: "2022-12-25" })
Article.search(published_on: Date.new(2022, 12, 25)..)
Article.search(published_on: [["now-1w/d", nil]])
# Search for articles published between two dates:
Article.search(published_on: { greater_than: "2022-12-25", less_than: "2023-12-25" })
Article.search(published_on: Date.new(2022, 12, 25)..Date.new(2023, 12, 25))
Article.search(published_on: [["now-1w/d", "now/d"]])