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プラグインで結果を確認できます。