Minimum should match context
Elastic Cloud Serverless projects are autoscaled environments, fully managed by Elastic and available on Elastic Cloud. Availability This functionality is generally available and ready for production usage. Serverless interfaces and procedures might differ from classic Elastic Stack deployments. The Elastic Stack includes Elastic's core products such as Elasticsearch, Kibana, Logstash, and Beats. Availability This functionality is generally available and ready for production usage. Unless stated otherwise on the page, this functionality is available when your Elastic Stack is deployed on Elastic Cloud Hosted, Elastic Cloud Enterprise, Elastic Cloud on Kubernetes, and self-managed environments. This documentation corresponds to the latest patch available for each minor version. If you're not using the latest patch, check the release notes for changes.
Serverless
Generally available
Stack
Generally available
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.
params(Map, read-only)- User-defined parameters passed in as part of the query.
params['num_terms'](int, read-only)- The number of terms specified to match with.
doc(Map, read-only)- Contains the fields of the current document where each field is a
Listof values.
int- The minimum number of terms required to match the current document.
The standard Painless API is available.
To run the example, first install the eCommerce sample data.
This example shows conditional matching requirements. The script checks if a document contains both “Men’s Clothing” and “Men’s Shoes” categories. If this combination exists, only two terms need to match. Otherwise, three terms must match. This creates different qualification thresholds based on document content.
GET kibana_sample_data_ecommerce/_search
{
"query": {
"terms_set": {
"category.keyword": {
"terms": [
"Men's Clothing",
"Men's Shoes",
"Men's Accessories",
"Women's Clothing"
],
"minimum_should_match_script": {
"source": """
boolean hasMensClothing = false;
boolean hasMensShoes = false;
for (def category : doc['category.keyword']) {
if (category.equals("Men's Clothing")) {
hasMensClothing = true;
}
if (category.equals("Men's Shoes")) {
hasMensShoes = true;
}
}
if (hasMensClothing && hasMensShoes) {
return 2;
}
return 3;
"""
}
}
}
}
}