无法使用DynamoDB GSI

问题描述

我用Ruby On Jets编写并使用Dynomite与DynamoDB一起工作。我对GSI有问题。
我有一个包含3个字段的表:display,value,title_hilight。我需要在所有三个字段中使用搜索。为此,我决定使用全局二级索引。出于测试目的,我决定在“显示”字段中添加GSI。 我创建了迁移

class SoMetableMigration<Dynomite::Migration
  def up
    create_table 'table-name' do | t |
      t.partition_key "id: string: hash" # required

      t.gsi do | i |
        i.partition_key "display: string"
      end
    end
  end
end

然后我创建了一个模型

require "active_model"

class ModelName<ApplicationItem
  self.set_table_name 'some-model-name'
  column :id,:display,:val,:title_hilight
end

现在,我正在尝试通过“显示”字段中的值查找记录:
ModelName.where ({display: 'asd'}),但出现错误

Aws::DynamoDB::Errors::ValidationException (Query condition missed key schema element)

这是aws dynamodb describe-table --table-name table-name --endpoint-url http://localhost:8000

输出
{
    "Table": {
        "AttributeDeFinitions": [
            {
                "AttributeName": "id","AttributeType": "S"
            },{
                "AttributeName": "display","AttributeType": "S"
            }
        ],"TableName": "some-table-name","KeySchema": [
            {
                "AttributeName": "id","KeyType": "HASH"
            }
        ],"TableStatus": "ACTIVE","CreationDateTime": "2020-10-26T14:52:59.589000+03:00","ProvisionedThroughput": {
            "LastIncreaseDateTime": "1970-01-01T03:00:00+03:00","LastDecreaseDateTime": "1970-01-01T03:00:00+03:00","NumberOfDecreasesToday": 0,"ReadCapacityUnits": 5,"WriteCapacityUnits": 5
        },"TableSizeBytes": 112,"ItemCount": 1,"TableArn": "arn:aws:dynamodb:ddblocal:000000000000:table/some-table-name","GlobalSecondaryIndexes": [
            {
                "IndexName": "display-index","KeySchema": [
                    {
                        "AttributeName": "display","KeyType": "HASH"
                    }
                ],"Projection": {
                    "ProjectionType": "ALL"
                },"IndexStatus": "ACTIVE","ProvisionedThroughput": {
                    "ReadCapacityUnits": 5,"WriteCapacityUnits": 5
                },"IndexSizeBytes": 112,"IndexArn": "arn:aws:dynamodb:ddblocal:000000000000:table/some-table-name/index/display-index"
            }
        ]
    }
}

我将真实表的名称更改为SoMetableName(有时只是表名)。其余代码保持不变。感谢您的帮助

解决方法

here所述:

在DynamoDB中,您可以选择创建一个或多个二级索引 在一个表上并以与查询a相同的方式查询这些索引 桌子。

您需要在查询中明确指定GSI名称。

,

@jny答案是正确的。他告诉我使用其他索引。我不知道如何使用其他模型(请参阅他的回答的注释),但是带有索引的想法非常非常正确。这就是现在一切对我有效的方式

http://