当前位置: 首页 > 知识库问答 >
问题:

查询dynamodb进行文本搜索?

乌璞瑜
2023-03-14

我正在寻找优化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进行搜索查询?

共有1个答案

宋烨烁
2023-03-14

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

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

 类似资料:
  • 假设我有一个DynamoDB表: UserId是主键(hash),我需要将BookName设置为排序键(range),因为添加到数据库中的另一项用相同的UserId覆盖了前面的项。

  • 我对DynamoDB非常陌生(一般没有Sql),在理解如何形成一个简单的查询时遇到了一些困难。。 我想在SQL中执行一个简单的选择,但似乎无法完成。 我的表定义基本上是: 表名snsNotiations主分区密钥接收者ID(编号) 它遵循一些属性(如readAt)。 我要执行的查询是: 我甚至可以在AWS UI上执行此查询:截图 我的lambda函数使用以下内容: 但我得到以下错误: 无法查询。错

  • 我在dynamodb中有一个表,并在其中存储类似于以下内容:

  • 使用DynamoDB,没有简单的方法可以对列执行索引范围查询。主键、本地二级索引和全局二级索引都需要分区键来进行范围查询。 例如,假设我有一个带有数字分数属性的高分表。使用索引范围查询无法获得前10名或前25至50名 那么,执行这项极其常见的任务的惯用方式或首选方式是什么呢? > 接受表格扫描。 使用静态分区键并利用分区查询。 使用固定数量的静态分区键并使用多个分区查询。

  • 问题内容: 我有一个包含多个字段的索引,其中一个是字符串字段,我在其中存储产品的类别名称…例如“电子”,“家庭”,“花园”等 我正在执行布尔查询以按名称,价格和类别查找产品,但是我不确定如何执行“或”搜索,以便可以同时查询两个类别。 我当前的查询如下所示: 这对于一个类别的搜索来说效果很好,但是我不确定如何搜索将是两个类别的“ Electronics OR Home”。 问题答案: 您可以这样写:

  • 问题内容: 大家好,我有以下问题。我的MySQL数据库中有一个保留表,日期列定义为DATETIME。我需要使用hibernate进行查询以找到一天中的所有储备,无论是小时还是同一年的月份和日期,而我正在这样做 … 我真的不知道如何进行比较,并只带给我指定日期的信息,没有任何帮助吗? 问题答案: 我希望有一种与日期无关的将日期时间转换为日期的方法。通常,这就是我处理您的情况的方式。