У меня есть родительская / дочерняя структура на 3 уровнях. Скажем:
Компания -> Сотрудник -> Доступность
Поскольку здесь часто обновляется доступность (а также сотрудник), я предпочитаю использовать родительскую / дочернюю структуру вместо вложенных. И функция поиска работает нормально (все документы в правильных шардах).
Теперь я хочу отсортировать эти результаты. Сортировать их по метаданным компании (1-й уровень) несложно. Но мне нужно отсортировать еще и по 3-му уровню (доступности).
Мне нужен список компаний, отсортированных по:
- Расстояние от местоположения с учетом ASC
- Рейтинг DESC
- Самая быстрая доступность ASC
Например:
Компания A находится в 5 милях, имеет рейтинг 4, и скорее всего один из их сотрудников будет доступен через 20 часов. Компания B также находится в 5 милях, также имеет рейтинг 4, но скорее всего один из их сотрудников будет доступен через 5 часов.
Следовательно, результат сортировки должен быть B, A.
Я хотел бы добавить особый вес к каждому из этих данных, поэтому я начал писать агрегаты, которые позже мог бы использовать в моем скрипте custom_score.
Полная суть для создания индекса, импорта данных и поиска.
Теперь мне удалось написать запрос, который фактически возвращает результат, но корзина агрегирования доступности пуста. Однако я также получаю слишком структурированные результаты, я бы хотел их сгладить.
Сейчас возвращаюсь:
IDS компании -> IDS сотрудника -> первая доступность
Я хотел бы иметь такую агрегацию:
IDS компании -> первая доступность
Таким образом, я могу написать свой custom_score
сценарий для подсчета очков и их правильной сортировки.
Более упрощенный вопрос:
как можно сортировать / агрегировать по многоуровневым (большим) дочерним элементам и, возможно, сгладить результат.