我需要更新/添加该项目到现有字段。该字段保存项目列表。
下面是我的无痛脚本(Elasticsearch 8.x),
POST_scripts/update_event { “脚本”: { “来源”: ””” if (ctx._source.events.size() > 0) {' ctx._source.events = ctx._source.events.findAll(key -> key.event_id != params['event'].event_id).Take(10) + params['event'] } 别的 { ctx._source.events =params['事件'] }
""",
"lang": "painless"
} }
当我运行下面的批量 API 时,出现错误。
错误:“caused_by”:{ “类型”:“非法参数异常”, "reason": "['event'] 附近的标记序列无效。", “引起”:{ “类型”:“no_viable_alt_exception”, “原因”:“no_viable_alt_exception:空” } }
POST_批量 {“更新”:{“_index”:“es.customer-3.24-08-08-3-29-01”,“_id”:“477597”}} {“upsert”:{“名称”:“update_event”},“脚本”:{“id”:“update_event”,“参数”:{“事件”:{“event_category”:1,“状态”:“7 - 丢失","status_id":226,"type":"新 CRM","sub_type":null,"primary_assigned":"Adam Daniel","vehicle_of_interest":null,"dms_ro_number":null,"dms_deal_number": "","primary_assigned_user_name":"fsadaniel","dealership_id":3,"ancestor_id":477597,"event_id":15131032,"已删除":false,"service_date":null,"update_date":null,"secondary_assigned_user_name" :“fsdpinckne”,“bdc_assigned_user_name”:“0”,“publish_version_information”:{“版本”:“1.0.0.0”,“生产者”:“DealerSocket.Search.Publish”,“last_update”:“2024-08-07T22 :37:48.1874999-05:00"},"proxy_version_information":{"版本":"1.0.0.0","生产者":"DealerSocket.Search","last_update":"2024-08-07T22:37:48.6909805 -05:00"}} } } } }
请帮我解决这个错误。
您遇到的问题是由于 Painless 脚本中的语法错误和逻辑错误造成的。主要问题是:
不正确使用单引号和错误的标点符号。 不正确的串联和方法使用。
POST _scripts/update_event
{
"script": {
"source": """
import java.util.stream.Collectors;
if (ctx._source.events != null && ctx._source.events.size() > 0) {
ctx._source.events = ctx._source.events.stream().filter(event -> event.event_id != params.event.event_id).limit(10).collect(Collectors.toList());
ctx._source.events.add(params.event);
} else {
ctx._source.events = [params.event];
}
""",
"lang": "painless"
}
}
检查:
更新脚本后,您的批量 API 调用应该可以正常工作。确保文档中的事件字段结构正确,并且您尝试更新的文档存在