4、Modifying Your Data(修改数据)

Elasticsearch 提供了近实时的操纵数据和搜索的能力。默认情况下,从索引/更新/删除数据到在搜索结果中显示数据会有 1 秒的延迟(刷新间隔)。这是与其他平台(如SQL) 的一个重要区别,在SQL中,数据在事务完成后立即可用。

4.1 Indexing/Replacing Documents(索引/替换 文档)

我们先前见过如何索引单个文档。让我们再次调用该命令 :

PUT /customer/_doc/1?pretty
{
  "name": "John Doe"
}

同样,上面将指定的文档索引到customer索引中,且该文档的ID为1。如果我们再使用不同(或相同)的文档执行上述命令,ElasticSearch将在现有文档的基础上替换(即重新索引)一个ID为1的新文档:

PUT /customer/_doc/1?pretty
{
  "name": "Jane Doe"
}

上面将 ID 为 1 的文档的name“John Doe”改成“Jane Doe”。如果使用的是不同的 ID,那么将为新文档编制索引,并且索引中已有的文档将保持不变。

PUT /customer/_doc/2?pretty
{
  "name": "Jane Doe"
}

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

在索引时,ID 是可选的。如果没有指定id,Elasticsearch 将生成一个随机 ID,然后使用它去索引文档。ElasticSearch生成的实际ID(或在前面的示例中显式指定的任何内容)作为索引API调用的一部分返回。

该例子演示了在没有明确的 ID 的情况下如何去索引一个文档 :

POST /customer/_doc?pretty
{
  "name": "Jane Doe"
}

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

4.2 Updating Documents(更新文档)

除了可以索引和替换文档之外,我们也可以更新文档。不过,请注意Elasticsearch实际上并不是对指定的文档进行更新。每当我们做一次更新,Elasticsearch都会删除旧文档,然后索引一个新文档,并一次性对其应用更新。

下例演示了将name字段更改为“Jane Doe”来更新ID为1的旧文档:

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

下例演示了将name字段更改为“Jane Doe”来更新ID为1的旧文档,并同时向其添加age字段:

POST /customer/_update/1?pretty
{
  "doc": { "name": "Jane Doe", "age": 20 }
}

也可以使用简单的scripts(脚本)来执行更新。下例演示了使用scripts来将 age增加 5 :

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

在上面的例子中,ctx._source 代表当前将被更新的源文档。

Elasticsearch提供了在给定查询条件(如SQL UPDATE-WHERE语句)下更新多个文档的功能。请参阅docs-update-by-query API

4.3 Deleting Documents(删除文档)

删除文档是很简单的,下例演示了如何删除ID 为 2 的 customer(的文档)。

DELETE /customer/_doc/2?pretty

请看 Delete By Query API 以删除指定查询匹配到的所有文档。

值得注意的是,直接删除整个索引比使用Delete By Query API更有效。

4.4 Batch Processing(批处理)

除了可以索引,更新,和删除单个文档之外,Elasticsearch 还提供了使用 _bulk API 来执行上面任何操作的批量方式的能力。这个功能是非常重要,它提供了一种非常有效的机制,可以尽可能减少网络返回且尽可能快的执行多个操作。

举一个简单的例子,在下面一个批量操作中索引了两个文档(ID 1 - John Doe 和 ID 2 - Jane Doe):

POST /customer/_bulk?pretty
{"index":{"_id":"1"}}
{"name": "John Doe" }
{"index":{"_id":"2"}}
{"name": "Jane Doe" }

下例使用一个批量操作更新了第一个文档(ID 为 1),删除了第二个文档(ID 为 2) :

POST /customer/_bulk?pretty
{"update":{"_id":"1"}}
{"doc": { "name": "John Doe becomes Jane Doe" } }
{"delete":{"_id":"2"}}

请注意上面的删除操作,在它后面没有相关的源文档,因为删除操作只需要根据文档的 ID 来删除。

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

