面试题答案
一键面试常见业务场景
- 数据更新与插入结合:当需要根据文档是否存在来决定是执行更新操作还是插入操作时使用。例如,在用户信息管理系统中,新用户注册时插入用户信息,若用户信息已有部分修改,再次提交时执行更新操作。
- 复杂逻辑处理:对于存在特定逻辑的更新或插入情况,如更新时需要根据已有字段值进行计算后再更新。比如在电商系统中,商品库存管理,当有新的进货记录时,需要结合原库存数量进行计算后更新库存,若该商品是新上架则插入记录。
简单索引操作设置示例
假设我们有一个索引 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
)对文档进行更新。