[[query-dsl-range-filter]]
=== Range Filter

Filters documents with fields that have terms within a certain range.
Similar to <<query-dsl-range-query,range
query>>, except that it acts as a filter. Can be placed within queries
that accept a filter.

[source,js]
--------------------------------------------------
{
    "constant_score" : {
        "filter" : {
            "range" : {
                "age" : {
                    "gte": 10,
                    "lte": 20
                }
            }
        }
    }
}
--------------------------------------------------

The `range` filter accepts the following parameters:

[horizontal]
`gte`::     Greater-than or equal to
`gt`::      Greater-than
`lte`::     Less-than or equal to
`lt`::      Less-than

[float]
==== Execution

The `execution` option controls how the range filter internally executes. The `execution` option accepts the following values:

[horizontal]
`index`::       Uses field's inverted in order to determine of documents fall with in the range filter's from and to range
`fielddata`::   Uses field data in order to determine of documents fall with in the range filter's from and to range.

In general for small ranges the `index` execution is faster and for longer ranges the `fielddata` execution is faster.

The `fielddata` execution as the same suggests uses field data and therefor requires more memory, so make you have
sufficient memory on your nodes in order to use this execution mode. It usually makes sense to use it on fields  you're
already faceting or sorting by.

[float]
==== Caching

The result of the filter is only automatically cached by default if the `execution` is set to `index`. The
`_cache` can be set to `false` to turn it off.

If the `now` date math expression is used without rounding then a range filter will never be cached even if `_cache` is
set to `true`. Also any filter that wraps this filter will never be cached.
