繁体   English   中英

弹性搜索部分更新

[英]Elastic Search Partial Update

我想做如下的部分更新。 添加一些新字段,例如Bytes_In和Bytes_Out。 并且还运行脚本以使用脚本更新从其他字段派生的字段。

脚本session-duration-script.groovy在/ config / scripts路径下。

ctx._source.duration= (new Date().parse("yyyy-MM-dd HH:mm:ss.SSS",ctx._source.sessionTerminationDateTime.replace("T", " ").substring(0,23)).getTime() - new Date().parse("yyyy-MM-dd HH:mm:ss.SSS",ctx._source.eventConversionDateTime.replace("T", " ").substring(0,23)).getTime())


access/access-event-logs/session-summary/0a30fd59karabip1new.lab.fp.f5net.com/_update   
{
       "doc" : {
          "active" : false,
          "Bytes_In": "100",
          "Bytes_Out": "100",
          "sessionTerminationDateTime": "2015-10-30T02:50:39.237Z"
       },
       "script_fields": {
               "my_field": {
                   "script_file": "session-duration-script"
                 }
        }
    }

当我运行上述更新查询时,出现此错误

{
  "code": 400,
  "message": "status:400, body:{\"error\":{\"root_cause\":[{\"type\":\"action_request_validation_exception\",\"reason\":\"Validation Failed: 1: can't provide both script and doc;\"}],\"type\":\"action_request_validation_exception\",\"reason\":\"Validation Failed: 1: can't provide both script and doc;\"},\"status\":400}",
  "originalRequestBody": "{\"error\":{\"root_cause\":[{\"type\":\"action_request_validation_exception\",\"reason\":\"Validation Failed: 1: can't provide both script and doc;\"}],\"type\":\"action_request_validation_exception\",\"reason\":\"Validation Failed: 1: can't provide both script and doc;\"},\"status\":400}",
  "referer": "172.17.86.67",
  "restOperationId": 6555035,
  "kind": ":resterrorresponse"
}

请让我知道有实现这种更新的方法。

由于错误状态,您不能同时使用docscript 我的建议是修改脚本,以添加所需的字段,并使用params映射传递这些字段的值。

更新文档,您可以提供doc script 您也不能像这样使用script_fields

将您的session-duration-script.groovy更改为此

编辑 :如果您希望基于新的sessionTerminationDateTime计算duration ,则将第一行放在末尾(感谢@Val)

ctx._source.duration= (new Date().parse("yyyy-MM-dd HH:mm:ss.SSS",ctx._source.sessionTerminationDateTime.replace("T", " ").substring(0,23)).getTime() - new Date().parse("yyyy-MM-dd HH:mm:ss.SSS",ctx._source.eventConversionDateTime.replace("T", " ").substring(0,23)).getTime());
ctx._source.active = active;
ctx._source.Bytes_In = Bytes_In; 
ctx._source.Bytes_Out = Bytes_Out;
ctx._source.sessionTerminationDateTime = sessionTerminationDateTime;

之后,这就是您可以更新文档的方式

POST access-event-logs/session-summary/0a30fd59karabip1new.lab.fp.f5net.com/_update
{
  "script": {
    "file": "session-duration-script",
    "params": {
      "active": false,
      "Bytes_In": "100",
      "Bytes_Out": "100",
      "sessionTerminationDateTime": "2015-10-30T02:50:39.237Z"
    }
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM