如何使用 "contains" 和 DynamoDB 进行搜索

How to make search using "contains" with DynamoDB

我正在尝试在我的 React 应用程序中添加搜索功能。

我有这个 DynamoDB table:

---------------------
movie_id | movie_name
---------------------
1        | name a
---------------------
2        | name b
---------------------

我想创建一个搜索功能来在 React 应用程序的搜索输入中搜索 "b",并从数据库中获取 "name b" 作为结果。

我尝试 queryCONTAINS 但没有用,而且似乎不是正确的方法。

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 应用程序上创建搜索功能的最佳方法是什么?

运行 通过搜索关键字进行查询以检查数据是否包含关键字值是否有意义?

CONTAINS 运算符在 query API 中不可用。您需要为此使用 scan API (see this link).

尝试以下操作:

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 
}