JavaでElasticsearchにドキュメントを挿入する4つの方法

Elasticsearchにドキュメントを挿入する4つの主要な方法:

1. JSON文字列を直接使用して作成
2. マップコレクションを使用
3. 第三者ライブラリによるシリアライズ
4. 組み込みヘルパーXContentFactory.jsonBuilder()の利用

1: JSON文字列を使用して作成

最初の方法は、JSON形式の文字列を直接使用してドキュメントを作成します。

@Test
public void ドキュメントを手動で作成する(){
    String json文書 = "{" +
            "\"ユーザー\":\"tanaka\"," +
            "\"投稿日\":\"2023-06-15\"," +
            "\"メッセージ\":\"Elasticsearchを試しています\"" +
            "}";
    //IndexRequestBuilder prepareIndex(String index, String type)
    final IndexResponse 応答 = このクライアント.prepareIndex("ブログ", "記事")
            .setSource(json文書, XContentType.JSON).get();
    //インデックス名を取得
    final String インデックス名 = 応答.getIndex();
    //タイプを取得
    final String タイプ = 応答.getType();
    // ドキュメントID
    String ドキュメントID = 応答.getId();
    // バージョン
    long バージョン番号 = 応答.getVersion();
    // 返された操作の状態
    RestStatus 状態 = 応答.status();
    System.out.println("インデックス名:"+インデックス名+" "+"タイプ :" +  タイプ + " ドキュメントID:"+ドキュメントID+" バージョン:"+バージョン番号+" 返された操作の状態:"+状態);

}

2: マップコレクションを使用する

2番目の方法は、JavaのMapコレクションを使用してドキュメントを作成します。

@Test
public void マップでドキュメントを作成する(){
    Map<String, Object> jsonデータ = new HashMap<String, Object>();
    jsonデータ.put("ユーザー","suzuki");
    jsonデータ.put("投稿日",new Date());
    jsonデータ.put("メッセージ","Elasticsearchの機能を試しています");
    //this.client.prepareIndexにIDを渡すことも可能
    final IndexResponse 応答 = このクライアント.prepareIndex("ブログ", "記事")
            .setSource(jsonデータ, XContentType.JSON).get();
    //インデックス名を取得
    final String インデックス名 = 応答.getIndex();
    //タイプを取得
    final String タイプ = 応答.getType();
    // ドキュメントID
    String ドキュメントID = 応答.getId();
    // バージョン
    long バージョン番号 = 応答.getVersion();
    // 返された操作の状態
    RestStatus 状態 = 応答.status();
    System.out.println("インデックス名:"+インデックス名+" "+"タイプ :" +  タイプ + " ドキュメントID:"+ドキュメントID+" バージョン:"+バージョン番号+" 返された操作の状態:"+状態);
}

3: 第三者ライブラリを使用してシリアライズする

3番目の方法は、Jacksonのようなライブラリを使用してJavaオブジェクトをJSONに変換し、ドキュメントを作成します。

/**
 *この方法はJacksonライブラリを使用してBeanオブジェクトをJSONにシリアライズします
 * import com.fasterxml.jackson.databind.*;
 * */

@Test
public void シリアライズでドキュメントを作成する(){

    try {
        // JSONマッパーのインスタンスを作成
        ObjectMapper マッパー = new ObjectMapper(); // 1回作成して再利用
        // ドメインオブジェクトを作成
        記事 記事オブジェクト = new 記事();
        記事オブジェクト.setユーザー("yamada");
        記事オブジェクト.set投稿日(new Date());
        記事オブジェクト.setメッセージ("Elasticsearchの高度な機能を試しています");
        // JSONを生成
        byte[] jsonデータ = マッパー.writeValueAsBytes(記事オブジェクト);
        IndexResponse 応答 = このクライアント.prepareIndex("ニュース", "記事")
                .setSource(jsonデータ, XContentType.JSON)
                .get();
        // インデックス名
        String インデックス名 = 応答.getIndex();
        // タイプ
        String タイプ = 応答.getType();
        // ドキュメントID
        String ドキュメントID = 応答.getId();
        // バージョン
        long バージョン番号 = 応答.getVersion();
        // 返された操作の状態
        RestStatus 状態 = 応答.status();
        System.out.println("インデックス名:"+インデックス名+" "+"タイプ :" +  タイプ + " ドキュメントID:"+ドキュメントID+" バージョン:"+バージョン番号+" 返された操作の状態:"+状態);

    } catch (JsonProcessingException e) {
        e.printStackTrace();
    }
}

4: 組み込みのヘルパーjsonBuilder()を使用する

4番目の方法は、Elasticsearchの組み込みヘルパーであるXContentFactory.jsonBuilder()を使用してドキュメントを作成します。

@Test
public void ビルダーでドキュメントを作成する(){
    XContentBuilder ビルダー = null;
    try {
        ビルダー = XContentFactory.jsonBuilder()
                .startObject()
                   .field("ユーザー", "sato")
                   .field("投稿日", new Date())
                   .field("メッセージ", "Elasticsearchのパフォーマンスをテスト中")
                .endObject();
        String json文書 = ビルダー.string();
        IndexResponse 応答 = このクライアント.prepareIndex("技術ブログ", "投稿")
                .setSource(json文書, XContentType.JSON)
                .get();
        // インデックス名
        String インデックス名 = 応答.getIndex();
        // タイプ
        String タイプ = 応答.getType();
        // ドキュメントID
        String ドキュメントID = 応答.getId();
        // バージョン
        long バージョン番号 = 応答.getVersion();
        // 返された操作の状態
        RestStatus 状態 = 応答.status();
        System.out.println("インデックス名:"+インデックス名+" "+"タイプ :" +  タイプ + " ドキュメントID:"+ドキュメントID+" バージョン:"+バージョン番号+" 返された操作の状態:"+状態);

    } catch (IOException e) {
        e.printStackTrace();
    }

}

これらの方法はいずれもElasticsearchにドキュメントを挿入するための有効な手段です。プロジェクトの要件や開発チームの好みに応じて最適な方法を選択してください。

ElasticsearchのHEADプラグインで結果を確認できます。

タグ: Elasticsearch Java JSON document-indexing xcontentfactory

7月5日 20:29 投稿