为什么doc [' innerObject.seqId']。value.toBigInteger()在Elasticsearch中没有返回max?

时间:2016-10-13 09:09:59

标签: elasticsearch groovy aggregation

运行以下Elasticsearch 2.2 aggrigation不会返回我的Elasticsearch索引中seqId类型String的最大值:

{
   "from": 0,
   "size": 0,
    "aggs" : {
        "max_seqId" : {
        "max" : { "script" : {
                    "inline": "doc['innerObject.seqId'].value.toBigInteger()", 
                }
            }
        }
    }
}

我错过了什么?

1 个答案:

答案 0 :(得分:0)

有些文档可能不包含'innerObject.seqId'字段的值 - 字段本身缺失或分配了明确的null值。

在这两种情况下,您都在评估产生NPE的null对象上的方法toBigInteger()

您可以尝试使用存在查询以此方式在评估脚本之前过滤掉缺失值文档:

{
   "from": 0,
   "size": 0,
   "query": {
      "exists": {
         "field": "innerObject.seqId"
      }
   },
   "aggs": {
      "max_seqId": {
         "max": {
            "script": {
               "inline": "doc['innerObject.seqId'].value.toBigInteger()"
            }
         }
      }
   }
}