我正在尝试在查询中构建过滤器表达式以在dynamodb中搜索数据。
var params = {
TableName: "ContactsTable",
ExpressionAttributeNames: {
"#lastName": "LastName",
"#firstName": "FirstName",
"#contactType": "ContactType"
},
FilterExpression: "contains(#lastName, :searchedName) or contains(#firstName, :searchedName)",
ExpressionAttributeValues: {
":companyContactType": event.query.companyContactType,
":searchedName": event.query.searchedValue
},
KeyConditionExpression: "#contactType = :companyContactType"
};
用户通常搜索姓氏,名字(他们将逗号附加到姓氏上作为常见的搜索模式)。但是,数据存储在名为LastName和FirstName的单独属性中,以便它们也可以通过它们进行搜索。
有没有一种方法可以动态连接这两个字段,例如contains(#lastName<append comma>#firstName, :searchedName)
?
答案 0 :(得分:0)
您应该从用户输入中删除逗号,拆分单词,并针对每个单词检查它是否同时包含在(名字和姓氏)和“或”所有内容中,或者甚至使用begins_with代替contains。
例如对于“约翰·史密斯”,将导致
包含(#lastName,“ john”)或 contains(#lastName,“ smith”)或 contains(#firstName,“ john”)或 contains(#firstName,“ smith”)
根据我所知,contains()也区分大小写,因此您可能要插入名字和姓氏以及小写字母和小写字母的用户搜索词。