繁体   English   中英

是否可以在 python 中过滤 DynamoDB 查询结果?

[英]Is it possible to filter a DynamoDB query result in python?

我的数据格式如下所示

{
  ID:'some uuid'
  Email:'some@email.com',
  Tags=[tag1,tag2,tag3...],
  Content:' some content'
}

分区键是 ID,排序键是电子邮件 如果我只想通过电子邮件查询,我创建了电子邮件的二级索引“email_index”,现在我想通过电子邮件和特定标签查询数据 例如我想要要查找 Email='some@email.com' 和 Tags 包含 'tag2' 的所有数据,我想先通过“email_index”查询

result=table.query(
            IndexName='EmailIndex',
            KeyConditionExpression='Email=:email',
            ExpressionAttributeValues={
                ':email':'some@email.com'
            }
)['Items']

然后用Attr('Tags').contains('tag2')扫描结果 那么是否有可能同时进行? 或者我必须编写一个循环来过滤 Python 中的查询结果?

标签可能是 DynamoDB 的一个棘手用例。

一种选择是在查询操作中使用FilterExpression

result=table.query(
            IndexName='EmailIndex',
            KeyConditionExpression='Email=:email',
            FilterExpression: 'contains(Tags, :tag)',
            ExpressionAttributeValues={
                ':email':'some@email.com',
                ':tag': 'tag1'
            }
)['Items']

正如您所概述的,另一种选择是检查您的应用程序代码。

如果这对于您的用例来说不够灵活,您可能需要研究更强大的搜索解决方案,如 Elasticsearch。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM