Elasticsearch: получить точное совпадение, затем нечеткое - PullRequest
0 голосов
/ 12 сентября 2018

Я выполняю этот запрос:

GET /thing/_search/?
{
  "query": {
    "multi_match" : {
      "query":      "castle pontivy",
      "type":       "most_fields",
      "fields":     [ "title", "loc" ]
    }
  }
}

Он работает и возвращает результаты из thing, где title и loc содержит castle и / или pontivy в соответствующем порядке.Хорошо.

Теперь я хочу продолжить такие запросы, но я также хочу, чтобы результат предпочел точное совпадение на title.Это означает, что если один элемент точно соответствует castle pontivy в его заголовке, он должен быть возвращен как первый элемент (тогда другие результаты обрабатываются как обычно).

Есть ли способ сделать это?

1 Ответ

0 голосов
/ 12 сентября 2018

Вы могли бы сделать phrase совпадение и дать ему boost из 5, так что, независимо от того, будет ли счет по умолчанию, он прибавит +5 к этому. Если вы хотите больше узнать о баллах, посмотрите на запрос оценки функции (я рекомендую вам это сделать)

Второй multi_match будет соответствовать остальным документам, используя most_fields.

{  
  "query":{  
    "bool":{  
      "should":[  
        {  
          "multi_match":{  
            "query":"castle pontivy",
            "type":"phrase",
            "fields":[  
              "title",
              "loc"
            ],
            "boost":5
          }
        },
        {  
          "multi_match":{  
            "query":"castle pontivy",
            "type":"most_fields",
            "fields":[  
              "title",
              "loc"
            ]
          }
        }
      ]
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...