ES 通过查询更新某个字段,Error 500 (Internal Server Error)

问题描述:

项目中通过查询ES中某个字段,并更新某个值的字段,当量比较大的时候报错:

upsert associated failed: elastic: Error 500 (Internal Server Error): Failed to compile inline script [ctx._source.pcap_filename = ] using lang [painless] [type=general_script_exception]

问题解析:

  1. 通过查询某个字段并更新这条数据中某个值的时候,如果是通过Script的方式更新,需要先阅读ES的官方Script撰写界面:How to write scripts | Elasticsearch Guide [8.11] | Elastic

  2. 我是使用硬编码的方式直接撰写的ES的script,我写的代码(Go),

Go 复制代码
script := "ctx._source.pcap_filename = '" + fileName + "'"

fileName 是一个变量,script 在编译的时候直接就硬编码,所以每一次更新的时候都要重新compile这个script,当量比较大的时候,就超过下面如图所示的限制了。ES的script是有次数限制的,当你触发先至的时候,就会报这个错误

  1. 问题解决方式:

通过官方script 介绍的方式,

Go 复制代码
script := "ctx._source.pcap_filename = params['fileName']"

通过上面的方式写,每次script都是一样的,但是params不一样,就不用es重新编译这个script,直接在script 中的cache中取出已经编译的script,替换param中的数据就可以了。

通过参数的方式进行传递,在go中

Go 复制代码
res, err := es.client.UpdateByQuery().Index(index).Query(match_query).
		Script(elastic.NewScript(script).Param("fileName", fileName)).Do(es.ctx)

使用上面的代码,查询、撰写script,并且设置参数fileName。

这样应该就不会报这个错误了。

其余参考网站:1. https://github.com/elastic/elasticsearch-net/issues/29612

  1. https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-scripting.html

  2. Understanding and fixing "too many script compilations" errors in Elasticsearch

相关推荐
黄焖鸡能干四碗4 分钟前
智能制造工业大数据应用及探索方案(PPT文件)
大数据·运维·人工智能·制造·需求分析
世岩清上11 分钟前
乡村振兴主题展厅本土化材料运用与地域文化施工表达
大数据·人工智能·乡村振兴·展厅
说私域1 小时前
短视频私域流量池的变现路径创新:基于AI智能名片链动2+1模式S2B2C商城小程序的实践研究
大数据·人工智能·小程序
MM_MS1 小时前
Halcon图像锐化和图像增强、窗口的相关算子
大数据·图像处理·人工智能·opencv·算法·计算机视觉·视觉检测
焦耳热科技前沿2 小时前
中科大EMA:3秒焦耳热一步合成双功能催化剂用于甲醇氧化协同高效制氢
大数据·人工智能·自动化·能源·材料工程
向量引擎小橙2 小时前
推理革命与能耗:AI大模型应用落地的“冰山成本”与破局之路
大数据·人工智能·深度学习·集成学习
一条咸鱼_SaltyFish2 小时前
[Day15] 若依框架二次开发改造记录:定制化之旅 contract-security-ruoyi
java·大数据·经验分享·分布式·微服务·架构·ai编程
TMT星球3 小时前
星动纪元携人形机器人家族亮相CES 2026,海外业务占比达50%
大数据·人工智能·机器人
chen<>3 小时前
Git原理与应用
大数据·git·elasticsearch·svn
焦耳热科技前沿4 小时前
西华大学Adv. Sci.:超高温焦耳热冲击制备拓扑缺陷碳,用于催化碳纳米管可控生长
大数据·人工智能·能源·材料工程·电池