Elasticsearch-删除数据

ES-删除数据

  • 删除单个文档或者一组文档。这样做的时候,ES只是将它们标记为删除,所以它们不会再出现于搜索结果中,稍后ES通过异步的方式将它们彻底的从索引中移出。
  • 删除整个索引。这是删除多组文档的特例。但是不同点在于这样做的性能更好。主要的工作就是移除和那个索引相关的所有文件,几乎是瞬间就能完成。
  • 关闭索引。关闭的索引不允许读取或写入操作,数据也不会加载到内存。这和删除ES数据类似,但是索引还是保留在磁盘上。它也很容易恢复,主要再次打开关闭的索引。

删除文档

(1).通过ID删除单个文档。如果只有一篇文档要删除,而且知道要删除的ID,这样做非常nice。
(2).在单个请求中删除多篇文档。如果有多篇文档需要删除,可以在一个批量请求中一次性删除它们,这样比每次只删除一篇文档更快。
(3).删除映射类型,包括其中的文档。这样的操作会高效地搜索并删除该类型中所索引的全部文档,也包括映射本身。
(4).删除匹配某个查询的所有文档。这和删除映射类型相似,内部运行一个查询,并识别需要删除的文档。只有在这里可以指定任何想要的查询,然后删除匹配的文档。

1删除单个文档

为了删除单一的文档,需要向其URL发送HTTP DELETE请求
curl -XDELETE 'localhost:9200/online-shop/shirts/1'
也可以使用版本来管理删除操作的并发,就像索引和更新的并发控制一样。如:假设某款衬衫销售一空,想移除这篇文档,这样就不会出现在搜索结果中。但是当时可能并不知道新的采购到货了,而且库存数据也已经被更新了。为了避免这种情况,可以再DELETE请求中加入版本参数,就像索引和更新的操作那样
curl -XDELETE 'localhost:9200/online-shop/shirts/1?version=4'
尽管如此,删除的版本控制还是有个特殊情况。一旦删除了文档,它就不复存在了,于是一个更新操作很容易重新创建该文档,尽管这是不应该发生的(因为更新的版本比删除的版本更低)。由于外部版本可以用于不存在的文档上,使用外部版本时这个问题尤为突出。
为了防止这样的问题发生,ES将在一段时间内保留这篇文档的版本,如此它就能拒绝版本比删除操作更低的更新操作了。默认情况下这个时间段是60秒,对于多数情况而言应该足以了,可以通过设置elasticsearch.yml文件中或者是每个索引配置中的index.gc_deletes来修改它。

2删除映射类型和删除查询匹配的文档

删除整个映射类型,包括映射本身和其中索引的全部文档。
curl -XDELETE 'localhost:9200/online-shop/shirts'
删除类型时需要注意的是,类型名称只是文档中的另一个字段。索引中的所有文档,无论它们属于哪个映射类型,都存放在同一个分片中。当发送前面的命令时,ES只能查询属于那个类型的文档,然后删除它们。删除类型通常要耗费更长的时间和更多的资源。
可以查询某个类型中所有的文档并删除它们,ES允许通过称为通过查询删除(delete by query)的API来指定自己的查询,查找想要删除的文档。使用这个API和运行查询类似,除了HTTP请求变温DELETE,而且_search变为了_query。
从音乐索引music中移除所有匹配”jay”的文档:
curl -XDELETE 'localhost:9200/music/_query?q=jay'

删除索引

为了删除一个索引,需要发送一个DELETE请求到该索引的URL:
curl -XDELETE 'localhost:9200/music/'
通过提供以逗号分隔的列表,还可以删除多个索引。如果将索引名称改为_all,甚至可以删除全部的索引。
提示:使用curl -XDELETE 'localhost:9200/_all'会删除所有的文档,为了预防这种情况的发生,可以设置elasticsearch.yml中的action.destructive_requires_name:true。这会使得ES在删除的时候拒绝_all参数,以及索引名称中的通配符。
删除索引是很快的,因为他基本上就是移除了和索引分片相关的文件。和删除单独的文档相比,删除文件系统中的文件更快。这样操作的时候,文件只是被标记为已删除。在分段进行合并时,他们才会被移除。这里的合并是指将多个Lucene小分段组合为一个更大分段的过程。

分段与合并

一个分段是建立索引的时候所创建的一块Lucene索引(ES的分片)。当索引新的文档时,其内容不会添加到分段的尾部,而只会创建新的分段。由于删除操作只是将文档标记为待删除,所以分段中的数据也从来不会被移除。最终,更新文档意味着重新索引,数据就永远不会被修改。
当ES在分片上进行查询的时候,Lucene需要查询它所有的分段,合并结果,然后将其返回--就像查询同一索引中多个分片的过程。就像分片那样,分段越多,搜索请求越慢。
日常的索引操作会产生很多这样的小片段。为了避免一个索引中存在过多的分段,Lucene定期将分段进行合并。
合并文档意味着读取它们的内容(除了被删除的文档),然后利用组合的内容创建信息、更大的分段。这个过程需要资源,尤其是CPU和磁盘的IO。合并操作是异步运行的,ES也允许配置相关的若干选项。

关闭索引

除了删除索引,还可以关闭它们。如果关闭了一个索引,就无法通过ES来读取和写入其中的数据,知道再次打开它。当使用应用日志这样的流式数据时,此操作非常有用。
当想永久的保存应用日志,以防要查看很久之前的信息。另一方面,在ES中存放大量数据需要增加资源。对于这种使用案例,关闭旧的索引非常有意义。可能并不需要那些数据,但是也不想删除它们。
关闭索引:
curl -XPOST 'localhost:9200/online-shop/_close'
为了再次打开
curl -XPOST 'localhost:9200/online-shop/_open'
一旦索引被关闭,它在ES内存中唯一的痕迹是其元数据,如名字以及分片的位置。如果有足够的磁盘空间,而且也不确定是否需要在那个数据中再次搜索,关闭索引要比删除索引更好。永远可以重新打开被关闭的索引,然后在其中再次搜索。

转载于:https://www.cnblogs.com/EnzoDin/p/11186210.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值