Как сохранить сортировку выдачи как у переданных строк в Elasticsearch?

Для поиска используется запрос:
{
  "query": {
    "bool": {
      "filter": [
        {
          "terms": {
            "id": [
              "4",
              "2",
              "1",
              "3"
            ]
          }
        }
      ]
    }
  },
  "track_total_hits": true,
  "min_score": 0
}


Можно ли как то сделать что бы найденный результат отдавался в таком же порядке? id:4-2-1-3
  • Вопрос задан
  • 41 просмотр
Решения вопроса 1
chupasaurus
@chupasaurus
Сею рефлекторное, злое, временное
Через Function score. Но проще сделать 4 запроса.
пример function score для написанного запроса
{
    "query": {
        "function_score": {
          "query": { "bool": { "filter": [ { "terms": { "id" : [ "4", "2", "1", "3" ] } } ] } },
          "boost": "1", 
          "functions": [
              {
                  "filter": { "match": { "id": "4" } },
                  "weight": 4
              },
              {
                  "filter": { "match": { "id": "2" } },
                  "weight": 3
              },
              {
                  "filter": { "match": { "id": "1" } },
                  "weight": 2
              },
              {
                  "filter": { "match": { "id": "3" } },
                  "weight": 1
              },
          ],
          "max_boost": 4,
          "score_mode": "first",
          "boost_mode": "replace",
          "min_score" : 1
        }
    },
    "sort": [
        {
            "_score": {
                "order": "desc"
            }
        }
    ]
}

Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы