亚马逊云搜索 - 按时间和日期获取地点

时间:2013-09-09 13:26:24

标签: search data-modeling amazon-cloudsearch

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

我需要按当前时间检索地点。您如何建议对指数进行建模? 我想通过创建7个文本索引来解决问题,我在其中指定了一周中的每一天的有效小时数。

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

还有其他想法吗?我的解决方案似乎有效但建议我采用另一种方法吗?

1 个答案:

答案 0 :(得分:2)

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

你可以使用你的方法,但只需要从一周开始的几个小时。因此,星期一将是0-23,星期二24-47等。或者你可以只有7个字段,“monday_hours”,“tuesday_hours”,......

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

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

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

剩下的一个问题是CloudSearch的范围搜索是inclusive of endpoints。因此,如果商店在十二点营业,我认为这将显示误报。从技术上讲,范围重叠,但没有用。要解决这个问题,我会做两件事。首先,我不会按小时计算,我会使用每分钟作为字段中的值(0到1439)。然后将一个添加到起始范围,并从末尾减去一个。

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