ElasticSearch はインデックス内のデータを削除します (delete_by_query)

1. 2 か月以上前のデータを削除する

Elasticsearch で 2 か月以上古いデータを削除するには、次の手順を実行します。

現在時刻の 2 か月前の日付を計算するには、Python の datetime モジュールを使用します。

import datetime

# 获取当前日期
now = datetime.datetime.now()

# 计算两个月前的日期
two_months_ago = now - datetime.timedelta(days=60)

Elasticsearch の削除リクエストを作成し、Elasticsearch-Py ライブラリを使用して Elasticsearch と対話します。

from elasticsearch import Elasticsearch

# 创建 Elasticsearch 连接
es = Elasticsearch([{'host': 'localhost', 'port': 9200}])

# 构造删除请求
delete_query = {
    "query": {
        "range": {
            "timestamp": {
                "lt": two_months_ago.strftime("%Y-%m-%dT%H:%M:%S")  # 格式化日期为 Elasticsearch 支持的格式
            }
        }
    }
}

# 发送删除请求
es.delete_by_query(index='your_index_name', body=delete_query)

        これにより、2 か月以上古いデータがインデックスから削除されます。データの削除操作は元に戻せないことに注意してください。慎重に使用し、運用環境で十分なテストを行ってください。さらに、特定のインデックス名、フィールド名、および日付フィールド名は、実際の状況に応じて変更する必要があります。

2. エイリアスによるデータの削除

        Elasticsearch Alias を使用すると、複数のインデックスのデータを一度に削除できます。エイリアスは 1 つ以上のインデックスへの参照として理解でき、エイリアスを削除すると、複数のインデックスのデータを同時に削除できます。

以下は、Elasticsearch-Py ライブラリを使用して複数のインデックスのデータを一度に削除するサンプル コードです。

from elasticsearch import Elasticsearch

# 创建 Elasticsearch 连接
es = Elasticsearch([{'host': 'localhost', 'port': 9200}])

# 定义要删除数据的索引别名
index_alias = "your_index_alias"

# 构造删除请求
delete_query = {
    "query": {
        "range": {
            "timestamp": {
                "lt": "now-2M"  # 删除两个月以前的数据
            }
        }
    }
}

# 发送删除请求,并指定索引别名
es.delete_by_query(index=index_alias, body=delete_query)

        この例では、index_alias 変数を使用して削除するデータのインデックス エイリアスを指定し、es.delete_by_query() メソッドを通じて削除リクエストを送信し、削除するデータの範囲を指定します。ここでは数学が使用されています。「now-2M」という表現は、2 か月前の時点を表します。これにより、エイリアスに関連付けられたすべてのインデックス内の 2 か月より古いデータが削除されます。

        エイリアスを使用してインデックス内のデータを削除することは強力な操作であるため、慎重に使用し、運用環境で十分にテストする必要があることに注意してください。同時に、特定のインデックスの別名とフィールド名を実際の状況に応じて変更する必要があります。

3. 論理削除に該当するかどうか

        Elasticsearch の delete_by_query メソッドを使用してインデックス内のデータを削除することは、廃棄ではありません。実際にクエリ操作を実行し、クエリ結果に基づいて削除操作を実行して、クエリ条件を満たすドキュメントをインデックスから物理的に削除します。

        通常、論理的な削除は、ドキュメントにフラグ フィールド (削除済みなど) を追加し、それを true に設定して削除済みとしてマークされていることを示し、クエリ時に削除済みとしてマークされたドキュメントをフィルタリングして除外することで実現されます。論理的な削除。このアプローチでは、削除されたドキュメントの履歴を、その後の回復やクエリの必要性に備えて保存できます。

        ただし、delete_by_query メソッドを使用すると、クエリ条件を満たすドキュメントがインデックスから直接物理的に削除されるため、これらのドキュメントは復元されず、削除操作によって一定のオーバーヘッドが発生し、Elasticsearch のパフォーマンスに影響します。したがって、delete_by_query メソッドを使用する場合は慎重な検討が必要であり、本番環境で十分なテストと検証を実行する必要があります。

4. データを削除した後もストレージ容量を消費しますか?

        Elasticsearch では、delete_by_query メソッドを使用してドキュメントが削除されると、ドキュメントは実際には削除済みとしてマークされますが、ディスクからすぐには削除されません。代わりに、これらの削除されたドキュメントは、後続のセグメント マージ操作中にディスクから消去されます。

        したがって、ドキュメントは delete_by_query メソッドを使用して削除されますが、セグメントのマージ操作がトリガーされて完了するまで、これらのドキュメントは依然として記憶域スペースを占有します。これは、delete_by_query メソッドを使用して多数のドキュメントが削除された場合でも、ディスク上の記憶領域はすぐには解放されず、セグメントのマージ操作がクリーンアップするまで待つ必要があることも意味します。

        Elasticsearch 7.x 以降では、新しい _delete_by_query API が導入されており、ドキュメントの削除時に、refresh パラメーターを通じてリアルタイムで更新できます (デフォルトでは、Elasticsearch はデータが確実に保持されるように更新操作を定期的に実行します)ディスク)。これにより、ストレージ領域がより迅速に解放されますが、パフォーマンスとストレージへの潜在的な影響に注意する必要があります。delete_by_query メソッドを使用する場合、運用環境では注意し、大量のデータを削除する際にはストレージの使用状況を注意深く監視することをお勧めします。

5. delete_by_query メソッドの使用はビッグ データ ストレージに影響しますか?

        大量のデータを削除する場合、delete_by_query メソッドを使用すると、パフォーマンスとストレージ領域に一定の影響を与える可能性があります。delete_by_query メソッドは、Elasticsearch でクエリ操作を実行し、一致するドキュメントをマークして削除する必要があり、これらのマーク付き削除済みドキュメントは依然としてストレージ領域を占有しており、後続のセグメント マージ操作でクリーンアップする必要があるためです。

        大量のデータを削除する場合は、インデックス全体を削除するか、Elasticsearch の時間ベースのインデックスを使用して古いデータを定期的に削除するなど、より効率的な方法を使用することをお勧めします。これにより、delete_by_query メソッドを使用したクエリとストレージ スペースへの過剰な負荷が回避されます。

たとえば、次のようなアプローチが考えられます。

  • インデックス全体を削除する: 削除するデータが大きく、時間範囲が明確な場合は、インデックス全体を直接削除できます。たとえば、月ごとに 1 つのインデックスを作成する場合、インデックス内のデータが 2 か月を超える場合は、インデックスを直接削除します。
  • Elasticsearch のタイムスタンプ インデックスを使用する: データは、1 日または 1 時間ごとに 1 つのインデックスなど、タイムスタンプなどの時間情報に応じて異なるインデックスに保存できます。データの有効期限が切れたら、対応するインデックスを削除するだけで、大量のデータをすばやく削除できます。

        上記の方法は、delete_by_query メソッドの使用によって生じるパフォーマンスとストレージ領域への潜在的な影響を回避でき、大量のデータを削除するシナリオに適しています。特定のビジネス ニーズとデータ規模に基づいて、適切な削除戦略を選択する必要があります。

おすすめ

転載: blog.csdn.net/weixin_44799217/article/details/130192119