You can achieve this in 3 steps : Change your mapping of field name to not_analyzed Use a match_phrase_prefix query (documentation here) Filter this query results by wrapping it in a filtered query and use a term filter on the field2 with value "y" You can see it working with the following dataset : PUT test/prefix/_mapping { "properties": { "name":{ "type": "string", "index": "not_analyzed" } } }
![ElasticSearch - prefix with space and filtering](https://cdn-ak-scissors.b.st-hatena.com/image/square/98d6f053a97a87156775f60757c60865d0f2c47d/height=288;version=1;width=512/https%3A%2F%2Fcdn.sstatic.net%2FSites%2Fstackoverflow%2FImg%2Fapple-touch-icon%402.png%3Fv%3D73d79a89bded)