ElasticSearch сортировка по значению - PullRequest
0 голосов
/ 13 октября 2018

У меня есть ElasticSearch 5, и я хотел бы выполнить сортировку по значению поля.Представьте себе документ с категорией, например, жанр, который может иметь такие значения, как научная фантастика, драма, комедия, и во время поиска я хотел бы упорядочить значения так, чтобы сначала появлялись комедии, а затем научно-фантастические фильмы и драмы.Тогда, конечно, я буду заказывать в группах по другим критериям.Может ли кто-нибудь указать мне, как это сделать?

1 Ответ

0 голосов
/ 13 октября 2018

Сортировка Elasticsearch с использованием ручного заказа

Это возможно в elasticsearch, где вы можете назначить заказ на основе определенных значений поля.

Я реализовал то, что вы ищете, используя сортировку на основе сценариев , в которой используется сценарий безболезненный .Вы можете обратиться к ссылкам, которые я упомянул, чтобы узнать больше об этом, для приведенного ниже запроса будет достаточно того, что вы ищете.

Также при условии, что у вас есть genre и movie в качестве ключевого слова с приведенным ниже отображением.

PUT sampleindex
{
  "mappings": {
    "_doc": {
      "properties": {
        "genre": {
          "type": "text",
          "fields": {
            "raw": { 
              "type":  "keyword"
            }
          }
        },
        "movie": {
          "type": "text",
          "fields": {
            "raw": { 
              "type":  "keyword"
            }
          }
        }
      }
    }
  }
}

Вы можете использовать следующий запрос, чтобы получить то, что вы ищете

GET sampleindex/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [{
        "_script": {
            "type": "number",
            "script": {
                "lang": "painless",
                "inline": "if(params.scores.containsKey(doc['genre.raw'].value)) { return params.scores[doc['genre.raw'].value];} return 100000;",
                "params": {
                    "scores": {
                        "comedy": 0,
                        "sci-fi": 1,
                        "drama": 2
                    }
                }
            },
            "order": "asc"
        }
    },
    { "movie.raw": { "order": "asc"}
    }]
}

Обратите внимание, что я включил сортировку для genre и movie.По сути, сортировка происходит на genre и публикует, что в дальнейшем она будет сортироваться на основе movie для каждого жанра.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...