I have a multi-match query in ES, and wish to add a filter.
{
"multi_match" : {
"query" : "this is a test",
"fields" : [ "subject^2", "message" ]
}
}
What is the syntax for adding this filter?
I tried:
{
"multi_match" => {
"query" => "list",
"fields" => [ "username" ]
},
"filter" => {
"term" => { "username" => "slimkicker"}
}
}
Depending on what you need you have to put the filter in the proper position. You have two options:
Use a top-level filter and apply the filter only to the search results but not to the facets
{
"query" : {
"multi_match" : {
"query" : "this is a test",
"fields" : [ "subject^2", "message" ]
}
},
"filter" : {
"term" : { "username": "slimkicker" }
}
}
Use a filtered query and apply the filter to both the search results and the facets
{
"query" : {
"filtered" : {
"query" : {
"multi_match" : {
"query" : "this is a test",
"fields" : [ "subject^2", "message" ]
}
},
"filter" : {
"term" : { "username": "slimkicker" }
}
}
}
}
With Elasticsearch 5 the syntax has changed to the usage of bool query, e.g.
{
"from" : 0,
"size" : 10,
"sort" : "publishDate",
"query": {
"bool": {
"must" : {
"multi_match" : {
"query": "wedding",
"type": "most_fields",
"fields": [ "title", "text" ]
}
},
"filter": {
"term": {
"locale": "english"
}
}
}
}
}
Documentation can be found here.
As per the new Documentation of Elasticsearch, the format is little bit changed, now you have to use bool
and must
and can apply filter
separately from query like follows,
{
'index' : 'users',
'type' : 'users',
'body' : {
"query" : {
"bool" : {
"must" : {
'multi_match' : {
'fields' : {'source^1', 'first_name^5', 'last_name^4', 'email^3', 'postcode^2', 'telephone', 'address', 'alternate_address'
},
'query' : 'Shahrukh Anwar',
},
},
"filter" : {
"term" : {
'assigned_to' : 125
}
}
}
}
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With