是否可以过滤 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
我创建了一个电子邮件的二级索引,如果我只想通过电子邮件查询,它是“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。
我的数据格式如下所示
{
ID:'some uuid'
Email:'some@email.com',
Tags=[tag1,tag2,tag3...],
Content:' some content'
}
分区键是ID,排序键是Email 我创建了一个电子邮件的二级索引,如果我只想通过电子邮件查询,它是“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。