前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >elasticsearch修改数据

elasticsearch修改数据

作者头像
江南一点雨
发布2018-11-08 16:02:38
2.1K0
发布2018-11-08 16:02:38
举报
文章被收录于专栏:玩转JavaEE玩转JavaEE

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

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


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


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

索引/替换文档

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

curl -X PUT "localhost:9200/customer/_doc/1?pretty" -H 'Content-Type: application/json' -d'
{
  "name": "John Doe"
}
'

执行结果如下:

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

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

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

curl -X POST "localhost:9200/customer/_doc?pretty" -H 'Content-Type: application/json' -d'
{
  "name": "Jane Doe"
}
'

执行结果如下:

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

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

更新文档

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

curl -X POST "localhost:9200/customer/_doc/1/_update?pretty" -H 'Content-Type: application/json' -d'
{
  "doc": { "name": "Jane Doe" }
}
'

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

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

curl -X POST "localhost:9200/customer/_doc/1/_update?pretty" -H 'Content-Type: application/json' -d'
{
  "doc": { "name": "Jane Doe", "age": 20 }
}
'

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

curl -X POST "localhost:9200/customer/_doc/1/_update?pretty" -H 'Content-Type: application/json' -d'
{
  "script" : "ctx._source.age += 5"
}
'

执行结果如下:

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

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

删除文档

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

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

该请求执行结果如下:

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

批处理

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

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

curl -X POST "localhost:9200/customer/_doc/_bulk?pretty" -H 'Content-Type: application/json' -d'
{"index":{"_id":"1"}}
{"name": "John Doe" }
{"index":{"_id":"2"}}
{"name": "Jane Doe" }
'

执行结果如下:

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

curl -X POST "localhost:9200/customer/_doc/_bulk?pretty" -H 'Content-Type: application/json' -d'
{"update":{"_id":"1"}}
{"doc": { "name": "John Doe becomes Jane Doe" } }
{"delete":{"_id":"2"}}
'

执行结果如下:

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

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-10-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 江南一点雨 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 索引/替换文档
  • 更新文档
  • 删除文档
  • 批处理
相关产品与服务
Elasticsearch Service
腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档