Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 子数组上的JSON搜索_Java_Json_Amazon Dynamodb - Fatal编程技术网

Java 子数组上的JSON搜索

Java 子数组上的JSON搜索,java,json,amazon-dynamodb,Java,Json,Amazon Dynamodb,我如何在dynamoDb中构造一个查询来搜索某个“单词”在某个值范围内的所有记录。 对于上面的示例记录,它将匹配下面的任何记录,并返回整个匹配记录 { "name": "testcase #1", "words": [ "the", "quick", "brown", "fox", "jump", "over", "the", "lazy", "dog" ], "values": [ 1, 1

我如何在dynamoDb中构造一个查询来搜索某个“单词”在某个值范围内的所有记录。 对于上面的示例记录,它将匹配下面的任何记录,并返回整个匹配记录

{
  "name": "testcase #1",
  "words": [
    "the",
    "quick",
    "brown",
    "fox",
    "jump",
    "over",
    "the",
    "lazy",
    "dog"
  ],
  "values": [
    1,
    1,
    4,
    4,
    1,
    6,
    1,
    3,
    5
  ]
},
{
  "name": "testcase #2",
  "words": [
    "the",
    "second",
    "test",
    "about",
    "jump",
    "over",
    "the",
    "lazy",
    "dog"
  ],
  "values": [
    3,
    2,
    4,
    5,
    3,
    6,
    4,
    3,
    1
  ]
}

我四处搜索,但找不到关于如何在不扫描整个表的情况下执行此操作的清晰文档,这可能会对性能和成本产生重大影响。

事实上,根据帖子中提供的上述结构,形成过滤器表达式是不可行的

数据模型的拟议变更:-

words
属性存储为
map
DynamoDB数据类型

示例:-

查询:-

请注意,如果您想使用DynamoDB查询API,则必须具有哈希键数据。如果没有哈希键数据,则需要使用扫描API或需要GSI(全局二级索引)

按字数计数筛选数据的查询表达式示例:-

请注意,我在
KeyConditionExpression
中使用了散列键值“testcase 1”,并在
FilterExpression
中使用了其他属性

如果没有哈希键,则需要使用扫描API

"the", "quick", "second", "dog"
var table=“testcase”;
变量参数={
TableName:table,
KeyConditionExpression:“#name=:hkey”,
过滤器表达式:'words.the<:wordval1和words.the=:wordval2和words.brown>:wordval3',
表达式属性名称:{
“#name”:“name”
},
表达式属性值:{
“:hkey”:“测试用例1”,
“:wordval1”:2,
“:wordval2”:1,
“:wordval3”:3
}
};
查询(参数,函数(错误,数据){
如果(错误){
console.error(“无法读取项。错误JSON:”,JSON.stringify(err,
空,2);
}否则{
log(“GetItem successed:”,JSON.stringify(data,null,2));
}
});

您尝试了什么?实际上不太多,我不知道从哪里开始…谢谢,我会研究您的解决方案。实际的整个结构要复杂得多,但这将给我一个很好的起点。一旦我看了它,我可能会带着更多的问题回来。实际上,这可能不起作用,因为在上面的例子中,“the”这个词应该与可能不同的相关数值重复。在整个结构中,我还有更多与每个单词相关的信息,这些信息没有显示在这里,而是存在于大结构中。
"the", "quick", "second", "dog"
var table = "testcase";

var params = {
    TableName : table,
    KeyConditionExpression : '#name = :hkey',
    FilterExpression: 'words.the < :wordval1 and words.the = :wordval2 and  words.brown > :wordval3',
    ExpressionAttributeNames : {
        '#name' : 'name'
    },
    ExpressionAttributeValues : {
        ':hkey' : 'testcase 1',
        ':wordval1' : 2,
        ':wordval2' : 1,
        ':wordval3' : 3
    }
};

docClient.query(params, function(err, data) {
    if (err) {
        console.error("Unable to read item. Error JSON:", JSON.stringify(err,
                null, 2));
    } else {
        console.log("GetItem succeeded:", JSON.stringify(data, null, 2));
    }
});