1

首先,我知道我们不能在KeyConditionExpression. 我将 I18n 密钥存储在数据库中,并且具有以下数据结构:

{
  "de": "Key in German",
  "en": "Key in English",
  "pk_id": "I18N-12345"
}

我还有一个 UI,其中有一个文本字段,应该允许我按任何语言文本过滤键。在这种情况下,英语或德语,由键de和表示en

我想实现一个关键条件表达式如下所示的查询:

{
  KeyConditionExpression: "begins_with(#de, :search_text) OR begins_with(#en, :search_text)"
}

如前所述,这将是理想的,但由于我们没有OR操作,我真的不知道如何修改查询或如何创建允许我进行此查询的 GSI。

谢谢

4

1 回答 1

0

您没有在示例中解释什么是分区键和排序键。不幸的是,每个表只能有一个排序键 - 并且只有该排序键可以begins_with()像您一样使用函数有效地过滤。而且你不能同时让“en”和“de”成为同一个表的排序键。

但是,您可以使用 LSI 做一些事情来解决这个限制。您可以将“en”作为原始表的排序键(我假设 pk_id 是分区键?),然后创建一个 LSI(它甚至不需要是 GSI - LSI 更有效)其分区键是相同的(pk_id),但排序键是“de”。然后,您只需对每个查询执行两次 - 一次在基表begins_with(#en, :search_text)上使用 `begins_with(#de, :search_text) 在 LSI 上进行一次。您想要的“OR”只是意味着获取两个查询的结果。

于 2020-01-16T15:29:36.267 回答