面试题答案
一键面试upsert元素功能
在ElasticSearch的更新操作中,upsert
元素用于在文档不存在时执行插入操作,若文档已存在,则执行正常的更新操作。它提供了一种在单个请求中处理插入和更新的便捷方式。
使用示例
假设我们有一个索引test_index
,文档类型为test_type
,且文档包含name
和age
字段。
文档不存在时
POST test_index/test_type/1/_update
{
"upsert": {
"name": "John",
"age": 30
},
"doc": {
"age": 31
}
}
在这个示例中,由于文档test_index/test_type/1
不存在,upsert
中的内容会被当作新文档插入。插入后的文档内容为{"name": "John", "age": 30}
。
文档存在时
假设已有文档test_index/test_type/1
,内容为{"name": "John", "age": 30}
。再次执行上述更新操作:
POST test_index/test_type/1/_update
{
"upsert": {
"name": "John",
"age": 30
},
"doc": {
"age": 31
}
}
此时文档存在,doc
部分的内容会被用于更新现有文档,更新后的文档内容为{"name": "John", "age": 31}
,而upsert
部分在此情况下不会生效。