Elasticsearch - 使用脚本结果作为值创建新字段

Elasticsearch - Create new field with script result as value

如何创建一个名为“消息”的新字段,其类型为“关键字”以及我的脚本结果的内容:

GET log-sup-app1-32012-2021-11-08t11-00-49/_search
{
  "script_fields": {
    "message": {
      "script": { 
        "source": """
            String str = doc['@mt'].value;
            
            Map m = new HashMap();
            
            for (key in params._source.keySet()) {
              if (doc.containsKey(key)) {
                if (doc[key].size() != 0) {
                  m.put(key, doc[key].value.toString());
                }
              }
            }
            
            for (Map.Entry entry : m.entrySet()) {
              str = str.replace("{" + entry.getKey() + "}", entry.getValue());
            }
            
            return str; (e.g. returns 'This is the Test Result')
          """
      }
    }
  }
}

预期的属性:

{
  "properties": {
    "message": {
      "type": "keyword"
    }
  }
}

预期的搜索结果:

{
  "message" : "This is the Test Result"
}

堆栈管理 -> 我的模式 -> 脚本字段 修复了问题或使用 runtime fields