Порядок сортировки результатов Elasticsearch

#elasticsearch

#elasticsearch

Вопрос:

Я хочу получать результаты в определенном порядке, сначала получить точное совпадение фразы (match_phrase), а затем сопоставить любое слово во фразе (match), например, если я ищу «где я могу найти свою учетную запись», я сначала получу документы, содержащие полную фразу «где я могу найти свою учетную запись», а затем документы, содержащие одно или несколько слов «где», «могу», «найти», «моя», «учетная запись»

мой запрос :

 GET my_index/_search

{

"query": {

"bool": {
  "should": [
    {
      "match": {"body": "right usage of Localization"      }
    } ,
    {
      "match": {"title": "right usage of Localization"      }
    } 
    ],
    "should": [
    {
      "match_phrase": {"body": "translated"      }
    },
    {
      "match_phrase": {"title": "translated"      }
    } 
    ]
  }
  

}
}

Ответ №1:

Вы можете использовать запрос boost, чтобы увеличить количество документов, соответствующих вашему запросу match_phrase. Вы можете соответствующим образом изменить параметр boost.

Следующий запрос должен сработать для вас

 POST phrase_index/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "bool": {
            "should": [
              {
                "match": {
                  "title": "this is where it should work first"
                }
              },
              {
                "match": {
                  "body": "this is where it should work first"
                }
              }
            ]
          }
        },
        {
          "bool": {
            "should": [
              {
                "match_phrase": {
                  "title": {
                    "query": "this is where it should work first",
                    "boost": 20
                  }
                }
              },
              {
                "match_phrase": {
                  "body": {
                    "query": "this is where it should work first",
                    "boost": 20
                  }
                }
              }
            ]
          }
        }
      ]
    }
  }
}
  

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

1. Привет! Что, если бы я просто хотел использовать только match_phrase для обоих полей? Я попробовал ваш ответ без каких-либо match но у меня это не сработало.

2. какую версию ES вы используете?