Indexing Algolia一对多关系

Indexing Algolia一对多关系,indexing,one-to-many,algolia,Indexing,One To Many,Algolia,我进退两难,需要你的技术帮助。我想在Algolia中存储2张表 一个包含办公室报价的表格 一个表,包含这些优惠的所有预订。 在我的MySQL数据库中,存在一对多关系,但由于我对文档数据库不熟悉,我不知道如何在Algolia中处理关系 在我看来,我有两个选择: 我复制我的模式:2个索引,每次需要进行2个搜索查询 我有一个索引,每个记录都包含一个带有报价数据的预订(报价数据是重复的) 什么似乎是一个好的选择?在良好实践和定价方面 很高兴我们能直接回答你。在此处重新发布回复的要点: 以下是如何

我进退两难,需要你的技术帮助。我想在Algolia中存储2张表

  • 一个包含办公室报价的表格
  • 一个表,包含这些优惠的所有预订。 在我的MySQL数据库中,存在一对多关系,但由于我对文档数据库不熟悉,我不知道如何在Algolia中处理关系
在我看来,我有两个选择:

  • 我复制我的模式:2个索引,每次需要进行2个搜索查询
  • 我有一个索引,每个记录都包含一个带有报价数据的预订(报价数据是重复的)

什么似乎是一个好的选择?在良好实践和定价方面

很高兴我们能直接回答你。在此处重新发布回复的要点:

以下是如何格式化数据:

[{
  objectID: '120',
  officeName: 'Super office',
  availabilityStart: timestampLastIndexing,
  availabilityEnd: timestampOneYearInTheFutureFromLastIndexing
}]
这将是您开始索引时的状态,没有任何预订,这意味着每个办公室将有一条记录,availabilityStart将是最后一次索引的时间,availabilityEnd将是未来的一年

然后,如果有人预订了7月12日的办公室(120,超级办公室),您必须通过以下方式更新索引:

[{
  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'
})
基本上,您必须在每次预订时更新您的索引,并合并相邻日期,同时确保预订过程中的某个人在预订完成时不会感到意外,如果之前有人完成了预订(经典预订设计问题)

在前端,您必须通过以下方式提出请求:

[{
  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'
})
index.search({
问题:。。,

过滤器:“userSelectedTimestamp>=可用性开始和userSelectedTimestamp谢谢您的时间,我知道预订问题很难解决,但这似乎是存储可用性的最佳方式。所有逻辑都必须在索引时进行,但查询很容易,所以我们将尝试一下