MST

星途 面试题库

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

请简述在ElasticSearch中,scripted_upsert参数主要应用于哪些场景,结合简单的示例说明如何在文档操作中设置该参数。
36.7万 热度难度
数据库ElasticSearch

知识考点

AI 面试

面试题答案

一键面试

scripted_upsert参数应用场景

  1. 复杂更新逻辑:当文档更新不仅仅是简单的字段替换,而是需要根据已有文档内容进行复杂计算、条件判断等逻辑时。例如,电商系统中商品库存更新,不仅要减少库存数量,还要根据库存阈值判断是否需要标记为缺货。
  2. 个性化定制更新:不同的文档可能需要不同的更新逻辑,通过脚本动态实现。比如,在用户积分系统中,不同等级用户在完成任务后获得积分的计算方式不同。

设置示例

以下以Python的Elasticsearch客户端为例:

from elasticsearch import Elasticsearch

es = Elasticsearch()

doc_id = "1"
doc = {
    "title": "示例文档",
    "content": "这是一个示例"
}

script = """
if (ctx._source) {
    ctx._source.content = ctx._source.content + ',更新内容';
} else {
    ctx._source = params.doc;
}
"""

response = es.update(
    index="test_index",
    id=doc_id,
    body={
        "script": {
            "source": script,
            "params": {
                "doc": doc
            }
        },
        "scripted_upsert": true,
        "upsert": doc
    }
)
print(response)

在上述示例中,scripted_upsert设置为true,表明如果文档不存在则插入(执行upsert部分),如果文档存在则执行脚本中的更新逻辑。脚本中判断文档是否存在(ctx._source是否有值),若存在则更新content字段,若不存在则插入新文档。