【发布时间】:2018-07-11 17:29:59
【问题描述】:
我正在尝试查询 DynamoDB 表并检查我传入的查询是否包含在表索引的分区键中。
例如,我有一个 DynamoDB 表,下面有示例数据。
+-----+----------------+---------------------------------------------+
| id | title | description |
+-----+----------------+---------------------------------------------+
| id1 | My Title One | This is an awesome item in my database |
| id2 | My Title Two | This is also an awesome item in my database |
| id3 | The Item Three | Hello World |
+-----+----------------+---------------------------------------------+
我有一个关于属性title 的全局索引。主分区键是id。
我想要做的是接受用户的搜索查询并匹配标题的所有项目。
我有以下代码可以将用户术语与标题完全匹配。
const params = {
ExpressionAttributeValues: {
":q": {
S: req.query.q
}
},
KeyConditionExpression: "title = :q",
TableName: "MyTable",
IndexName: 'title-index'
};
dynamodb.query(params, (err, titles) => {
if (err) {
return res.status(500).send({"Error": "Error"});
}
titles = titles.Items
.map(item => AWS.DynamoDB.Converter.unmarshall(item));
return res.send(titles);
});
因此,如果用户搜索My Title One,它将返回ID 为id1 的结果。现在我想添加对如果用户输入My Title 的支持,我希望它返回id 的id1 和id2。目前它什么也不返回,因为没有什么完全匹配。
我知道这可以通过使用 DynamoDB 扫描而不是查询来实现,但由于我的表有这么多项目,在这种情况下进行扫描似乎在性能和成本方面效率很低。
实现这一目标的最简单方法是什么?
【问题讨论】:
标签: javascript amazon-web-services amazon-dynamodb dynamodb-queries