Amazon dynamodb 使用地理空间数据(本地二级索引)和保存为范围键的外键进行DynamoDb查询

Amazon dynamodb 使用地理空间数据(本地二级索引)和保存为范围键的外键进行DynamoDb查询,amazon-dynamodb,dynamodb-queries,amazon-dynamodb-index,Amazon Dynamodb,Dynamodb Queries,Amazon Dynamodb Index,我正试图构建一个DynamoDb表来支持以下3种访问模式: 给定邮政编码XX半径范围内的机构访问列表 给定教育水平(4年、2年、高中等)的给定邮政编码XX半径范围内的机构访问列表 访问给定邮政编码和教育程度范围内XX半径内的机构列表 分区键是作为DynamoDb的Geo库的一部分生成的。因此,基本上,我根据地理位置将机构分组在一起,支持在提供的邮政编码的XX半径内搜索机构(使用邮政编码的lat/lon) 下面是我的DynamoDb表的CloudFormation模板: dynamoDbI

我正试图构建一个DynamoDb表来支持以下3种访问模式:

  • 给定邮政编码XX半径范围内的机构访问列表
  • 给定教育水平(4年、2年、高中等)的给定邮政编码XX半径范围内的机构访问列表
  • 访问给定邮政编码和教育程度范围内XX半径内的机构列表
  • 分区键是作为DynamoDb的Geo库的一部分生成的。因此,基本上,我根据地理位置将机构分组在一起,支持在提供的邮政编码的XX半径内搜索机构(使用邮政编码的lat/lon)

    下面是我的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
    
    以下是我的表格中的数据示例:

    • 176008代表一个机构
    • 2代表教育水平(4年制院校)
    • 11-1011.00表示职务代码
    Hashkey值966762是GeoHash值的前6位数字。这允许我按接近度将机构分组。这允许我搜索半径范围内的机构。我有一个使用Hashkey和GeoHash的本地二级索引(LSI)。我的查询使用LSI查找半径范围内的机构

    我还希望能够通过这些访问模式进一步过滤半径范围内的机构:

    • 教育水平。示例:2_*
    • 职务代码和教育程度。示例:11-1011.00_2_*
    我遇到了一堵墙,DynamoDb只允许基于2个关键条件进行查询。为了进行地理查询(在半径范围内),我必须使用哈希键和LSI(使用geohash)。我无法使用我的范围键进行进一步筛选,这是一个机构与教育水平和工作代码之间的关系建模

    如何使用DynamoDb按半径进行过滤和使用教育水平和/或工作代码等相关数据进行过滤