【Elasticsearch】scripted_upsert

在 Elasticsearch 中,`scripted_upsert` 是一个用于更新操作的参数,它允许在文档不存在时通过脚本初始化文档内容,而不是直接使用 `upsert` 部分的内容。这种方式提供了更灵活的文档创建和更新逻辑。

`scripted_upsert` 的工作原理

当设置 `scripted_upsert` 为 `true` 时,Elasticsearch 会根据脚本逻辑来处理文档的创建和更新,而不是直接使用 `upsert` 部分的内容。脚本可以根据文档是否存在来执行不同的逻辑。

  • 文档不存在时:脚本会初始化文档内容。

  • 文档存在时:脚本会更新文档内容。

使用场景

`scripted_upsert` 常用于以下场景:

  1. 复杂的初始化逻辑:当文档不存在时,需要通过脚本动态生成初始内容,而不是直接插入固定的 `upsert` 数据。

  2. 统一的更新逻辑:无论文档是否存在,都希望通过脚本统一处理更新逻辑。

示例

以下是一个使用 `scripted_upsert` 的示例,展示了如何根据文档是否存在来执行不同的脚本逻辑:

```json

POST /sessions/session/1/_update

{

"scripted_upsert": true,

"script": {

"source": "if (ctx.op == 'create') { ctx._source = params.newData } else { ctx._source.counter += params.increment }",

"lang": "painless",

"params": {

"newData": {

"counter": 1,

"name": "Initial Name"

},

"increment": 5

}

},

"upsert": {}

}

```

在这个例子中:

  • 如果文档不存在,脚本会使用 `params.newData` 初始化文档。

  • 如果文档存在,脚本会将 `counter` 字段增加 `params.increment` 的值。

注意事项

  • `upsert` 部分:即使设置了 `scripted_upsert`,`upsert` 部分仍然需要提供一个空对象 `{}`,否则会报错。

  • 脚本语言:脚本通常使用 Painless 语言编写,这是一种 Elasticsearch 提供的安全脚本语言。

  • 性能考虑:脚本执行会增加一定的计算开销,因此在高并发场景下需要注意性能优化。

通过 `scripted_upsert`,Elasticsearch 提供了一种灵活的方式来处理文档的创建和更新逻辑,特别适用于需要动态生成初始内容或统一更新逻辑的场景。

相关推荐
阿里云大数据AI技术14 小时前
阿里云 ES AI 引擎版:面向 Agent 场景,为亿级租户、千亿规模向量设计的搜索引擎
人工智能·elasticsearch·agent
阿里云大数据AI技术14 小时前
FalconSeek 技术解析:阿里云 Elasticsearch 云原生内核如何让查询性能飙升600%
人工智能·elasticsearch
Elastic 中国社区官方博客15 小时前
将你的 Grafana Kubernetes 仪表板迁移到 Elastic Observability:相同的 PromQL,30 倍更快的查询
大数据·人工智能·elasticsearch·搜索引擎·容器·kubernetes·grafana
Elasticsearch16 小时前
使用重新设计的 AutoOps 更快地进行 Elasticsearch 问题排查
elasticsearch
Elastic 中国社区官方博客18 小时前
如何使用 OpenTelemetry 对你的搜索 API 进行埋点,并使用 ES|QL 对其进行查询
大数据·功能测试·elasticsearch·搜索引擎·全文检索·可用性测试
菜地里的小菜鸟2 天前
logstash定时同步elasticsearch数据
elasticsearch·数据同步·logstash定时同步elastics
BerryS3N2 天前
Code Git 工作树:多分支开发的痛点与工作树的曙光
大数据·git·elasticsearch
Elasticsearch2 天前
Elastic 与 Deductive AI 携手合作,加速工程团队的 agent 式事件调查
elasticsearch
Elasticsearch2 天前
将你的 Grafana Kubernetes 仪表板迁移到 Elastic Observability:相同的 PromQL,30 倍更快的查询
elasticsearch
爱莉希雅&&&2 天前
elasticsearch+kibana+logstash+filebeat链路部署流程
大数据·elasticsearch·搜索引擎·kibana·logstash·filebeat