Elasticsearch5入门(5)插入/替换/更新 数据

Elasticsearch提供数据操作和搜索功能在近实时的。默认情况下,从索引/更新/删除数据到显示在搜索结果中的时间的1大约有秒延迟(刷新间隔)。这是与SQL等其他平台的一个重要区别,**其中在完成事务之后数据立即可用。**这句话不会翻译(跳过)。

插入和替换document

我们以前看过我们如何索引一个文档。让我们再次回想一下:

PUT customer/external/1?pretty
{
  "name": "xiaoli",
  "age": 19
}

同样,上面将指定的文档插入到customer index(external type)中,ID为1。如果我们再次使用不同的(或相同的)文档执行上述命令,Elasticsearch将替换(即重新索引)一个新的document现有的ID为1的顶部:

PUT customer/external/1?pretty
{
  "name": "xiaoli",
  "age": 20
}

以上将ID为1的文档的age从19更改为20。另外,如果我们使用不同的ID,则新的document将被索引,并且已经在索引中的现有文档保持不变。

PUT customer/external/2?pretty
{
  "name": "xiaoli",
  "age": 52
}

以上索引一个ID为2的新文档。

索引时,ID部分是可选的。如果未指定,Elasticsearch将生成随机ID

此示例显示如何索引没有显式ID的文档:

POST customer/external?pretty
{
  "name": "xiaoguo",
  "age": 52
}

请注意,在上述情况下,我们使用POST而不是PUT,因为我们没有指定ID。

注意: 这里说一下替换和更新的区别,如当前的doc为:

{
  "name": "Jeki Li",
  "age": 18
}

如果替换文档为

{
  "age": 19
}

则,执行后查出的数据为

{
  "age": 19
}

name字段消失了!下面讲更新

更新文档(updating document)

除了可以索引和替换文档之外,我们还可以更新文档。请注意,Elasticsearch在底层并没有进行更新。每当我们进行更新时,Elasticsearch将删除旧的文档,然后对需要更新的文档进行索引。

此示例显示如何通过将名称字段更改为“Jane Doe”来更新我们以前的文档(ID为1):

POST /customer/external/1/_update?pretty
{
  "doc": { "name": "Jane Doe" }
}

我们更新id为1的文档的年龄为52,可以这样操作

POST customer/external/1/_update?pretty
{
  "doc": {"age": 52}
}

也可以使用简单的脚本来执行更新。此示例使用脚本将年龄增加5:

POST customer/external/1/_update?pretty
{
  "script" : "ctx._source.age += 5"
}

在上面的示例中,ctx._source引用了即将更新的当前源文档。

请注意,目前只能在单个文档上一次执行更新。在将来,Elasticsearch可能会提供更新多个文档的能力,具有查询条件(如SQL UPDATE-WHERE语句)。

删除文档(Deleting Documents)

删除文档是相当简单的。此示例显示如何删除我们之前的ID为2的客户:

DELETE customer/external/1?pretty

请参阅删除按查询API删除与特定查询匹配的所有文档。值得注意的是,删除整个索引而不是使用“按查询删除”API删除所有文档效率更高。

批处理 (Batch Processing)

除了能够索引,更新和删除单个文档之外,Elasticsearch还提供了使用_bulk API批量执行上述任何操作的功能。这个功能很重要,因为它提供了一个非常有效的机制来尽可能快地进行多个操作,尽可能少的网络往返行程。

作为一个快速示例,以下调用 一个批量操作两个文档(ID 1 - John Doe和ID 2 - Jane Doe)

POST customer/external/_bulk?pretty
{"index":{"_id":"1"}}
{"name": "xiaowang","age":18}
{"index":{"_id":"2"}}
{"name": "xiaoqiang","age":"22" }

此示例更新第一个文档(ID为1),然后在一个批量操作中删除第二个文档(ID为2):

POST customer/external/_bulk?pretty
{"update":{"_id":1}}
{"doc":{"name":"dongfangbubai"}}
{"delete":{"_id":2}}

注意,对于删除操作,没有相应的文档,因为删除只需要要删除的文档的ID。

由于其中一个操作失败,Bulk API不会失败。如果一个动作由于任何原因而失败,它将继续处理其后的其余动作。当批量API返回时,它将为每个操作提供一个状态(按照发送的相同顺序),以便您可以检查特定操作是否失败。

转载于:https://my.oschina.net/shibuyisha/blog/968290

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值