ElasticSearch —修改ES数据

标签: | 发表时间:2021-05-17 16:52 | 作者:
出处:http://ghoulich.xninja.org

ElasticSearch能够以接近实时的速度提供数据操作和搜索功能。在默认情况下,从索引/更新/删除数据到出现在搜索结果之间,你可能会感受到有1秒的延迟时间(刷新间隔)。这是与SQL等其他平台的一个重要区别,这些平台在完成事务之后,它们的数据立即可用。

索引/替换文档

先前,我们已经知道如何索引一个单个的文档。我们可以再次回忆这个命令:

      
  1. PUT/customer/external/1?pretty
  2. {
  3. "name":"John Doe"
  4. }

同样,上述命令会将指定的文档索引至 customer索引的“external”类型之中,它的ID是1。如果我们再次执行上述命令,但是使用不同的(或相同的)文档,那么ElasticSearch会将ID为1的已有文档替换(重新索引)为一个新的文档。

      
  1. PUT/customer/external/1?pretty
  2. {
  3. "name":"Jane Doe"
  4. }

上述命令会修改ID为1的文档的name字段,从“John Doe”修改为“Jane Doe”。另一方面,如果我们使用一个不同的ID,那么就会索引一个新的文档,并且索引中已有的文档会保持不变。

      
  1. PUT/customer/external/2?pretty
  2. {
  3. "name":"Jane Doe"
  4. }

上述命令会索引一个新的文档,它的ID为2。

当进行索引时,ID部分是可选的。如果没有指定,那么ElasticSearch将会生成一个随机的ID,然后用其索引文档。ElasticSearch生成的(或者我们在先前示例中明确指定的)真实ID是调用索引API的返回信息的一部分。

以下示例演示如何在没有显式ID的情况下对文档进行索引:

      
  1. POST/customer/external?pretty
  2. {
  3. "name":"Jane Doe"
  4. }

注意,在上面的例子中,我们使用的是 POST命令,而不是 PUT命令,因为我们没有指定任何ID。

更新文档

除了能够索引和替换文档之外,我们还可以更新文档。需要注意的是,ElasticSearch实际上在底层并没有立即执行更新操作。每当我们执行一次更新操作时,ElasticSearch就会删除旧的文档,然后索引一个新的文档,所有的更新内容都包含在这个新文档之中。

以下示例演示如何更新我们先前索引的文档(ID为1),将name字段修改为“Jane Doe”:

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

以下示例演示如何更新我们先前索引的文档(ID为1),将name字段修改为“Jane Doe”,同时添加一个新的age字段:

      
  1. POST/customer/external/1/_update?pretty
  2. {
  3. "doc":{"name":"Jane Doe","age":20}
  4. }

你还可以使用简单脚本来执行更新操作。以下示例会使用一个脚本,将age字段增加5:

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

在上述示例中, ctx._source指的就是即将更新的当前源文档。

ElasticSearch还可以通过给定的查询条件更新多个文档(类似于SQL的 UPDATE-WHERE语句)。请参考 更新查询API

删除文档

删除文档是非常简单的。以下示例演示如何删除我们先前索引的ID为2的客户文档:

      
  1. DELETE/customer/external/2?pretty

请参考 删除查询API,这样便能通过特定的查询删除所有匹配的文档。值得一提的是,删除一个完整的索引,相比起通过删除查询API来删除所有文档,效率要高得多。

批量处理

除了能够索引、更新和删除单个文档之外,ElasticSearch还提供了批量执行上述操作的功能,也就是名为<a href="https://www.elastic.co/guide/en/elasticsearch/reference/5.6/docs-bulk.html" title=" _bulk“> _bulk的API命令。这个功能非常重要,因为它能够提供一种非常高效的机制,可以尽量快地完成多个操作,同时尽量少地耗费网络往返的开销。

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

      
  1. POST/customer/external/_bulk?pretty
  2. {"index":{"_id":"1"}}
  3. {"name":"John Doe"}
  4. {"index":{"_id":"2"}}
  5. {"name":"Jane Doe"}

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

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

注意,对于删除操作,在它之后没有相应的源文档,因为删除操作只需要待删除文档的ID就可以了。

批量操作的API命令不会由于其中某个动作失败而执行失败。如果某个动作由于某种原因而执行失败,API将继续处理后面的剩余动作。当批量操作的API命令返回时,它会显示每个操作的执行结果(和动作的发送顺序相同),这样你便能检查某个特定操作是否执行失败。

