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

相关推荐
浪子小院1 小时前
ModelEngine 智能体全流程开发实战:从 0 到 1 搭建多协作办公助手
大数据·人工智能
闲人编程1 小时前
Elasticsearch搜索引擎集成指南
python·elasticsearch·搜索引擎·jenkins·索引·副本·分片
AEIC学术交流中心1 小时前
【快速EI检索 | ACM出版】2026年大数据与智能制造国际学术会议(BDIM 2026)
大数据·制造
wending-Y2 小时前
记录一次排查Flink一直重启的问题
大数据·flink
UI设计兰亭妙微2 小时前
医疗大数据平台电子病例界面设计
大数据·界面设计
先跑起来再说2 小时前
Git 入门到实战:一篇搞懂安装、命令、远程仓库与 IDEA 集成
ide·git·后端·elasticsearch·golang·intellij-idea
初恋叫萱萱2 小时前
模型瘦身实战:用 `cann-model-compression-toolkit` 实现高效 INT8 量化
大数据
互联网科技看点3 小时前
孕期科学补铁,保障母婴健康-仁合益康蛋白琥珀酸铁口服溶液成为产妇优选方案
大数据
Dxy12393102163 小时前
深度解析 Elasticsearch:从倒排索引到 DSL 查询的实战突围
大数据·elasticsearch·搜索引擎
YongCheng_Liang3 小时前
零基础学大数据:大数据基础与前置技术夯实
大数据·big data