отображения базы данных заключается в следующем:ElasticSearch уровня 2 ведра сортировка
{
"users": {
"mappings": {
"user": {
"properties": {
credentials": {
"type": "nested",
"properties": {
"achievement_id": {
"type": "string"
},
"percentage_completion": {
"type": "integer"
}
}
},
"current_location": {
"type": "geo_point"
},
"locations": {
"type": "geo_point"
}
}
}
}
}
Теперь в отображении, Вы можете видеть, что есть два поля гео-заочных одно CURRENT_LOCATION и другое расположение. Теперь я хочу сортировать пользователя на основе credentials.percentage_completion, который является вложенным полем. Это отлично работает, например, этот запрос, Пример запрос:
GET /users/user/_search?size=23
{
"sort": [
{
"credentials.percentage_completion": {
"order": "desc",
"missing": "_last"
}
},
"_score"
],
"query": {
"filtered": {
"query": {
"match_all": {}
},
"filter": {
"geo_distance": {
"distance": "100000000km",
"user.locations": {
"lat": 19.77,
"lon": 73
}
}
}
}
}
}
Я хочу, чтобы изменить порядок сортировки производится в ведро, желаемый порядок первого показать все человек, которые находятся в радиусе 100 км user.current_location и сортировать их в соответствии с credentials.percentage_completion, а затем остальные пользователи отсортированы снова с помощью credentials.percentage_completion.
Я попытался поставить условное выражение в сортировке и сделал его многоуровневым, но это не сработает, потому что только вложенные могут иметь фильтры и только на вложенных полях только для детей.
Я думал, что могу использовать _score для сортировки и более релевантного для людей, которые находятся под 1000 км, но гео-расстояние - это фильтр, я, похоже, не нашел способа уделить внимание фильтру.
Есть ли что-нибудь, что мне не хватает здесь, любая помощь будет замечательной.
Благодаря