Dynamodb可以用两个GSI查询吗?

时间:2016-05-16 22:36:47

标签: amazon-web-services amazon-dynamodb

感谢您抽出宝贵时间阅读我的问题。

我的情况是这样的。我在dynamodb中有一个geopoints表。

它包括:
object_type(String HASH)
id(String RANGE)
lat(编号GSI RANGE)
lng(编号GSI范围)

它的索引是:
object_type-lat-index(object_type-hash lat-range)
object_type-lng-index(object_type-hash lng-range)

我想做什么:
IndexName: "object_type-lat-index", KeyConditionExpression: "object_type=:otype AND (lat BETWEEN :llat AND :glat) AND (lng BETWEEN :llng AND :glng)", 我希望能够通过获得最小纬度和更大纬度之间的最小值以及最小值和最大值来查询lat和lng

我似乎无法在dynamodb文档中找到它。可以这样做,还是我正确实施?因为错误正在返回类似'只能有1个或2个条件'

2 个答案:

答案 0 :(得分:4)

http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GSI.html#GSI.Querying

http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/QueryAndScan.html

它的工作方式是查询针对表本身(表中定义的键)或GSI。您不能在同一查询中组合多个GSI和表HK。

这里有2个选项:
1)对2个索引执行2次查询,并将结果与​​客户端交叉 2)针对其中一个索引执行一次查询,其中一个索引具有与另一个表达式一起使用的过滤器表达式(因此基本上,例如:在lat上使用过滤器查询为long)。

答案 1 :(得分:0)

您可以在包含多个属性的表中创建一个新属性,并为该新属性创建二级索引,这样,您可以使用KeyConditionExpression搜索多个参数。

但是如果您需要搜索coinside(包含),则不是这样