elasticsearch修改数据

2年前 (2022) 程序员胖胖胖虎阿
127 0 0

上篇文档向读者介绍了Elasticsearch提供的强大的REST API的基本用法,不过这些API的用法都很基础,本文将和读者继续分享更多的API。

本文是Elasticsearch系列的第三篇,阅读前面的文章,有助于更好的理解本文:


1.elasticsearch安装与配置
2.初识elasticsearch中的REST接口


Elasticsearch提供了近乎实时(NRT)的数据操作和搜索功能。默认情况下,对数据进行索引/更新/删除,到该数据出现在搜索结果中,延迟时间不超过1秒,这是和其他SQL一个很大的区别。

索引/替换文档

在前文我们提到过,通过如下命令可以建立一个索引:

  
  
  
  1. curl -X PUT "localhost:9200/customer/_doc/1?pretty" -H 'Content-Type: application/json' -d'

  2. {

  3.  "name": "John Doe"

  4. }

  5. '

执行结果如下:

elasticsearch修改数据

上面这个命令,会将 {"name":"John Doe"}文档索引到customer索引、_doc类型中。如果对一个不同(或者相同)的文档使用如上命令,Elasticsearch则会使用一个新的文档来重新索引ID为1的那个文档,例如,再次执行上面这个命令,结果如下:

elasticsearch修改数据

可以看到,响应结果中, _id依然为1,但是 _version为2, result也变为 updated了。这是文档内容相同的情况,文档内容要是不同的话,则会更新ID为1的文档,如下:

elasticsearch修改数据

此时会将ID为1的文档更新,结果如上图。
在创建索引时,ID参数并不是必须的,也可以不指定ID,此时会自动生成一个ID,例如如下请求:

  
  
  
  1. curl -X POST "localhost:9200/customer/_doc?pretty" -H 'Content-Type: application/json' -d'

  2. {

  3.  "name": "Jane Doe"

  4. }

  5. '

执行结果如下:

elasticsearch修改数据

可以看到,此时自动生成了ID。

注意,最后一个是POST请求,而前面的都是PUT请求

更新文档

除了可以索引、替换文档之外,也可以更新一个文档。需要注意的是,Elasticsearch底层并不支持更新操作,所谓的更新,是将旧的文档删除,然后索引一个新的文档。如下:

  
  
  
  1. curl -X POST "localhost:9200/customer/_doc/1/_update?pretty" -H 'Content-Type: application/json' -d'

  2. {

  3.  "doc": { "name": "Jane Doe" }

  4. }

  5. '

这个请求,表示对ID为1的文档内容进行修改,结果如下:

elasticsearch修改数据

还可以在修改字段的同时,再添加上新的字段,如下:

  
  
  
  1. curl -X POST "localhost:9200/customer/_doc/1/_update?pretty" -H 'Content-Type: application/json' -d'

  2. {

  3.  "doc": { "name": "Jane Doe", "age": 20 }

  4. }

  5. '

elasticsearch修改数据

在更新文档时,也可以使用一些简单的脚本,例如给age增加5,请求如下:

  
  
  
  1. curl -X POST "localhost:9200/customer/_doc/1/_update?pretty" -H 'Content-Type: application/json' -d'

  2. {

  3.  "script" : "ctx._source.age += 5"

  4. }

  5. '

执行结果如下:

elasticsearch修改数据

在这个案例中, ctx._source指向当前被更新的文档。

这里介绍的只是更新文档的最基本的API,更多API,我将在未来的文章中继续向读者介绍。

删除文档

删除文档是一个相当直观的操作,如下请求表示删除ID为1的文档:

  
  
  
  1. curl -X DELETE "localhost:9200/customer/_doc/1?pretty"

该请求执行结果如下:

elasticsearch修改数据

这里介绍的只是删除文档的最基本的API,更多API,我将在未来的文章中继续向读者介绍。

批处理

除了对单个的文档进行索引、更新和删除,Elasticsearch也提供了相关操作的批处理功能,这些批处理功能通过使用_bulk API实现。通过批处理可以非常高效的完成多个文档的操作,同时可以减少不必要的网络请求。

如下案例表示索引两个文档:

  
  
  
  1. curl -X POST "localhost:9200/customer/_doc/_bulk?pretty" -H 'Content-Type: application/json' -d'

  2. {"index":{"_id":"1"}}

  3. {"name": "John Doe" }

  4. {"index":{"_id":"2"}}

  5. {"name": "Jane Doe" }

  6. '

执行结果如下:

elasticsearch修改数据

如下案例,表示更新id为1的索引,然后然后删除id为2的索引:

  
  
  
  1. curl -X POST "localhost:9200/customer/_doc/_bulk?pretty" -H 'Content-Type: application/json' -d'

  2. {"update":{"_id":"1"}}

  3. {"doc": { "name": "John Doe becomes Jane Doe" } }

  4. {"delete":{"_id":"2"}}

  5. '

执行结果如下:

elasticsearch修改数据

注意,delete动作,由于删除只需要被删除文档的ID,所以并没有对应的源文档。
bulk API按顺序执行这些操作。如果其中一个操作因为某些原因失败了,它将会继续处理后面的操作。当bulk API返回时,它将提供每个操作的状态(按照同样的顺序),所以开发者能够看到每个操作成功与否。

好了,本文先介绍到这里,有问题欢迎留言讨论。


往期精彩回顾

Redis教程
SpringCloud教程
Git教程
MongoDB教程
SpringBoot+Vue前后端分离开源项目-微人事
SpringBoot+Vue前后端分离开源项目-V部落

elasticsearch修改数据

本文分享自微信公众号 - 江南一点雨(a_javaboy)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

版权声明:程序员胖胖胖虎阿 发表于 2022年9月20日 上午12:00。
转载请注明:elasticsearch修改数据 | 胖虎的工具箱-编程导航

相关文章

暂无评论

暂无评论...