Как настроить порядок вывода результатов запроса по релевантности?

Смысл вопроса в следующем: у меня есть множество товаров, которые содержат к примеру слово "помидор". Я хочу настроить выборку следующим образом: приоритет должен отдаваться сначала точным совпадениям, то есть, если пользователь пишет "помидор", то первыми ему должны выводиться "свежий помидор", "розовый помидор".. Затем должны выбираться нечеткие совпадения: "салат с помидорами", "Консервированные помидоры".. и после них совпадения по синонимам: "томаты в собственном соку". Я так понимаю, что если поиск по полю "title", то мне нужно в маппинге делать этому полю "fields" и добавлять туда анализаторы, а в самом запросе использовать "bool" -> "should" и вписать туда все эти три варианта, каждый со своим "boost" параметром? Мой запрос выглядит так:

{
  "sort": [{"_score": {"order": "desc"}}],
  "min_score": 15,
  "query": {
    "function_score": {
      "query": {
        "bool" : {
          "must" : [],
          "filter": [{
            "term": {"supermarket": "TE"}
          }],
          "should" : [
            {
              "multi_match": {
                "query": "tomato",
                "type": "most_fields",
                "fields": ["title^2", "brand^1.5", "category^1.5"],
                "fuzziness": 4,
                "analyzer": "query_synonyms"
              }
            }
          ]
        }
      },
      "script_score" : {
        "script" : "_score + (doc['numberOfReviews'].value * 0.001) + (doc['numberOfRecipes'].value * 0.025) + (doc['numberOfShoppingLists'].value * 0.025) + (doc['numberOfStarterLists'].value * 0.025)"
      }
    }
  }
}

И еще про score. Не до конца понимаю, как он определяется, в результатах выборки, слова с неточным вхождением могут быть выше, чем с точным (в скрипте я убираю дополнительный подсчет по полям, оставляю только score) почему так получается?

да

Включите explain. Вам (очень) подробно расскажут как этот _score был рассчитан.