Отношения Алголии один ко многим - PullRequest
0 голосов
/ 03 октября 2018

У меня дилемма, и мне нужна ваша техническая помощь.Я хочу хранить 2 таблицы в Алголии.

  • Одна таблица содержит предложения для офиса.
  • Одна таблица содержит все заявки на эти предложения.В моей базе данных MySQL есть отношение «один ко многим», но, поскольку я новичок в базе данных документов, я не знаю, как обращаться с отношениями в Алголии.

То, как я вижуэто, у меня есть два варианта:

  • Я копирую свою схему: 2 индекса, и мне нужно делать 2 поисковых запроса каждый раз.
  • У меня есть один индекс, для которого каждая запись содержитбронирование с данными оферты (данные оферты дублируются)

Что является хорошим выбором?в отношении хорошей практики и ценообразования?

1 Ответ

0 голосов
/ 04 октября 2018

Рад, что мы смогли ответить вам напрямую.Повторно опубликовать суть ответа здесь:

Вот как вы можете отформатировать свои данные:

[{
  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'
})
...