Elasticsearch: как повысить рейтинг точного соответствия?

Я хочу найти элемент «видение» для одного поля, но я только что получил такие результаты, как «видение A», «видение B», «xx версия», «видение» и т. д., Используя match / match_phrace / term в DSL.

Я хочу, чтобы точное совпадение «видение» должно было иметь наивысший балл, а элементы, содержащие «видение», должны занимать место после точного совпадения. Рейтинг должен быть:

vision > vision A > vision B > xx version

Я проверил Elasticsearch соответствует точному запросу, в котором изменение «индекса» на «not_analyzed» распознается для реализации точного совпадения. Но в моем случае нужно не только точное совпадение, но и вмещающее совпадение.

Что я могу сделать в этом случае? Спасибо!

4
0
2 393
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Что вы можете сделать для этого, так это включить несколько ограничений в q запрос bool/should, чтобы контролировать ранжирование.

{
  "query": {
    "bool": {
      "must": {
        "match": {
          "name": "vision"                  <--- match on vision
        }
      },
      "should": [
        {
          "term": {
            "name.keyword": {               <--- boost exact matches on keyword field (i.e. "vision")
              "value": "vision",
              "boost": 3
            }
          }
        },
        {
          "prefix": {
            "name.keyword": {               <--- boost prefix matches on keyword field (i.e. "vision A" and "vision B"
              "value": "vision",
              "boost": 2
            }
          }
        }
      ]
    }
  }
}
  • Первое предложение будет соответствовать всем документам, которые содержат vision в своем поле name.
  • Второе предложение даст больший импульс документам, поле name.keyword которых содержит именно vision. name.keyword обычно является полем keyword (ранее - полем not_analyzedstring).
  • Третье предложение придаст немного больший импульс документам, поле name.keyword которых начинается с vision.

Ты супербыстрый

user156327 26.10.2018 06:34

Большое спасибо за Вэл! Решает проблему отлично!

Elva 29.10.2018 04:08

Отлично, рад, что помог!

Val 29.10.2018 06:02

@Val Как мы можем повысить точное совпадение в query_string, где поле может быть произвольным, есть ли способ повысить в этом случае.

Neeraj Jain 05.07.2019 07:33

@NeerajJain не стесняйтесь задавать новый вопрос с точными указаниями.

Val 08.07.2019 09:01

@Val Вот мой вопрос: stackoverflow.com/questions/56898079/…

Neeraj Jain 08.07.2019 09:09

Другие вопросы по теме