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

相关推荐
计算所陈老师6 分钟前
Palantir的核心是Ontology
大数据·人工智能·知识图谱
Macbethad9 分钟前
工业设备系统管理程序技术方案
大数据·wpf
安达发公司11 分钟前
安达发|颜色与产能如何兼得?APS高级排程织就智慧生产网
大数据·人工智能·aps高级排程·aps排程软件·安达发aps
武子康15 分钟前
大数据-175 Elasticsearch Term 精确查询与 Bool 组合实战:range/regexp/fuzzy 全示例
大数据·后端·elasticsearch
小码哥06824 分钟前
企业灵活用工小程序(解析+源码)
大数据·企业灵活用工·灵活用工·企业用工·用工系统
Deepoch26 分钟前
发动机设计迎突破!Deepoc-M低幻觉模型重塑研发逻辑
大数据·人工智能·deepoc
sendnews31 分钟前
红松亮相首届厦门银博会,以一站式社区平台展示退休生活新图景
大数据·人工智能
有Li32 分钟前
一种交互式可解释人工智能方法,用于改进数字细胞病理学癌症亚型分类中的人机协作|文献速递-文献分享
大数据·论文阅读·人工智能·文献
Hello.Reader1 小时前
从 0 到 1 跑通第一个 Flink ML 示例
大数据·python·flink
zhangkaixuan4561 小时前
Flink Checkpoint 全生命周期深度解析
大数据·hadoop·flink·apache·paimon