Amazon dynamodb 查询dynamodb进行文本搜索?

Amazon dynamodb 查询dynamodb进行文本搜索?,amazon-dynamodb,dynamodb-queries,Amazon Dynamodb,Dynamodb Queries,我希望优化dynamodb操作,即删除扫描并使用查询快速获取数据 表数据: itemId itemName itemOwners hash1 abc [user1, user2] hash2 abcd [user1, user3] hash3 xyz [user2, user3] 我必须使用项目名称进行项目搜索。 现在,我们扫描整张桌子 let getItems = { TableName: ItemsTable, Fil

我希望优化dynamodb操作,即删除扫描并使用查询快速获取数据

表数据:

itemId  itemName  itemOwners

hash1   abc       [user1, user2]
hash2   abcd      [user1, user3]
hash3   xyz       [user2, user3]
我必须使用项目名称进行项目搜索。 现在,我们扫描整张桌子

  let getItems = {
    TableName: ItemsTable,
    FilterExpression: 'contains (#itemName, :searchValue)',
    ExpressionAttributeNames: { '#itemName': 'itemName' },
    ExpressionAttributeValues: { ':searchValue': searchValue },
  };
  let items = await docClient.scan(getItems).promise();
然后,如果itemOwners包含搜索用户的用户ID,我们将过滤items结果


我想知道是否有更好的方法使用dynamodb执行此搜索查询?

在dynamodb中执行
包含
时,如果不使用过滤条件,则没有更好的方法。DynamoDB并不是真正为全文搜索而设计的。然而,有一种方法可以从DynamoDB中实现某种程度的文本搜索功能。我不是建议你应该,但你可以。基本上,您可以为要包含在搜索中的每个单词/项目组合创建一个记录。这不允许部分单词匹配,但这是获得完整单词匹配的一种方法。当然,这需要对所有数据进行预处理,以使其可用于搜索。如果您决定这样做,我建议您使用DynamoDB streams来管理更新搜索数据。每次从数据库中插入/更新/删除项目时,都可以运行lambda来更新该项目的搜索记录。再说一遍,我不是建议你这么做,但你可以

我建议调查CloudSearch作为替代方案