这篇文章主要介绍“elasticsearch中怎么使用update更新文档”,在日常操作中,相信很多人在elasticsearch中怎么使用update更新文档问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”elasticsearch中怎么使用update更新文档”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
如果数据不存在,会自动创建
rst, _ := client.Index().Index("user").BodyJson(&User{Name: "hnatao", Age: 20}).Do(ctx)
buf, _ := json.Marshal(rst)
fmt.Println(string(buf))
返回
{
"_index": "user",
"_type": "_doc",
"_id": "iL1nWHQBIsMSghaJZ0p9",
"_version": 1,
"result": "created",
"_shards": { "total": 4, "successful": 1, "failed": 0 },
"_primary_term": 1
}
指定 _id = "1"
rst, _ := client.Index().Index("user").Id("1").BodyJson(&User{Name: "lqt", Age: 22}).Do(ctx)
buf, _ := json.Marshal(rst)
fmt.Println(string(buf))
返回
{
"_index": "user",
"_type": "_doc",
"_id": "1",
"_version": 1,
"result": "created",
"_shards": { "total": 4, "successful": 1, "failed": 0 },
"_seq_no": 1,
"_primary_term": 1
}
_id = "1"
已经存在,修改年龄,该操作会导致其他字段为空,因为该操作属于覆盖操作
rst, _ := client.Index().Index("user").Id("1").BodyJson(&User{Age: 23}).Do(ctx)
buf, _ := json.Marshal(rst)
fmt.Println(string(buf))
返回
{
"_index": "user",
"_type": "_doc",
"_id": "1",
"_version": 2,
"result": "updated",
"_shards": { "total": 4, "successful": 1, "failed": 0 },
"_seq_no": 2,
"_primary_term": 1
}
_update
更新文档使用map[string]interface{}
更新字段
rst, _ := client.Update().Index("user").Id("1").Doc(map[string]interface{}{"age":25}).Do(ctx)
buf, _ := json.Marshal(rst)
fmt.Println(string(buf))
返回
{
"_index": "user",
"_type": "_doc",
"_id": "1",
"_version": 7,
"result": "updated",
"_shards": { "total": 4, "successful": 1, "failed": 0 },
"_seq_no": 7,
"_primary_term": 1
}
_update_by_query
更新文档q := elastic.NewMatchQuery("_id", "1")
sc := elastic.NewScript("ctx._source.age=21")
rst, _ := client.UpdateByQuery("user").Query(q).Script(sc).Do(ctx)
buf, _ := json.Marshal(rst)
fmt.Println(string(buf))
返回
{
"took": 5,
"timed_out": false,
"total": 1,
"updated": 1,
"deleted": 0,
"batches": 1,
"version_conflicts": 0,
"noops": 0,
"retries": { "bulk": 0, "search": 0 },
"throttled": "",
"throttled_millis": 0,
"requests_per_second": -1,
"throttled_until": "",
"throttled_until_millis": 0,
"failures": []
}
_bulk
批量添加文档bulkReq1 := elastic.NewBulkIndexRequest().Id("2").Doc(&User{Name: "张三", Age: 21})
bulkReq2 := elastic.NewBulkIndexRequest().Id("3").Doc(&User{Name: "李四", Age: 22})
rst, _ := client.Bulk().Index("user").Add(bulkReq1, bulkReq2).Do(ctx)
buf, _ := json.Marshal(rst)
fmt.Println(string(buf))
返回
{
"took": 3,
"items": [
{
"index": {
"_index": "user",
"_type": "_doc",
"_id": "2",
"_version": 1,
"result": "created",
"_shards": { "total": 4, "successful": 1, "failed": 0 },
"_seq_no": 19,
"_primary_term": 1,
"status": 201
}
},
{
"index": {
"_index": "user",
"_type": "_doc",
"_id": "3",
"_version": 1,
"result": "created",
"_shards": { "total": 4, "successful": 1, "failed": 0 },
"_seq_no": 20,
"_primary_term": 1,
"status": 201
}
}
]
}
_bulk
批量更新文档bulkReq1 := elastic.NewBulkUpdateRequest().Index("user").Id("2").Doc(map[string]interface{}{"age": 31})
bulkReq2 := elastic.NewBulkUpdateRequest().Index("user").Id("3").Doc(map[string]interface{}{"age": 31})
rst, _ := client.Bulk().Add(bulkReq1, bulkReq2).Do(ctx)
buf, _ := json.Marshal(rst)
fmt.Println(string(buf))
返回
{
"took": 7,
"items": [
{
"update": {
"_index": "user",
"_type": "_doc",
"_id": "2",
"_version": 2,
"result": "updated",
"_shards": { "total": 4, "successful": 1, "failed": 0 },
"_seq_no": 21,
"_primary_term": 1,
"status": 200
}
},
{
"update": {
"_index": "user",
"_type": "_doc",
"_id": "3",
"_version": 2,
"result": "updated",
"_shards": { "total": 4, "successful": 1, "failed": 0 },
"_seq_no": 22,
"_primary_term": 1,
"status": 200
}
}
]
}
_bulk
批量删除文档bulkReq1 := elastic.NewBulkDeleteRequest().Index("user").Id("2")
bulkReq2 := elastic.NewBulkDeleteRequest().Index("user").Id("3")
rst, _ := client.Bulk().Add(bulkReq1, bulkReq2).Do(ctx)
buf, _ := json.Marshal(rst)
fmt.Println(string(buf))
返回
{
"took": 130,
"items": [
{
"delete": {
"_index": "user",
"_type": "_doc",
"_id": "2",
"_version": 3,
"result": "deleted",
"_shards": { "total": 4, "successful": 1, "failed": 0 },
"_seq_no": 23,
"_primary_term": 1,
"status": 200
}
},
{
"delete": {
"_index": "user",
"_type": "_doc",
"_id": "3",
"_version": 3,
"result": "deleted",
"_shards": { "total": 4, "successful": 1, "failed": 0 },
"_seq_no": 24,
"_primary_term": 1,
"status": 200
}
}
]
}
_id
升序排序,取前 2 个数据rst, _ := client.Search().Index("user").Sort("_id", false).Size(2).From(0).Do(ctx)
buf, _ := json.Marshal(rst)
fmt.Println(string(buf))
返回
{
"took": 439,
"hits": {
"total": { "value": 8, "relation": "eq" },
"hits": [
{
"_index": "user",
"_type": "_doc",
"_id": "5",
"_seq_no": null,
"_primary_term": null,
"sort": ["1"],
"_source": { "name": "lqt", "age": 21 }
},
{
"_index": "user",
"_type": "_doc",
"_id": "4",
"_seq_no": null,
"_primary_term": null,
"sort": ["2"],
"_source": { "name": "张三", "age": 21 }
}
]
},
"_shards": { "total": 1, "succeful": 1, "failed": 0 }
}
年龄降序,_id
升序,前 5 条数据
rst, _ := client.Search().Index("user").SortBy(elastic.NewFieldSort("age").Desc(), elastic.NewFieldSort("_id").Asc()).Size(5).From(0).Do(ctx)
buf, _ := json.Marshal(rst)
fmt.Println(string(buf))
返回
{
"hits": {
"total": { "value": 8, "relation": "eq" },
"hits": [
{
"_index": "user",
"_type": "_doc",
"_id": "5",
"_seq_no": null,
"_primary_term": null,
"sort": [24, "5"],
"_source": { "name": "张学友", "age": 24 }
},
{
"_index": "user",
"_type": "_doc",
"_id": "4",
"_seq_no": null,
"_primary_term": null,
"sort": [23, "4"],
"_source": { "name": "刘德华", "age": 23 }
},
{
"_index": "user",
"_type": "_doc",
"_id": "3",
"_seq_no": null,
"_primary_term": null,
"sort": [22, "3"],
"_source": { "name": "李四", "age": 22 }
},
{
"_index": "user",
"_type": "_doc",
"_id": "1",
"_seq_no": null,
"_primary_term": null,
"sort": [21, "1"],
"_source": { "name": "lqt", "age": 21 }
},
{
"_index": "user",
"_type": "_doc",
"_id": "2",
"_seq_no": null,
"_primary_term": null,
"sort": [21, "2"],
"_source": { "name": "张三", "age": 21 }
}
]
},
"_shards": { "total": 1, "successful": 1, "failed": 0 }
}
rst, _ := client.Search().Index("user").FilterPath("hits.hits._id", "hits.hits._source.name").Do(ctx)
buf, _ := json.Marshal(rst)
fmt.Println(string(buf))
返回
{
"hits": {
"hits": [
{
"_id": "1",
"_seq_no": null,
"_primary_term": null,
"_source": { "name": "lqt" }
},
{
"_id": "2",
"_seq_no": null,
"_primary_term": null,
"_source": { "name": "张三" }
},
{
"_id": "3",
"_seq_no": null,
"_primary_term": null,
"_source": { "name": "李四" }
},
{
"_id": "4",
"_seq_no": null,
"_primary_term": null,
"_source": { "name": "刘德华" }
},
{
"_id": "5",
"_seq_no": null,
"_primary_term": null,
"_source": { "name": "张学友" }
}
]
}
}
_id
查询数据rst, _ := client.Get().Index("user").Id("1").Do(ctx)
buf, _ := json.Marshal(rst)
fmt.Println(string(buf))
返回
{
"_index": "user",
"_type": "_doc",
"_id": "1",
"_uid": "",
"_routing": "",
"_parent": "",
"_version": 5,
"_seq_no": 5,
"_primary_term": 1,
"_source": { "name": "", "age": 23 },
"found": true
}
到此,关于“elasticsearch中怎么使用update更新文档”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:https://my.oschina.net/qiongtaoli/blog/4546852