ElasticsearchでJavaを使って一括更新する方法を教えてください

JavaでElasticsearchに一括でデータを更新するには、Bulk APIを使用します。Bulk APIでは、複数のインデックス、アップデート、または削除操作を一括して実行できます。

最初に、Elasticsearchクラスターと通信するためのTransportClientオブジェクトを作成する必要があります。次に、更新するドキュメントのインデックス、タイプ、およびIDを指定するために、prepareUpdateメソッドを使用してUpdateRequestオブジェクトを作成できます。さらに、setDocメソッドを使用して更新するフィールドと値を設定できます。

次に、BulkRequestBuilderオブジェクトを作成し、addメソッドを使用してすべてのUpdateRequestオブジェクトを追加する必要があります。最後に、executeメソッドを使用して一括更新操作を実行できます。

サンプルコードは下記を参照してください

import org.elasticsearch.action.bulk.BulkRequestBuilder;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.transport.client.PreBuiltTransportClient;

import java.net.InetAddress;

public class BulkUpdateExample {
    public static void main(String[] args) throws Exception {
        // 创建TransportClient对象
        Settings settings = Settings.builder()
                .put("cluster.name", "your_cluster_name")
                .build();
        TransportClient client = new PreBuiltTransportClient(settings)
                .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("localhost"), 9300));

        // 创建BulkRequestBuilder对象
        BulkRequestBuilder bulkRequest = client.prepareBulk();

        // 创建UpdateRequest对象并添加到BulkRequestBuilder中
        UpdateRequest updateRequest1 = new UpdateRequest("your_index", "your_type", "your_id1")
                .doc(XContentFactory.jsonBuilder()
                        .startObject()
                        .field("field1", "new_value1")
                        .endObject());
        bulkRequest.add(updateRequest1);

        UpdateRequest updateRequest2 = new UpdateRequest("your_index", "your_type", "your_id2")
                .doc(XContentFactory.jsonBuilder()
                        .startObject()
                        .field("field2", "new_value2")
                        .endObject());
        bulkRequest.add(updateRequest2);

        // 执行批量更新操作
        BulkResponse bulkResponse = bulkRequest.get();

        // 处理响应结果
        if (bulkResponse.hasFailures()) {
            System.out.println("批量更新失败:" + bulkResponse.buildFailureMessage());
        } else {
            System.out.println("批量更新成功:" + bulkResponse.getItems().length + " 个文档已更新");
        }

        // 关闭TransportClient对象
        client.close();
    }
}

サンプルコード内の以下パラメータを、置き換える必要があります。

  1. your_cluster_name : Elasticsearchクラスタ名。
  2. localhost:Elasticsearchクラスタのホスト名またはIPアドレス。
  3. Elasticsearchクラスタのポート番号9300
  4. 更新するインデックス名
  5. あなたのtype:アップデートするタイプ名です。
  6. 更新するドキュメントのID

本記事があなたのお役に立てれば幸いです。

bannerAds