美文网首页
【es】Elasticsearch索引数据查询、删除

【es】Elasticsearch索引数据查询、删除

作者: Bogon | 来源:发表于2024-06-19 15:22 被阅读0次

curl -X GET 'http://xx.xx.xx.xx:9200/test/_search?pretty'
curl -X GET "http://xx.xx.xx.xx:9200/test/_search?size=1&pretty"

{
  "took" : 147,
  "timed_out" : false,
  "_shards" : {
    "total" : 12,
    "successful" : 12,
    "failed" : 0
  },
  "hits" : {
    "total" : 56154711,
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "test",
        "_type" : "doc",
        "_id" : "5e24002cd08efd7e24854ef1",
        "_score" : 1.0,
        "_source" : {
          "senderName" : "Bogon",
          "filename" : "Wireshark网络分析的艺术.pdf",
          "fileSize" : 178455,
          "sender" : "e7c6d64e-071c-11ea-815f-005056a9ff9e",
          "person" : [
            "e7c6d64e-071c-11ea-815f-005056a9ff9e",
            "0060b6fb-b5e9-4764-a36d-e3be66276586"
          ],
          "groupId" : "e7c6d64e-071c-11ea-815f-005056a9ff9e",
          "id" : "5e24002cd08efd7e24854ef1",
          "fileExt" : "pdf",
          "fileId" : "5e24002c6997ec2479bf5a46",
          "sendTime" : "2020-01-19T15:07:24Z"
        }
      }
    ]
  }
}

curl_es_count.sh

#!/bin/bash

es_url="xx.xx.xx.xx:9200"
index_name="test"
gte_time="2020-01-01T00:00:00Z"
lte_time="2020-01-31T23:59:59Z"

curl -X GET "http://${es_url}/${index_name}/_count?pretty" \
  -H "Content-Type: application/json" \
  -d '{
    "query": {
        "bool": {
            "must": [{
                "range": {
                    "sendTime": {
                        "gte": "'"${gte_time}"'",
                        "lte": "'"${lte_time}"'"
                    }
                }
            }],
            "must_not": [],
            "should": []
        }
    }
}'

curl_es_delete.sh

#!/bin/bash

es_url="xx.xx.xx.xx:9200"
index_name="test"
gte_time="2020-01-01T00:00:00Z"
lte_time="2020-01-31T23:59:59Z"

curl -X POST "http://${es_url}/${index_name}/_delete_by_query?pretty" \
 -H "Content-Type: application/json" \
  -d '{
    "query": {
        "bool": {
            "must": [{
                "range": {
                    "sendTime": {
                        "gte": "'"${gte_time}"'",
                        "lte": "'"${lte_time}"'"
                    }
                }
            }],
            "must_not": [],
            "should": []
        }
    }
}'

通过 这个脚本删除索引中的数据会很慢吗?

删除操作的速度主要取决于以下几个因素:

  1. 数据量大小: 要删除的数据量越大,删除操作就越慢。如果 test 索引中包含大量数据,删除操作可能会比较耗时。

  2. Elasticsearch 集群性能: Elasticsearch 集群的性能也会影响删除操作的速度。如果集群负载高或者硬件配置较低,删除速度可能会变慢。

  3. 查询复杂性: 删除操作的速度还受到查询复杂性的影响。你的脚本中使用了时间范围查询 (range query),这通常比简单的全文档删除操作要慢一些,因为需要匹配和处理更多的文档。

  4. 网络延迟: 脚本中使用的 curl 命令会通过网络与 Elasticsearch 集群通信,网络延迟可能会影响操作速度。

综上所述,虽然可以通过你的脚本来删除数据,但具体速度如何取决于以上因素的综合影响。
如果你的环境中数据量不大、Elasticsearch 集群性能良好,并且网络连接稳定,删除操作可能会比较快速。
如果数据量很大或者集群负载高,删除操作可能会比较耗时,可能需要更长的时间来完成删除操作。

如果才能使得 curl -X POST "http://${es_url}/${index_name}/_delete_by_query?pretty 删除加速?

