在我的Java应用程序中,我需要在ElasticSearch存储一个JSON文档。我想防止ES中的文档重复,所以我将基于JSON对象/字符串计算某种id(键),并在ES处索引时将其用作本文档的自己的id。不幸的是,我没有任何候选者在这个JSON中有一个自然键,所以应该考虑到这个密钥生成的整个JSON对象/字符串。
这是JSON文档的一个示例:
{
"filterQueries":[
{
"type":"LessOrEqualQuery",
"characteristicId":630,
"value":799621200000,
"operator":"<="
}
],
"sortCriteriaIds":[
566,
572
],
"sortWeightCriteriaDirection":"DESC",
"sortTotalVotesCriteriaDirection":null,
"sortCriteriaCoefficients":{
"572":20.0
},
"sortCharacteristicId":631,
"sortCharacteristicDirection":"DESC",
"sortDecisionPropertyName":"createDate",
"sortDecisionPropertyDirection":"DESC",
"excludeChildDecisionIds":null,
"includeChildDecisionIds":null,
"pageNumber":0,
"pageSize":100
}
基于Java中的JSON对象/字符串计算此键的最佳方法是什么?对我来说,表演是一个非常重要的标准。
答案 0 :(得分:1)
如果速度非常关注。您可以使用XOR操作(几乎任何大小的CRC32)。
伪代码:
input_string = Stringify(json)
result = 0;
for(each chunk of size K from input_string){
result = result XOR chunk;
}
return result