如何在Java中查询DynamoDB上的二级索引

时间:2016-05-06 17:07:36

标签: amazon-dynamodb

我正在编写一个应用程序,用户可以使用该应用程序请求有关特定事件的信因为多个用户可以请求有关同一事件的信息,所以我的Request表的密钥是username + event(其中两个都是字符串)。

但是,在提供该信息的Java代码中,我不想下载我不需要的数据,理想情况下,我会查询该事件(因为我不知道所有的用户名)进行查询的人。)

我想如果我给Request表一个二级索引,称为“event”,用户也填写了(因此哈希键(称为“key”)是用户名+事件,而事件字段只是事件字符串),我能够查询二级索引,并获得该事件的所有请求。

以下是代码:

before importing module
import is in progress
after importing module
before importing module
after importing module

然而,我得到的是这条错误消息: com.amazonaws.AmazonServiceException:查询条件错过了关键模式元素:key

删除对withIndexName(“event”)的调用没有任何区别。

本周之前我没有使用NoSQL,这可能是问题的一部分。

1 个答案:

答案 0 :(得分:2)

您确定"event"是索引索引名称的属性的名称吗?

您在查询中使用它作为属性名称:

keyConditions.put("event", new Condition()
                .withComparisonOperator(EQ)
                .withAttributeValueList(new AttributeValue().withS(event)));

你正在使用它作为索引名称:

 .withIndexName("event")

在AWS仪表板的DynamoDB控制台中,检查索引选项卡以查看索引的名称。自从我创建索引以来已经有一段时间了,但我相信默认情况下,AWS通常会使用_index对索引名称进行后缀。