elasticsearch中对nested类型数据进行脚本合并出错

发布于 2022-09-12 04:33:58 字数 2457 浏览 15 评论 0

现在有如下的mapping结构

"mappings":{
    "properties":{
        "userId":{
            "type":"int"
        },
        "nickname":{
            "type":"keyword"
        },
        "huanbi":{
            "type":"nested",
            "properties":{
                "id":{
                    "type":"int"
                },
                "sumScore":{
                    "type":"int"
                },
                "evaluation":{
                    "type":"keyword"
                },
                "status":{
                    "type":"int"
                },
                "createdAt":{
                    "type":"date",
                    "format":"yyyy-MM-dd HH:mm:ss"
                }
            }
        }
    }
}

这里的huanbi为nested类型,我希望是将所有用户的huanbi都集中到一起再进行筛选。

{
  "query":{
    "exists": {
      "field":"huanbi"
    }
  },
  "aggs":{
    "allHuanbi":{
      "scripted_metric": {
        "init_script": "state.huanbi=new ArrayList();",
        "map_script": "state.huanbi.addAll(doc.huanbi);",
        "combine_script": "ArrayList huanbi_combine = new ArrayList();for(f in state.huanbi){huanbi_combine.add(f)} return huanbi_combine;", 
        "reduce_script": "ArrayList huanbi_reduce = new ArrayList();for(huanbi in states){huanbi_reduce.add(huanbi)} return huanbi_reduce;"
      }
    }
  }
}

在使用上述代码进行合并之后出现了如下错误

"failed_shards" : [
      {
        "shard" : 0,
        "index" : "dgcrm-allinone",
        "node" : "tt8lTblASDG_PxS4DdnpuQ",
        "reason" : {
          "type" : "script_exception",
          "reason" : "runtime error",
          "script_stack" : [
            "org.elasticsearch.search.lookup.LeafDocLookup.get(LeafDocLookup.java:90)",
            "org.elasticsearch.search.lookup.LeafDocLookup.get(LeafDocLookup.java:41)",
            "state.huanbi.addAll(doc.huanbi);",
            "                       ^---- HERE"
          ],
          "script" : "state.huanbi.addAll(doc.huanbi);",
          "lang" : "painless",
          "position" : {
            "offset" : 23,
            "start" : 0,
            "end" : 32
          },
          "caused_by" : {
            "type" : "illegal_argument_exception",
            "reason" : "No field found for [huanbi] in mapping with types []"
          }
        }
      }
    ]

请问各位大神这个错误是怎么导致的,因为同样的合并代码在纯数组上是可以正确运行的,是不是因为nested类型的特殊性导致代码失效?如果想要实现合并的功能需要进行怎么样的修改,还是说这个功能目前实现不了

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

白昼 2022-09-19 04:33:58

应该是mapping的阶段中的整型误写为了int导致的

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文