3

我正在使用 Amazon CloudSearch 来存储大量地点。对于一周中的每一天,每个地方都有开放时间和关闭时间。

我需要按当前时间检索地点。你建议如何为索引建模?我正在考虑通过创建 7 个文本索引来解决该问题,在这些索引中我为一周中的每一天指定有效时间。

例如,如果一个地方从上午 9 点到 13 点开放,在索引“星期一”中,我将写入字符串“9-10-11-12”。然后,通过 bq=monday:'10' 或 bq=monday:'16' 过滤,我将只有在指定时间打开的地方。

还有什么想法吗?我的解决方案似乎有效,但会建议我另一种方法吗?

4

1 回答 1

2

首先,我不会使用多个索引。

您可以使用您的方法,但只需从一周开始计算几个小时。所以,星期一是 0-23,星期二是 24-47,等等。或者你可以只有 7 个字段,“monday_hours”、“tuesday_hours”……</p>

您也可以使用 uint,而不是字符串。不是更好,而是不同,可能值得进行基准测试。

使用 uint,您可以使用范围查询。如果文档包含“打开”和“关闭”字段,并且您想知道它是否在 10 到 12 之间打开。

&bq=(and open:..12 close:10..)

剩下的一个问题是 CloudSearch 的范围搜索包括端点。所以我认为如果商店在十二点开门,这将显示一个误报。从技术上讲,范围重叠,但没有用处。为了解决这个问题,我会做两件事。首先,我不会按小时计算,我会使用分钟作为字段中的值(0 到 1439)。然后在起始范围内加一,从末尾减去一。

使用 uint 与使用文本字段的执行方式不同。我肯定会对它们进行基准测试,看看哪一个更适合你。

于 2013-09-10T16:03:55.210 回答