Javascript 如何使用“搜索”;包括「;带发电机
我正在尝试在我的React应用程序上实现搜索功能 我有一张DynamoDB表:Javascript 如何使用“搜索”;包括「;带发电机,javascript,reactjs,amazon-web-services,amazon-dynamodb,serverless-framework,Javascript,Reactjs,Amazon Web Services,Amazon Dynamodb,Serverless Framework,我正在尝试在我的React应用程序上实现搜索功能 我有一张DynamoDB表: --------------------- movie_id | movie_name --------------------- 1 | name a --------------------- 2 | name b --------------------- 我想做一个搜索功能,在React应用程序的搜索输入上搜索“b”,并从数据库中获取“名称b”作为结果 我试着用包含来查询,但是没
---------------------
movie_id | movie_name
---------------------
1 | name a
---------------------
2 | name b
---------------------
我想做一个搜索功能,在React应用程序的搜索输入上搜索“b”,并从数据库中获取“名称b”作为结果
我试着用包含来查询,但是没有用,而且似乎不是一种正确的方法
const SEARCH_KEYWORD = "b";
let params = {
TableName : 'TABLE_NAME',
KeyConditionExpression: "contains(#movie_name, :movie_name)",
ExpressionAttributeNames:{
"#movie_name": 'movie_name'
},
ExpressionAttributeValues:{
":movie_name": SEARCH_KEYWORD
}
};
documentClient.query(params, function(err, data) {
console.log(data);
});
使用DynamoDB在我的React应用程序上创建搜索功能的最佳方法是什么
通过搜索关键字运行查询以检查数据是否包含关键字值是否有意义?在查询
API中没有包含
运算符。您需要为此()使用scan
API
请尝试以下操作:
const AWS = require('aws-sdk');
const documentClient = new AWS.DynamoDB.DocumentClient();
const SEARCH_KEYWORD = "b";
let params = {
TableName : 'TABLE_NAME',
FilterExpression: "contains(#movie_name, :movie_name)",
ExpressionAttributeNames: {
"#movie_name": "movie_name",
},
ExpressionAttributeValues: {
":movie_name": SEARCH_KEYWORD,
}
};
documentClient.scan(params, function(err, data) {
console.log(data);
});
结果:
{
Items: [
{
movie_id: 2,
movie_name: 'name b'
}
],
Count: 1,
ScannedCount: 2
}
非常感谢你!它起作用了!还有一个问题,这是构建搜索功能的理想方法吗?或者有更好的方法可以做到这一点?@Ohsik,使用“包含”搜索永远不会是最优的,因为它总是需要对表进行完整扫描。如果您有大量数据,这可能会带来性能问题。但是,检查名称“开头”是否可以与query
API一起使用,并受益于索引,这将极大地提高性能。但是很明显,“开始于”不同于“包含”。@Ohsik,如果您需要对数百万行使用“包含”,我建议您注意与DynamoDB的集成。我认为现在您可以将其用作筛选器表达式