To get exact matches ranked higher than synonym matches you need write a query that searches with and without synonyms at the same time. For example a bool query like this:
GET my_index/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"my_field": "baz"
}
}
],
"should": [
{
"match": {
"my_field": {
"query": "baz",
"analyzer": "standard"
}
}
}
]
}
}
}
The idea of the query above is that the optional should clause will only match exact hits, because it overrides the search analyzer. Documents that match this should clause will get a higher score.
If you want to search for phrases, then that is something you would not necessarily achieve with an analyzer. Take a look at using the match_phrase query instead. If you do want to go with an analyzer then check out this blog post for a useful pattern.
By the way, I see you are using the synonym filter. With multi-word synonyms, the synonym_graph filter will work better. You may want to switch to that filter.