[[painless-filter-context]]
=== Filter context

Use a Painless script as a {ref}/query-dsl-script-query.html[filter] in a
query to include and exclude documents.


*Variables*

`params` (`Map`, read-only)::
        User-defined parameters passed in as part of the query.

`doc` (`Map`, read-only)::
        Contains the fields of the current document where each field is a
        `List` of values.

*Return*

`boolean`::
        Return `true` if the current document should be returned as a result of
        the query, and `false` otherwise.


*API*

The standard <<painless-api-reference, Painless API>> is available.

*Example*

To run this example, first follow the steps in
<<painless-context-examples, context examples>>.

This script finds all unsold documents that cost less than $18.

[source,Painless]
----
doc['sold'].value == false && doc['cost'].value < 18
----

Defining cost as a script parameter enables the cost to be configured
in the script query request. For example, the following request finds
all available theatre seats for evening performances that are under $18.

[source,js]
----
GET evening/_search
{
    "query": {
        "bool" : {
            "filter" : {
                "script" : {
                    "script" : {
                        "source" : "doc['sold'].value == false && doc['cost'].value < params.cost",
                        "params" : {
                            "cost" : 18
                        }
                    }
                }
            }
        }
    }
}
----
// CONSOLE
// TEST[skip: requires setup from other pages]