要加速使用 curl 发起的 _delete_by_query 删除操作,可以考虑以下几点优化:

  1. 减少删除的数据量: 如果可能的话,尽量减少一次删除的文档数量。可以通过更精确的查询条件来限制删除的文档数量,例如更窄的时间范围、更具体的条件等。

  2. 优化查询性能: 确保查询语句的效率尽可能高,避免不必要的复杂性。在你的脚本中,使用了时间范围查询,这通常是比较高效的。确保查询语句没有额外的无用条件或者不必要的逻辑。

  3. 索引优化: 如果索引的映射允许,可以考虑在删除操作之前进行索引优化。例如,确保索引映射的字段类型、分析器设置等能够提高查询性能和删除操作的效率。

  4. 分批处理: 如果数据量非常大,可以考虑分批进行删除操作。例如,按照时间范围分割成多个小的删除请求,每次删除一部分数据。

  5. 增加集群资源: 如果可能的话,增加 Elasticsearch 集群的资源,如节点数、分片数等,以提高删除操作的并发处理能力。

  6. 使用并行删除: 如果允许,可以考虑使用 Elasticsearch 的并行删除功能。在较新的版本中,Elasticsearch 支持在删除操作中使用 slices 参数来并行处理删除请求,可以更快地删除大量数据。

举例来说,如果你希望使用 slices 参数来并行删除,你可以修改你的 curl 请求,添加 slices 参数,例如:

curl -X POST "http://${es_url}/${index_name}/_delete_by_query?pretty&slices=5" \
 -H "Content-Type: application/json" \
 -d '{
    "query": {
        "bool": {
            "must": [{
                "range": {
                    "sendTime": {
                        "gte": "'"${gte_time}"'",
                        "lte": "'"${lte_time}"'"
                    }
                }
            }],
            "must_not": [],
            "should": []
        }
    }
}'

上面的例子中,slices=5 表示请求将被分为 5 个片段并行处理。

总之,通过优化查询、减少单次操作的文档数量、并行处理等方法,可以显著提高 _delete_by_query 删除操作的效率。

在 Elasticsearch 5 版本中,并没有内置支持 slices 参数来实现删除操作的并行处理。
这个功能是在较新的 Elasticsearch 版本中引入的,通常从 Elasticsearch 6.x 版本开始支持。
如果你的环境中使用的是 Elasticsearch 5 版本,那么就无法通过 slices 参数来并行处理 _delete_by_query 操作。

通过这个删除接口es中索引的数据,磁盘空间会立刻释放吗?

  curl -X POST "http://${es_url}/${index_name}/_delete_by_query?pretty"  

使用上述命令通过 Elasticsearch 的 _delete_by_query 接口删除索引数据后,并不会立即释放磁盘空间。
这是因为 Elasticsearch 在执行删除操作后,并不会立即将磁盘上对应的数据物理删除,而是通过后台的过程来标记这些数据为可回收状态。
这种策略是为了避免频繁的物理删除操作影响性能,同时保证系统的稳定性。

实际释放磁盘空间的时间取决于以下几个因素:

  1. Merge 过程:Elasticsearch 会定期进行 segment 的合并(merge),在这个过程中会删除标记为删除的数据,从而释放磁盘空间。

  2. 自动的过期删除:Elasticsearch 会根据其自身的过期策略(例如,过期时间)来自动删除旧数据,从而释放磁盘空间。

  3. 手动触发 Force Merge:如果你希望立即释放空间,可以手动触发 Force Merge 操作,这会强制 Elasticsearch 将标记为删除的数据物理删除并释放磁盘空间。但需要注意,频繁地执行 Force Merge 操作可能会影响性能。

因此,虽然数据被删除后,磁盘空间不会立即被释放,但在正常情况下,Elasticsearch 会在后续的维护过程中自动释放这些空间。

