Handling multi word expressions in elastic

Hi,

I want to be able to handle multi word expressions with fuzzy in elasticsearch. So for example i have two tokens in my field's value that have a unified meaning when they occur next to each other. Every query, must match both of these tokens (either exact match or fuzzy), otherwise none of the tokens should be considered.

This can be achieved by merging the two tokens, but this way fuzzy matches in the separated form will not match.

For example if i have this text:
token1 token2 token3

and i merge token1 and token2 (that have a unified meaning):
token1__token2 token3

then the query
toket1 token2
will not match. And note that i am not able to perform the same merging process on the query when one of the tokens is misspelled.

The only solution was to convert my document to a percolator field with some parts being in a match query with operator set to AND and fuzziness set to AUTO, then send the query in a percolate query as a document. But in my scale where i have around 4 million documents and expect 100 qps on average, percolator query takes a long time (i mean at least more than 100 seconds). Isn't there a faster way to achieve this?