如何在Elasticsearch无痛脚本中获取对象中键值对的值

时间:2018-07-20 23:33:21

标签: elasticsearch-6 elasticsearch-query elasticsearch-painless

我的一个索引(在ES6.2中)的部分映射如下

"sdata": {
  "type": "object",
  "dynamic": true,
  "properties": {
    "xyz": {
      "dynamic": true,
      "properties": {}
    },
    "students": {
      "dynamic": true,
      "properties": {
        "name_age": {
          "dynamic": "true",
          "type": "object",
          "properties": {
          }
        },
        "school_id": {
          "type": "integer"
        }
      }
    }
  }
}

和该索引的一个示例文档如下:

{
  "sdata": {
      "xyz": {
          "abc": 0,
          "def": 0,
          "klm": null
      },
      "students": {
          "roll_age": {
              1021: 27,
              99271: 12,
              5119: 21,
          },
          "school_id": 12
      }
  }
}

我有一个轻松的脚本,我的目标是根据提供的学生的卷号(即随机数)进行自定义评分计算。例如,如果 学生成绩为99271,则应返回得分12

我试图用以下两种方式编写脚本-下面的option1和option2。他们都没有工作。

"script": {
  "params": {
    "student_roll": 99271
  },
  "source": """

    // option - 1
    if (doc['sdata.students.roll_age'].containsKey(params.student_roll)) {
      // how to return the value?
    }

    // option - 2
    int ilen = doc['sdata.students.roll_age'].length;
    for (int i = 0; i < ilen; i++) {
      if(doc['sdata.students.roll_age'][i] == params.student_roll) {
        return doc['sdata.students.roll_age'][i];
      }
    }

  """
}

有人知道如何通过轻松的脚本来获得它吗?

0 个答案:

没有答案