释放磁盘空间的时间取决于多个因素,包括 Elasticsearch 的配置、负载情况以及数据删除的方式。
通常情况下,以下几点可以影响释放磁盘空间的速度:

  1. Merge 过程的频率和策略:Elasticsearch 定期执行 segment 的合并(merge),在合并过程中会删除标记为删除的数据。如果你的索引比较活跃,merge 过程可能会更频繁,从而较快地释放空间。

  2. 自动过期策略:如果你的索引有设置 TTL(Time To Live)或者使用了基于时间的索引策略(例如通过索引别名实现),Elasticsearch 可能会根据这些策略自动删除旧数据,并释放相应的空间。

  3. 手动触发 Force Merge:如果你需要立即释放空间,可以手动触发 Force Merge 操作。这会强制 Elasticsearch 将标记为删除的数据物理删除并释放磁盘空间。但需要注意,频繁地执行 Force Merge 操作可能会影响性能。

  4. 硬盘空间的使用情况:Elasticsearch 也会根据当前硬盘空间的使用情况来调整自动释放空间的速度。当磁盘空间紧张时,可能会优先进行合并操作来释放空间。

总体来说,如果你没有手动触发 Force Merge 操作,通常情况下 Elasticsearch 会在一段时间内(可能是几分钟到几个小时,具体取决于上述因素)自动释放删除的数据所占用的磁盘空间。

如何手动触发 Force Merge,释放磁盘空间?

要手动触发 Force Merge 操作以释放磁盘空间,可以使用 Elasticsearch 的 _forcemerge API。这个操作会强制 Elasticsearch 合并索引中的段(segments),从而物理删除标记为删除的数据并释放磁盘空间。

以下是如何使用 curl 命令进行 Force Merge 操作的示例:

 curl -X POST "http://${es_url}/${index_name}/_forcemerge?max_num_segments=1&pretty"

在这个示例中:

  • ${es_url} 是你的 Elasticsearch 地址,比如 localhost:9200
  • ${index_name} 是你要执行 Force Merge 操作的索引名称。
  • max_num_segments=1 是可选参数,用于指定每个分片最终合并成的最大段数。合并的段数越少,释放空间的效果可能越明显,但同时合并过多段可能会影响性能,因此根据实际情况进行调整。

注意事项:

  • 执行 Force Merge 操作会消耗一定的系统资源和时间,特别是对于大型索引或高负载集群,建议在低负载时执行此操作。
  • 不要频繁地执行 Force Merge,过度使用可能会影响 Elasticsearch 的性能。

执行成功后,Elasticsearch 将尽力合并索引中的段,并且标记为删除的数据将被物理删除,从而释放磁盘空间。

相关文章

  • ES索引查询匹配,简单记录

    存入数据代码,以及es删除索引数据 从es里查询数据------单匹配查询

  • ES简单实用DSL查询

    ES版本信息 查看所有索引 查看字段类型 创建索引 删除索引 批量(_bulk)加载数据 查询数据 查询1000条...

  • 生成Es索引

    需求说明 elasticsearch索引问题,致使数据查询时不能根据一个索引完成。Es索引本来式在配置文件中读取,...

  • 五、JavaAPI

    1,新建Client 2,创建索引 3,更新索引 4,删除索引 5,查询 参考:elasticsearch官网Ja...

  • Elasticsearch SQL入门教程 --- 2022-0

    除了使用RESTful API查询Elasticsearch索引数据,也可以使用SQL语句查询索引数据,相信大部分...

  • PHP+kibana+es用法

    列出所有索引 添加索引 删除索引 修改文档 查询(搜索) PHP操作ES 官网:https://www.elast...

  • MongoDB基本使用

    数据写入与查询 数据更新 数据删除 创建索引

  • elasticsearch head 日常操作

    前言 elasticsearch 下文简称es,本文基于es6所书写。 es作为非关系型数据库,基于倒排索引,集群...

  • Elasticsearch 实战

    索引删除 随着数据的不断写入,ES中的index数也会持续增加,当达到某个临界值之后,ES集群会出现查询性能的急剧...

  • 四、入门教程

    Elasticsearch关键概念 1. 索引(Index) ES将数据存储于一个或多个索引中,索引是具有类似特性...

网友评论

      本文标题:【es】Elasticsearch索引数据查询、删除

      本文链接:https://www.haomeiwen.com/subject/dswqcjtx.html