为Elasticsearch创建一个基于JSON文档的id(key)

时间:2017-02-12 18:12:37

标签: java json elasticsearch

在我的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对象/字符串计算此键的最佳方法是什么?对我来说,表演是一个非常重要的标准。

1 个答案:

答案 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