相关 [elasticsearch es 数据] 推荐:

ElasticSearch —修改ES数据

- -
ElasticSearch能够以接近实时的速度提供数据操作和搜索功能. 在默认情况下,从索引/更新/删除数据到出现在搜索结果之间,你可能会感受到有1秒的延迟时间(刷新间隔). 这是与SQL等其他平台的一个重要区别,这些平台在完成事务之后,它们的数据立即可用. 先前,我们已经知道如何索引一个单个的文档.

ES事务日志的持久化变更 | Elasticsearch: 权威指南 | Elastic

- -
translog 也被用来提供实时 CRUD. 当你试着通过ID查询、更新、删除一个文档,它会在尝试从相应的段中检索之前, 首先检查 translog 任何最近的变更. 这意味着它总是能够实时地获取到文档的最新版本. 如果没有用  fsync 把数据从文件系统缓存刷(flush)到硬盘,我们不能保证数据在断电甚至是程序正常退出之后依然存在.

Elasticsearch 数据备份、迁移

- - 枯惠
在时候我们面临将Elasticsearch的数据进行迁移亦或是数据备份的场景,此时我们可以使用 elasticsearch-dump这个工具来实现:. mappings从production环境复制到staging环境. 数据从production环境复制到staging. template数据导出导入.

ES数据插入和查询流程是怎么样的?

- -
ES集群的状态有哪些,为什么主分片数目是固定的,副本分片却能动态调节,快看看这些关于ES的问题你都知道吗?. green 最健康的状态,说明所有的分片包括备份都可用. yellow 基本的分片可用,但是备份不可用(或者是没有备份). red 部分的分片可用,表明分片有一部分损坏. 此时执行查询部分数据仍然可以查到,遇到这种情况,还是赶快解决比较好.

用Flink SQL CDC + ES实现数据实时化真香!

- -
本人目前参与的项目属于公司里面数据密集、计算密集的一个重要项目,需要提供高效且准确的 OLAP 服务,提供灵活且实时的报表. 业务数据存储在 MySQL 中,通过主从复制同步到报表库. 作为集团级公司,数据增长多而且快,出现了多个千万级、亿级的大表. 为了实现各个维度的各种复杂的报表业务,有些千万级大表仍然需要进行 Join,计算规模非常惊人,经常不能及时响应请求.

学会这个ES数据建模指南,还需要啥MySQL?

- -
我在做 Elasticsearch 相关咨询和培训过程中,发现大家普遍更关注实战中涉及的问题,下面我选取几个常见且典型的问题,和大家一起分析一下. 订单表、账单表父子文档可以实现类似 SQL 的左连接吗. 通过 canal 同步到 ES 中,能否实现类似左连接的效果. 一个人管理 1000  家连锁门店,如何更高效地查询自己管辖的商品类目.

通过HBase Observer同步数据到ElasticSearch

- - SegmentFault 最新的文章
Observer希望解决的问题. HBase是一个分布式的存储体系,数据按照RowKey分成不同的Region,再分配给RegionServer管理. 但是RegionServer只承担了存储的功能,如果Region能拥有一部分的计算能力,从而实现一个HBase框架上的MapReduce,那HBase的操作性能将进一步提升.

Elasticsearch、Kibana数据导出实战

- -
以下两个导出问题来自Elastic中文社区. 问题1、kibana怎么导出查询数据. 问题2:elasticsearch数据导出. 就像数据库数据导出一样,elasticsearch可以么. 或者找到它磁盘上存放数据的位置,拷贝出来,放到另一个es服务器上或者转成自己要的数据格式. 实际业务实战中,大家或多或少的都会遇到导入、导出问题.

es集群快速恢复(优化方案)_大数据_ClearloveXXX的博客-CSDN博客

- -
2、关闭allocate,禁止shard做allocate. 5、等级集群变成yellow后开启allocate,允许shard做allocate. 调整集群恢复时的带宽,-1是指无限制 . 调整集群恢复时的单机并发度,最好是和磁盘块数一致 . 调整集群恢复时单个shard中同时恢复的小文件的个数.

MySQL如何实时同步数据到ES?试试这款阿里开源的神器!

- - 掘金后端本月最热
SpringBoot实战电商项目mall(40k+star)地址:. mall项目中的商品搜索功能,一直都没有做实时数据同步. 最近发现阿里巴巴开源的 canal可以把MySQL中的数据实时同步到Elasticsearch中,能很好地解决数据同步问题. 今天我们来讲讲 canal的使用,希望对大家有所帮助.