如何在DynamoDB中以begin_with(like)条件查询产品名称

时间:2020-06-30 15:21:26

标签: amazon-dynamodb dynamodb-queries dynamo-local

我有产品表,其中产品代码是分区键,“元”是短键,产品名称和其他一些属性是非键属性。 我尝试将产品名称用作短键,但是每当产品名称更新时,我都必须删除旧条目,并且需要插入新条目。因此,我避免将产品名称用作分区/短键。

现在我可以根据用户未完全给出的产品名称来获取产品详细信息的访问模式,用户将提供前三个字符,数据库将基于前三个字符发送所有项目。但是如果不进行扫描,我将无法实现此目的

我不想进行扫描操作,因为它效率低下,查询成本高。

我也无法创建全局索引,因为当我查询商品时,我需要提供具有begin_with condition的产品ID(分区键)和产品名称。如果我知道产品密钥,那么我可以直接获得没有产品名称的产品详细信息。

请有人帮我解决这个问题。

1 个答案:

答案 0 :(得分:0)

要使商品可以通过产品名称的前三个字符有效地搜索,您可以使用GSI,但是您需要做一些附加准备:

GSI只能索引整个属性,而不能索引一个属性的前三个字符。因此,您可以添加另一列,其中包含产品名称的前三个字符。在此示例中,您的应用程序每次使用“ somename”创建或更新product_name时,也会将product_name_beginning更新为“ som”(前三个字母)。然后,在此新属性“ product_name_beginning”上添加GSI,并根据此新属性进行查询。

请注意,如果您已有数据,则此解决方案要求您将新属性添加到现有项目中,否则它们将在新索引中丢失。