Simple_query_string and multi terms synonyms

I have tried to use a multi_match query but it does not work in my case because minimum_should_match is applied to each field individually (see here). cross_field would not work either because, as the docs say "can only work in term-centric mode on fields that have the same analyzer". Having different analyzers (with different synonym_graph configurations), would make the query work like a most_fields query.

A workaround for this would be to setup synonyms at index time but I would prefer to not go down that road.

I thought using query_string or simple_query_string I could find a suitable solution for that. I dig a bit more into the code and I debug the the SimpleQueryParser.

This is what I found: with WHITESPACE flag the parser creates a boolean query with a clause for each token. As an example, the simple_qeury_string in the unit test I have created generates this bool query:

((otherbody:foo | body:bar)~1.0 (otherbody:bar | body:bar)~1.0)~2)

Since boolean queries support minimum_should_match the parameter is correctly applied.

The same query WITHOUT WHITESPACE generates the following DisjunctionMaxQuery

((otherbody:foo otherbody:bar) | (body:foo body:bar))~1.0

As you can see, the original text (foo bar) gets split but the minimum_should_match is not applied because dismax does not support it.

If dismax could be extended to support minimum_should_match it would solve this issue.