﻿---
title: Minimum should match context
description: Use a Painless script to specify the minimum number of terms that a specified field needs to match with for a document to be part of the query results...
url: https://www.elastic.co/elastic/docs-builder/docs/2423/reference/scripting-languages/painless/painless-min-should-match-context
products:
  - Painless
---

# Minimum should match context
Use a Painless script to specify the [minimum](https://www.elastic.co/elastic/docs-builder/docs/2423/reference/query-languages/query-dsl/query-dsl-terms-set-query) number of terms that a specified field needs to match with for a document to be part of the query results.
**Variables**
<definitions>
  <definition term="params (Map, read-only)">
    User-defined parameters passed in as part of the query.
  </definition>
  <definition term="params['num_terms'] (int, read-only)">
    The number of terms specified to match with.
  </definition>
  <definition term="doc (Map, read-only)">
    Contains the fields of the current document where each field is a `List` of values.
  </definition>
</definitions>

**Return**
<definitions>
  <definition term="int">
    The minimum number of terms required to match the current document.
  </definition>
</definitions>

**API**
The standard [Painless API](https://www.elastic.co/guide/en/elasticsearch/painless/current/painless-api-reference-shared.html) is available.
**Example**
To run this example, first follow the steps in [context examples](https://www.elastic.co/elastic/docs-builder/docs/2423/reference/scripting-languages/painless/painless-context-examples).
Imagine that you want to find seats to performances by your favorite actors. You have a list of favorite actors in mind, and you want to find performances where the cast includes at least a certain number of them.
To achieve this result, use a `terms_set` query with `minimum_should_match_script`. To make the query request more configurable, you can define `min_actors_to_see` as a script parameter.
To ensure that the parameter `min_actors_to_see` doesn’t exceed the number of favorite actors, you can use `num_terms` to get the number of actors in the list and `Math.min` to get the lesser of the two.
```java
Math.min(params['num_terms'], params['min_actors_to_see'])
```

The following request finds seats to performances with at least two of the three specified actors.
```json

{
  "query": {
    "terms_set": {
      "actors": {
        "terms": [
          "smith",
          "earns",
          "black"
        ],
        "minimum_should_match_script": {
          "source": "Math.min(params['num_terms'], params['min_actors_to_see'])",
          "params": {
            "min_actors_to_see": 2
          }
        }
      }
    }
  }
}
```