Вы можете достичь этого просто используя sort
в своем поле score
. Для лучшего объяснения я создал индекс с некоторыми примерами данных в соответствии с вашим примером. Дополнительную информацию о функции сортировки с примером можно найти в ES do c.
Отображение индекса
{
"mappings": {
"properties": {
"pid": {
"type": "integer"
},
"cid" :{
"type" : "integer"
},
"score" :{
"type" : "integer"
}
}
}
}
Документы образца индекса
POST / _doc / 1
{"pid": 1, "cid": 1, "score": 10}
POST / _doc / 2
{"pid": 2, "cid": 1, "score": 9}
POST / _doc / 3
{"pid": 4, "cid": 1, "score": 6}
POST / _doc / 4
{"pid": 4, "cid": 2, "score": 10}
POST / _doc / 5
{"pid": 5, "cid": 2, "score ": 8}
Пример запроса для извлечения записи на основе cid
или challengeID
и сортировки результатов по score
из pid
или playerid
.
Поисковый запрос
{
"sort": [
{
"score": {
"order": "desc" --> notice `desc` order on `score` field
}
}
],
"query": {
"term": {
"cid": 2
}
}
}
Вывод вышеуказанного поискового запроса
"hits": {
"total": {
"value": 2,
"relation": "eq"
},
"max_score": null,
"hits": [
{
"_index": "leaderboard",
"_type": "_doc",
"_id": "4",
"_score": null,
"_source": {
"pid": 4,
"cid": 2,
"score": 10
},
"sort": [
10
]
},
{
"_index": "leaderboard",
"_type": "_doc",
"_id": "5",
"_score": null,
"_source": {
"pid": 5,
"cid": 2,
"score": 8
},
"sort": [
8
]
}
]
}
Обратите внимание, поисковый запрос возвратил 2 документа с cid
= 2 и идентификаторы игроков отсортированы в дес c порядок их score
.