MST
星途 面试题库

面试题:ElasticSearch中scripted_upsert参数的基础使用场景

请阐述在ElasticSearch中,scripted_upsert参数一般会在哪些常见的业务场景下使用,并且举例说明如何在一个简单的索引操作中设置该参数。
31.5万 热度难度
数据库ElasticSearch

知识考点

AI 面试

面试题答案

一键面试

常见业务场景

  1. 数据更新与插入结合:当需要根据文档是否存在来决定是执行更新操作还是插入操作时使用。例如,在用户信息管理系统中,新用户注册时插入用户信息,若用户信息已有部分修改,再次提交时执行更新操作。
  2. 复杂逻辑处理:对于存在特定逻辑的更新或插入情况,如更新时需要根据已有字段值进行计算后再更新。比如在电商系统中,商品库存管理,当有新的进货记录时,需要结合原库存数量进行计算后更新库存,若该商品是新上架则插入记录。

简单索引操作设置示例

假设我们有一个索引 test_index,文档类型为 test_type,以Python的 elasticsearch 库为例:

from elasticsearch import Elasticsearch

es = Elasticsearch()

doc = {
    "field1": "value1",
    "field2": "value2"
}

update_script = {
    "source": "ctx._source.field1 = params.new_value1; ctx._source.field2 = params.new_value2",
    "params": {
        "new_value1": "new_value1_update",
        "new_value2": "new_value2_update"
    }
}

es.index(
    index="test_index",
    id=1,
    body=doc,
    scripted_upsert=True,
    upsert=doc,
    script=update_script
)

上述代码中,通过设置 scripted_upsert=True,若文档不存在(根据 id=1 判断),则执行插入操作(upsert=doc);若文档存在,则执行更新脚本(script=update_script)对文档进行更新。