Elasticsearch: получаем точные совпадения, затем нечеткие совпадения

#elasticsearch

#elasticsearch

Вопрос:

Я знаю, что этот вопрос задавался и на него были даны ответы в нескольких сообщениях, но, попробовав большинство из них, я должен задать его здесь.

Я хочу сначала получить точные совпадения, а затем нечеткие совпадения.

 "query" : {
  "bool" : {
    "must": [
      {
        "match": {
          "name": {
            "query":req.params.name,
            "fuzziness" : 1
          }
        }
      }
      ,
      {
        "match_phrase": {
            "name": {
              "query": req.params.name
            }
        }
      }
    ],
    "should": [
    {
      "match": {
        "name": {
          "query":req.params.name,
          "boost": 5
        }
      }
    }
  ]
  }
}
  

То, что я получаю прямо сейчас, — это нечеткие совпадения, показываемые раньше, чем точные.

Спасибо за чтение.

Комментарии:

1. Чтобы понять, почему нечеткие совпадения оцениваются выше, вы должны передать ?explain=true параметр в своем поиске. Это даст вам подробную разбивку баллов за ваши хиты. Дополните это этим документом: elastic.co/guide/en/elasticsearch/guide/current/… Должно быть очевидно, что нечеткие совпадения оцениваются выше из-за более высокого компонента из IDF (обратная частота документов). Поняв причину, стоящую за оценками, возможно, вы можете разделить свой запрос на два запроса constant_score, один для fuzzy, другой для match или полностью отключить IDF?

2. Спасибо, что поделились своими мыслями здесь. Я попробую это.