Рад, что мы смогли ответить вам напрямую.Повторно опубликовать суть ответа здесь:
Вот как вы можете отформатировать свои данные:
[{
objectID: '120',
officeName: 'Super office',
availabilityStart: timestampLastIndexing,
availabilityEnd: timestampOneYearInTheFutureFromLastIndexing
}]
Это будет состояние, когда вы запускаете свой индекс, без какого-либо бронирования, это означаетв каждом офисе будет одна запись, а AvailabilityStart будет временем последней индексации, AvailabilityEnd будет через год в будущем.
Тогда, если кто-то сделает заказ на 12 июля для этого офиса (120, Super Office), вы должны обновить свой индекс следующим образом:
[{
objectID: '120',
officeName: 'Super office',
availabilityStart: timestampLastIndexing,
availabilityEnd: timestampJuly11EndOfTheDay
}, {
objectID: '120',
officeName: 'Super office',
availabilityStart: timestampJuly13StartOfTheDay,
availabilityEnd: timestampOneYearInTheFutureFromJuly13StartOfTheDay
}]
По сути, вы должны обновлять свой индекс при каждом бронировании и объединять смежные дни, а также следить за тем, чтобы кто-то в процессе бронирования не имелнеприятным сюрпризом, если бронирование завершено, если кто-то завершил его раньше (классический дизайн оформления заказа).
На вашем веб-интерфейсе вам нужно будет делать запросы следующим образом:
index.search({
query: ..,
filters: 'userSelectedTimestamp >= availabilityStart AND userSelectedTimestamp <= availabilityEnd'
})