使用数组方法unique()的脚本更新导致错误

时间:2019-09-23 15:59:18

标签: elasticsearch

我需要用另一个数组更新数组值,然后删除交集,所以我为Elasticsearch脚本找到了此方法'unique()',但这会导致错误:

{
  "error": {
    "root_cause": [
      {
        "type": "remote_transport_exception",
        "reason": "[probook][127.0.0.1:9300][indices:data/write/update[s]]"
      }
    ],
    "type": "illegal_argument_exception",
    "reason": "failed to execute script",
    "caused_by": {
      "type": "script_exception",
      "reason": "runtime error",
      "script_stack": [
        "ctx._source.arrFieldName = ctx._source.arrFieldName.unique();",
        "                                                     ^---- HERE"
      ],
      "script": "ctx._source.arrFieldName.addAll([111, 222, 333]);ctx._source.arrFieldName = ctx._source.arrFieldName.unique();ctx._source.arrFieldNameCount = ctx._source.arrFieldName.length",
      "lang": "painless",
      "caused_by": {
        "type": "illegal_argument_exception",
        "reason": "dynamic method [java.util.ArrayList, unique/0] not found"
      }
    }
  },
  "status": 400
}

1 个答案:

答案 0 :(得分:1)

对于嵌入式无痛脚本,您应该使用distinct()而不是unique()来做到这一点,

{
  "script" : {
      "inline": "ctx._source.arrFieldName=
                ctx._source.arrFieldName.stream().distinct().sorted()
                                      .collect(Collectors.toList())"
 }
}