这篇文章主要介绍“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更新文档”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!
原创文章,作者:506227337,如若转载,请注明出处:https://blog.ytso.com/225654.html