elasticsearch6.7 01.入门指南(3)的更多相关文章

  1. elasticsearch6.7 01.入门指南(2)

    2.安装(略) 默认情况下,elasticsearch 使用端口 9200 来访问它的 REST API.如果有必要,该端口也可以配置 3.探索集群 3.1 The REST API 既然我们已经启动 ...

  2. elasticsearch6.7 01.入门指南(4)

    5.Exploring Your Data(探索数据) Sample Dataset(样本数据集) 现在我们已经学会了基础知识,让我们尝试在更真实的数据集上操作.我准备了一份顾客银行账户信息的虚构的 ...

  3. elasticsearch6.7 01.入门指南(1)

    Elasticsearch 是一个高度可扩展且开源的全文检索和分析引擎.它可以让您快速.近实时地存储.检索以及分析海量数据.它通常用作那些具有复杂搜索功能和需求的应用的底层引擎或者技术. 下面是 El ...

  4. 现代OpenGL教程 01 - 入门指南

    原文链接传送门 译序 早前学OpenGL的时候还是1.x版本,用的都是glVertex,glNormal等固定管线API.后来工作需要接触DirectX9,shader也只是可选项而已,跟固定管线一起 ...

  5. AngularJS快速入门指南01:导言

    AngularJS使用新的attributes扩展了HTML AngularJS对单页面应用的支持非常好(SPAs) AngularJS非常容易学习 现在就开始学习AngularJS吧! 关于本指南 ...

  6. AngularJS快速入门指南02:介绍

    AngularJS是一个JavaScript框架.它可以通过<script>标记被添加到HTML页面中. AngularJS通过指令对HTML属性进行了扩展,然后通过表达式将数据绑定到HT ...

  7. 《Gulp 入门指南》 : 使用 gulp 压缩 JS

    <Gulp 入门指南> : 使用 gulp 压缩 JS 请务必理解如下章节后阅读此章节: 安装 Node 和 gulp 访问论坛获取帮助 压缩 js 代码可降低 js 文件大小,提高页面打 ...

  8. RequireJS 入门指南

    RequireJS 入门指南 http://requirejs.org/ 简介如今最常用的JavaScript库之一是RequireJS.最近我参与的每个项目,都用到了RequireJS,或者是我向它 ...

  9. 《KAFKA官方文档》入门指南(转)

    1.入门指南 1.1简介 Apache的Kafka™是一个分布式流平台(a distributed streaming platform).这到底意味着什么? 我们认为,一个流处理平台应该具有三个关键 ...

随机推荐

  1. DL_1_week2_神经网络基础

    二分类问题 在二分分类问题中,目标是训练出一个分类器,这里以图片特征向量x作为输入,预测输出的结果标签y是1还是0,也就是预测图片中是否有猫.          计算机保存一张图片(彩色),要保存三个 ...

  2. AddTransient,AddScope和AddSingleton 有什么不同?

    我们先来创建几个接口using System; namespace DependencyInjectionSample.Interfaces{ public interface IOperation ...

  3. WebService接口定义及调用

    Web service是一个平台独立的,松耦合的,自包含的.基于可编程的web的应用程序,可使用开放的XML标准来描述.发布.发现.协调和配置这些应用程序,用于开发分布式的互操作的应用程序. WebS ...

  4. java visualVM(jconsole)远程监控服务器java进程

    1. JMX方式(jconsole也可通过此方式进行连接) jmx方式能监控到CPU信息,但无法使用visualVM的visualVM GC插件    jmx无密码方式 监控普通的java进程 . 设 ...

  5. dwr学习(一):简单dwr实例

    博客分类:  dwr   最近写ajax写烦了,想着能不能有个更简单的“ajax”,一问就问到这个dwr了.赶紧去官网学习了下,这里写个博客记录一下实例. 测试环境:tomcat6.0 1.新建一个w ...

  6. 第二篇:服务消费者(RestTemplate+ribbon)

    第一篇讲了服务的注册,这篇来说说服务的调用,服务与服务的通讯是基于http restful,springcloud的服务调用是通过ribbon方式的,客户端的负载均衡. Talk is cheap.S ...

  7. 初涉Java方法

    初涉Java方法 方法就是一段可重复调用的代码段,方法命名规范,第一个单词小写,从第二个单词开始首字母均大写.         格式:              public static 返回值类型 ...

  8. Win10手记-取色器ColorPicker的实现

    最近个人项目需要用到ColorPicker,但是适用于WinRT和Win10的基本没用,所以只能自己造轮子了. 平台环境 Windows 10 Visual Studio 2015 思路 确定需求后, ...

  9. 2019年2月编程语言最新排行:java稳居第一(java优势在哪里)

      近日TIOBE公布了2月编程语言排名,在意料之中java稳居第一,C和C++分别位居第二第三名. 下图是2 月编程语言排行榜 TOP20 榜单以及前 10 名编程语言长期走势图:         ...

  10. 网络IP地址

    IP地址分类 A类网络的IP地址范围为1.0.0.1-127.255.255.254: B类网络的IP地址范围为:128.1.0.1-191.255.255.254: C类网络的IP地址范围为:192 ...