Javascript 为Amazon DynamoDb表实现自定义排序/数据获取逻辑时出现的问题

Javascript 为Amazon DynamoDb表实现自定义排序/数据获取逻辑时出现的问题,javascript,amazon-web-services,amazon-s3,amazon-dynamodb,Javascript,Amazon Web Services,Amazon S3,Amazon Dynamodb,我有一个s3 bucket,它挂接到名为“assetbucket索引”的DynamoDb表。我想使用DynamoDb作为搜索文件的索引。你们能给我一个解决以下问题的办法吗。我需要使用AmazonScriptSDK实现 我需要什么? 按资产名称搜索数据,首先获得最匹配的结果格式,然后是部分匹配的结果格式,每页限制1000条记录,然后使用延迟加载 在搜索资产名称“Tom Cruise”时,需要获得以下信息 准确匹配结果第一名“汤姆·克鲁斯”-(匹配900条记录) 然后搜索Tom*-(匹配900条记录

我有一个s3 bucket,它挂接到名为“assetbucket索引”的DynamoDb表。我想使用DynamoDb作为搜索文件的索引。你们能给我一个解决以下问题的办法吗。我需要使用AmazonScriptSDK实现

我需要什么?

按资产名称搜索数据,首先获得最匹配的结果格式,然后是部分匹配的结果格式,每页限制1000条记录,然后使用延迟加载

在搜索资产名称“Tom Cruise”时,需要获得以下信息

  • 准确匹配结果第一名“汤姆·克鲁斯”-(匹配900条记录)
  • 然后搜索Tom*-(匹配900条记录)
  • 然后搜索Cruise*-(匹配1100条记录)
  • 因此,如果我们有2900条记录匹配三个查询,那么将形成3个页面,现在第1页需要有900条(“Tom Cruise”)+100条(Tom*)记录,第2页需要有800条(“Tom*)+200条(Cruise*)记录,第3页需要有900条记录

    表结构:(“资产负债表索引”)

    我想实施什么?

  • assetname=“Tom Cruise”-(可以这样做)
  • 包含(资产名称“汤姆”)和资产名称“汤姆·克鲁斯”
  • 包含(资产名称,“Cruise”)和资产名称“Tom Cruise”
  • 注册。2&3:获取错误[筛选器表达式只能包含非主键] 属性:主键属性:assetname]

    目前我正在使用以下JavaScript代码

    this.searchByAssetName = function(assetName, indexName, callbackFn){
            if(dynDbConn !== false && typeof assetName!="undefined" && assetName != ""){
                var params = {
                    TableName: options.table,
                    KeyConditionExpression: '#asset_name = :asset_name_val',
                    'ExpressionAttributeNames':{
                        '#asset_name':"assetname"
                    },
                    'ExpressionAttributeValues':{
                        ':asset_name_val':{'S':assetName}
                    }
                };
    
                if(typeof indexName!="undefined" && indexName!=""){
                    params.IndexName = indexName;
                }
    
                dynDbConn.query(params, function(err, data) {
                    if (err) {
                        if(typeof err.message !="undefined"){
                            this.passErrorMessage(err.message);
                        }
                        if(typeof callbackFn == "function"){
                            callbackFn(err, data, params);
                        }
                    } else {
                        if(typeof callbackFn == "function"){
                            callbackFn(err, data, params);
                        }
                    }
                });
            }
        };
    
    this.searchByAssetName = function(assetName, indexName, callbackFn){
            if(dynDbConn !== false && typeof assetName!="undefined" && assetName != ""){
                var params = {
                    TableName: options.table,
                    KeyConditionExpression: '#asset_name = :asset_name_val',
                    'ExpressionAttributeNames':{
                        '#asset_name':"assetname"
                    },
                    'ExpressionAttributeValues':{
                        ':asset_name_val':{'S':assetName}
                    }
                };
    
                if(typeof indexName!="undefined" && indexName!=""){
                    params.IndexName = indexName;
                }
    
                dynDbConn.query(params, function(err, data) {
                    if (err) {
                        if(typeof err.message !="undefined"){
                            this.passErrorMessage(err.message);
                        }
                        if(typeof callbackFn == "function"){
                            callbackFn(err, data, params);
                        }
                    } else {
                        if(typeof callbackFn == "function"){
                            callbackFn(err, data, params);
                        }
                    }
                });
            }
        };