Сортировка 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
для каждого жанра.
Надеюсь, это поможет.