温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

elasticsearch中怎么使用update更新文档

发布时间:2021-12-16 10:04:29 来源:亿速云 阅读:306 作者:iii 栏目:大数据

这篇文章主要介绍“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 的数据

指定 _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更新文档”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI