Tengo una estructura padre / hijo en 3 niveles. Digamos:
Empresa -> Empleado -> Disponibilidad
Dado que la disponibilidad (y también el empleado) se actualiza con frecuencia aquí, elijo usar la estructura principal / secundaria contra anidada. Y la función de búsqueda funciona bien (todos los documentos en fragmentos correctos).
Ahora quiero ordenar esos resultados. Ordenarlos por metadatos de la empresa (primer nivel) es fácil. Pero necesito ordenar también por tercer nivel (disponibilidad).
Quiero una lista de empresas ordenadas por:
- Distancia desde la ubicación dada ASC
- Calificación DESC
- Disponibilidad más pronto ASC
Por ejemplo:
La Compañía A está a 5 millas de distancia, tiene una calificación de 4 y lo más pronto posible, uno de sus empleados está disponible en 20 horas. La Compañía B también está a 5 millas de distancia, también tiene una calificación de 4, pero lo más pronto posible, uno de sus empleados está disponible en 5 horas.
Por lo tanto, el resultado de la clasificación debe ser B, A.
Me gustaría agregar un peso especial a cada uno de estos datos, así que comencé a escribir agregaciones que luego podría usar en mi script custom_score.
Lo esencial para crear índices, importar datos y buscar
Ahora, me las arreglé para escribir una consulta que en realidad devuelve el resultado, pero el depósito de agregación de disponibilidad está vacío. Sin embargo, también obtengo resultados demasiado estructurados, me gustaría aplanarlos.
Actualmente vuelvo:
ID de empresa -> ID de empleado -> primera disponibilidad
Me gustaría tener una agregación como:
IDS de la empresa -> primera disponibilidad
De esta manera puedo hacer mi custom_score
guión para calcular la puntuación y ordenarlos correctamente.
Pregunta más simplificada:
¿Cómo se puede ordenar / agregar por hijos de varios niveles (grandes) y posiblemente aplanar el resultado?