我正在尝试构建一个支持以下3种访问模式的DynamoDb表:
分区密钥是作为DynamoDb(AWS Geo Library)的地理库的一部分生成的。因此,基本上,我通过地理位置将机构分组在一起,从而支持在提供的zip的XX半径内搜索机构的功能。代码(使用邮政编码的经/纬度)。
以下是我的DynamoDb表的CloudFormation模板:
dynamoDbInstitutions:
Type: AWS::DynamoDB::Table
Properties:
TableName: institutions
AttributeDefinitions:
- AttributeName: hashKey
AttributeType: N
- AttributeName: rangeKey
AttributeType: S
- AttributeName: geohash
AttributeType: N
KeySchema:
- AttributeName: hashKey
KeyType: HASH
- AttributeName: rangeKey
KeyType: RANGE
ProvisionedThroughput:
ReadCapacityUnits: 50
WriteCapacityUnits: 2
LocalSecondaryIndexes:
- IndexName: geohash-index
KeySchema:
- AttributeName: hashKey
KeyType: HASH
- AttributeName: geohash
KeyType: RANGE
Projection:
ProjectionType: ALL
这是我表中数据的一个示例:
哈希键值966762是GeoHash值的前6位数字。这使我可以按距离将机构分组。这使我可以搜索半径范围内的机构。我有一个使用Hashkey和GeoHash的本地二级索引(LSI)。我的查询是使用LSI查找半径范围内的机构。
我还希望能够通过以下访问模式进一步过滤半径范围内的机构:
我碰到了一堵墙,DynamoDb仅允许基于2个关键条件进行查询。为了进行地理查询(在半径范围内),我必须使用哈希键和LSI(使用geohash)。我无法使用我的范围键来进一步过滤,该范围键用于建立机构与教育水平和职务代码之间的关系模型。
我如何使用DynamoDb按半径过滤 AND 并使用相关数据(例如教育水平和/或工作代码)进行过滤?