環境変数の設定
このセクションでは、オペレーティングシステムで ALIBABA_CLOUD_ACCESS_KEY_IDALIBABA_CLOUD_ACCESS_KEY_SECRET および 環境変数を設定する方法について説明します。
Alibaba Cloud アカウントの AccessKey ペアを使用すると、すべての API 操作にアクセスできます。 API 操作の呼び出しや日常の O&M の実行には、Resource Access Management (RAM) ユーザーの AccessKey ペアを使用することをお勧めします。 詳細については、「RAM ユーザーの作成」をご参照ください。
AccessKey ペアの作成方法の詳細については、「AccessKey ペアの作成」をご参照ください。
RAM ユーザーの AccessKey ペアを使用する場合は、Alibaba Cloud アカウントがサービスロール AliyunServiceRoleForOpenSearch で指定された権限を RAM ユーザーに付与していることを確認してください。 詳細については、「AliyunServiceRoleForOpenSearch」および「アクセス認証ルール」をご参照ください。
プロジェクトコードに AccessKey ID と AccessKey シークレットをハードコードしないことをお勧めします。 そうしないと、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが侵害される可能性があります。
Linux および macOS:
次のコマンドでは、
<access_key_id>を RAM ユーザーの AccessKey ID に、<access_key_secret>を RAM ユーザーの AccessKey シークレットに置き換えます。 次に、コマンドを実行します。export ALIBABA_CLOUD_ACCESS_KEY_ID=<access_key_id> export ALIBABA_CLOUD_ACCESS_KEY_SECRET=<access_key_secret>Windows:
環境変数ファイルを作成し、ALIBABA_CLOUD_ACCESS_KEY_ID および ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数をファイルに追加し、ALIBABA_CLOUD_ACCESS_KEY_ID に AccessKey ID を、ALIBABA_CLOUD_ACCESS_KEY_SECRET に AccessKey シークレットを指定します。
AccessKey ペアを有効にするには、Windows を再起動します。
OpenSearch SDK for Java V3.1 を使用したデータコミットのデモコード
コミットモードでデータをアップロードするには、次の操作を実行します。アップロードするドキュメントデータを動的に Map オブジェクトにカプセル化し、add メソッドを呼び出して Map オブジェクトをクライアントバッファにアップロードし、commit メソッドを呼び出して Map オブジェクトを送信します。
シナリオ
データの動的なマージとコミット
単一ドキュメントのコミット
一度に少数のドキュメントをコミット
package com.aliyun.opensearch;
import com.aliyun.opensearch.sdk.dependencies.com.google.common.collect.Lists;
import com.aliyun.opensearch.sdk.dependencies.com.google.common.collect.Maps;
import com.aliyun.opensearch.sdk.dependencies.org.json.JSONObject;
import com.aliyun.opensearch.sdk.generated.OpenSearch;
import com.aliyun.opensearch.sdk.generated.commons.OpenSearchClientException;
import com.aliyun.opensearch.sdk.generated.commons.OpenSearchException;
import com.aliyun.opensearch.sdk.generated.commons.OpenSearchResult;
import com.aliyun.opensearch.sdk.generated.search.Config;
import com.aliyun.opensearch.sdk.generated.search.SearchFormat;
import com.aliyun.opensearch.sdk.generated.search.SearchParams;
import com.aliyun.opensearch.sdk.generated.search.general.SearchResult;
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import java.util.Map;
import java.util.Random;
public class testCommitSearch {
private static String appName = "データのコミット先の OpenSearch アプリケーションの名前"; // データをコミットする OpenSearch アプリケーションの名前
private static String tableName = "データのコミット先のテーブルの名前"; // データをコミットするテーブルの名前
private static String host = "ご利用のリージョンの OpenSearch API のエンドポイント"; // リージョンの OpenSearch API のエンドポイント
public static void main(String[] args) {
// AccessKey ペアを指定します。
// 環境変数から AccessKey ID と AccessKey シークレットを取得します。
// このコードを実行する前に、環境変数を設定する必要があります。 詳細については、このトピックの「環境変数の設定」セクションを参照してください。
String accesskey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
String secret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
// ドキュメントとデフォルトのエンコード形式を表示します。
System.out.println(
String.format("file.encoding: %s", System.getProperty("file.encoding"))
);
System.out.println(
String.format("defaultCharset: %s", Charset.defaultCharset().name())
);
// ランダムな値を生成し、プライマリキーの値として使用します。
Random rand = new Random();
int value = rand.nextInt(Integer.MAX_VALUE);
// アップロードするドキュメントのデータを格納するために、doc1 という名前の Map オブジェクトを作成します。
Map<String, Object> doc1 = Maps.newLinkedHashMap();
doc1.put("id", value);
String title_string = "コミットモードで doc1 をアップロード"; // 文字列は UTF-8 でエンコードされています。
byte[] bytes;
try {
bytes = title_string.getBytes("utf-8");
String utf8_string = new String(bytes, "utf-8");
doc1.put("name", utf8_string);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
doc1.put("phone", "1381111****");
int[] int_arr = { 33, 44 };
doc1.put("int_arr", int_arr);
String[] literal_arr = {
"コミットモードで doc1 をアップロード",
"コミットモードで doc1 のアップロードをテスト]",
};
doc1.put("literal_arr", literal_arr);
float[] float_arr = { (float) 1.1, (float) 1.2 };
doc1.put("float_arr", float_arr);
doc1.put("cate_id", 1);
// OpenSearch オブジェクトを作成します。
OpenSearch openSearch1 = new OpenSearch(accesskey, secret, host);
// OpenSearch オブジェクトをパラメーターとして使用して、OpenSearchClient オブジェクトを作成します。
OpenSearchClient serviceClient1 = new OpenSearchClient(openSearch1);
// データのアップロードと送信に使用する DocumentClient オブジェクトを作成します。
DocumentClient documentClient1 = new DocumentClient(serviceClient1);
// メソッドを呼び出して doc1 をクライアントバッファにアップロードし、新しいドキュメントとして設定します。
documentClient1.add(doc1);
// ドキュメントを表示します。
System.out.println(doc1.toString());
try {
// commit メソッドを呼び出して、アップロードされたドキュメントを送信します。 この例では、送信操作が完了するまでに 10 秒が確保されています。 複数のドキュメントをクライアントバッファにアップロードしてから、一度に送信することもできます。
OpenSearchResult osr = documentClient1.commit(appName, tableName);
// データがコミットされるかどうかは、データのコミット時にエラーが発生するかどうか、および OpenSearch コンソールでエラーが発生するかどうかによって異なります。
// データをコミットした後、アプリケーションでエラーが発生する場合があります。 OpenSearch コンソールは、これらのエラーをエラーログに記録します (フィールドコンテンツの変換の失敗など)。
if (osr.getResult().equalsIgnoreCase("true")) {
System.out.println(
"データのコミット時にエラーは発生しませんでした! \n リクエスト ID は "+
osr.getTraceInfo().getRequestId() + " です。"
);
} else {
System.out.println("データのコミット時にエラーが発生しました!" + osr.getTraceInfo());
}
} catch (OpenSearchException e) {
e.printStackTrace();
} catch (OpenSearchClientException e) {
e.printStackTrace();
}
try {
Thread.sleep(10000);// スレッドを 10 秒間休止します。その後、OpenSearch コンソールに追加されたデータを表示できます。
} catch (InterruptedException e) {
e.printStackTrace();
}
// doc1 を更新するために、doc2 という名前の Map オブジェクトを作成します。 add メソッドを呼び出してこの更新を実行し、doc1 の有効な名前とプライマリキー値を指定していることを確認します。
Map<String, Object> doc2 = Maps.newLinkedHashMap();
doc2.put("id", value);
String title_string2 = "コミットモードで doc2 を更新";// utf-8
byte[] bytes2;
try {
bytes2 = title_string2.getBytes("utf-8");
String utf8_string2 = new String(bytes2, "utf-8");
doc2.put("name", utf8_string2);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
doc2.put("phone", "1390000****");
int[] int_arr2 = { 22, 22 };
doc2.put("int_arr", int_arr2);
String[] literal_arr2 = {"コミットモードで doc1 を更新","コミットモードで doc1 を更新"};
doc2.put("literal_arr", literal_arr2);
float[] float_arr2 = { (float) 1.1, (float) 1.2 };
doc2.put("float_arr", float_arr2);
doc2.put("cate_id", 1);
// add メソッドを呼び出して、Map オブジェクト doc2 をクライアントバッファにアップロードします。 プライマリキーが有効であるため、この更新操作は正常に実行できます。
documentClient1.update(doc2);
// ドキュメントを表示します。
System.out.println(doc2.toString());
try {
// commit メソッドを呼び出して、更新されたドキュメントを送信します。 この例では、一度に 1 つのドキュメントのみが送信され、10 秒後に結果を表示できます。 クライアントバッファ内の複数のドキュメントを更新してから、一度に送信することもできます。
OpenSearchResult osr = documentClient1.commit(appName, tableName);
// データがコミットされるかどうかは、データのコミット時にエラーが発生するかどうか、および OpenSearch コンソールでエラーが発生するかどうかによって異なります。
// データをコミットした後、アプリケーションでエラーが発生する場合があります。 OpenSearch コンソールは、これらのエラーをエラーログに記録します (フィールドコンテンツの変換の失敗など)。
if (osr.getResult().equalsIgnoreCase("true")) {
System.out.println(
"データのコミット時にエラーは発生しませんでした! \n リクエスト ID は "+
osr.getTraceInfo().getRequestId() + " です。"
);
} else {
System.out.println("データのコミット時にエラーが発生しました!" + osr.getTraceInfo());
}
} catch (OpenSearchException e) {
e.printStackTrace();
} catch (OpenSearchClientException e) {
e.printStackTrace();
}
try {
Thread.sleep(10000);// スレッドを 10 秒間休止します。その後、OpenSearch コンソールで更新されたデータを表示できます。
} catch (InterruptedException e) {
e.printStackTrace();
}
// ドキュメントを削除するために、doc3 という名前の Map オブジェクトを作成します。 ドキュメントを削除するには、ドキュメントのプライマリキー値のみを指定する必要があります。
Map<String, Object> doc3 = Maps.newLinkedHashMap();
doc3.put("id", value);
// Map オブジェクト doc3 をクライアントバッファにアップロードして、ドキュメントを削除します。
documentClient1.remove(doc3);
// ドキュメントを表示します。
System.out.println(doc3.toString());
try {
// commit メソッドを呼び出して、削除されたドキュメントを送信します。 この例では、送信操作が完了するまでに 10 秒が確保されています。 クライアントバッファから複数のドキュメントを削除してから、一度に送信することもできます。
OpenSearchResult osr = documentClient1.commit(appName, tableName);
// データがコミットされるかどうかは、データのコミット時にエラーが発生するかどうか、および OpenSearch コンソールでエラーが発生するかどうかによって異なります。
// データをコミットした後、アプリケーションでエラーが発生する場合があります。 OpenSearch コンソールは、これらのエラーをエラーログに記録します (フィールドコンテンツの変換の失敗など)。
if (osr.getResult().equalsIgnoreCase("true")) {
System.out.println(
"データのコミット時にエラーは発生しませんでした! \n リクエスト ID は "+
osr.getTraceInfo().getRequestId() + " です。"
);
} else {
System.out.println("データのコミット時にエラーが発生しました!" + osr.getTraceInfo());
}
} catch (OpenSearchException e) {
e.printStackTrace();
} catch (OpenSearchClientException e) {
e.printStackTrace();
}
try {
Thread.sleep(10000);// スレッドを 10 秒間休止します。その後、ドキュメントが削除されたかどうかを確認できます。 スレッドを休止せずに削除直後にデータをクエリすると、削除されるデータが検索結果に含まれる場合があります。 スレッドを少なくとも 1 秒間休止します。
} catch (InterruptedException e) {
e.printStackTrace();
}
// OpenSearch オブジェクトを作成します。
OpenSearch openSearch2 = new OpenSearch(accesskey, secret, host);
// OpenSearch オブジェクトをパラメーターとして使用して、OpenSearchClient オブジェクトを作成します。
OpenSearchClient serviceClient2 = new OpenSearchClient(openSearch2);
// OpenSearchClient オブジェクトをパラメーターとして使用して、SearcherClient オブジェクトを作成します。
SearcherClient searcherClient2 = new SearcherClient(serviceClient2);
// Config オブジェクトを作成して、config 句のパラメーター (ページング関連のパラメーターや返される結果のデータ形式など) を設定します。
Config config = new Config(Lists.newArrayList(appName));
config.setStart(0);
config.setHits(30);
// 返される結果のデータ形式を指定します。 サポートされている形式は XML と JSON です。 FULLJSON 形式はサポートされていません。 この例では、データ形式は JSON に設定されています。
config.setSearchFormat(SearchFormat.JSON);
SearchParams searchParams = new SearchParams(config);
searchParams.setQuery("id:'" + value + "'");
// クエリを実行し、結果を返します。
SearchResult searchResult;
try {
searchResult = searcherClient2.execute(searchParams);
String result = searchResult.getResult();
JSONObject obj = new JSONObject(result);
// 検索結果を表示します。
System.out.println("クエリのデバッグ結果: " + obj.toString());
} catch (OpenSearchException e) {
e.printStackTrace();
} catch (OpenSearchClientException e) {
e.printStackTrace();
}
}
}同じテーブルのフィールドにのみデータをコミットできます。テーブルをまたいでデータをコミットすることはできません。