Elasticsearch how to use multi_match with wildcard
Alternatively you could use a query_string
query with wildcards.
"query": { "query_string": { "query": "*mar*", "fields": ["user.name", "user.surname"] }}
This will be slower than using an nGram filter at index-time (see my other answer), but if you are looking for a quick and dirty solution...
Also I am not sure about your mapping, but if you are using user.name
instead of name
your mapping needs to look like this:
"your_type_name_here": { "properties": { "user": { "type": "object", "properties": { "name": { "type": "string" }, "surname": { "type": "string" } } } }}
Such a query worked for me:
{ "query": { "filtered": { "query": { "match_all": {} }, "filter": { "bool": { "should": [ {"query": {"wildcard": {"user.name": {"value": "*mar*"}}}}, {"query": {"wildcard": {"user.surname": {"value": "*mar*"}}}} ] } } } }}
Similar to what you are doing, except that in my case there could be different masks for different fields.
I just did this now:
GET _search { "query": { "bool": { "must": [ { "range": { "theDate": { "gte": "2014-01-01", "lte": "2014-12-31" } } }, { "match" : { "Country": "USA" } } ], "should": [ { "wildcard" : { "Id_A" : "0*" } }, { "wildcard" : { "Id_B" : "0*" } } ],"minimum_number_should_match": 1 } }}