すべてのプロダクト
Search
ドキュメントセンター

OpenSearch:データプッシュデモ

最終更新日:Apr 28, 2025

このトピックでは、OpenSearch Vector Search Edition Java SDK クライアントを使用して、OpenSearch Vector Search Edition インスタンスにデータをリアルタイムで同期する方法について説明します。追加、更新、削除の更新操作がサポートされています。

追加操作の例

import com.aliyun.ha3engine.Client;
import com.aliyun.ha3engine.models.*;
import com.aliyun.tea.TeaException;
import org.junit.Before;
import org.junit.Test;


import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;


/**
 * @author alibaba
 */
public class PushDoc {

    /**
     * OpenSearch Vector Search Edition インスタンスのエンジン クライアント。
     */
    private Client client;

    @Before
    public void clientInit() throws Exception {
        Config config = new Config();
        // インスタンスの名前。インスタンス名は、[インスタンスの詳細] ページの左上隅に表示されます。例: ha-cn-i7*****605。
        config.setInstanceId("ha-cn-i7*****605");
        // ユーザー名。ユーザー名は、[インスタンスの詳細] ページの [API エンドポイント] セクションに表示されます。
        config.setAccessUserName("username");
        // パスワード。パスワードは、[インスタンスの詳細] ページの [API エンドポイント] セクションで変更できます。
        config.setAccessPassWord("password");
        // インスタンスの API エンドポイント。API エンドポイントは、[インスタンスの詳細] ページの [API エンドポイント] セクションに表示されます。
        config.setEndpoint("ha-cn-i7*****605.public.ha.aliyuncs.com");
        client = new Client(config);
    }

    @Test
    public void add() throws Exception {
        // ドキュメントをプッシュするテーブルの名前。
        String tableName = "";

        // データをプッシュするドキュメントのプライマリキー フィールド。
        String pkField = "";

        try {
            // ドキュメントをプッシュするために使用される外部構造。構造には、1 つ以上のドキュメント操作を指定できます。
            ArrayList> documents = new ArrayList<>();

            // アップロードするドキュメント。
            Map add2Document = new HashMap<>();
            Map add2DocumentFields = new HashMap<>();

            // ドキュメントの内容。キーと値はペアで一致させる必要があります。
            // field_pk フィールドの値は、pkField フィールドの値と同じである必要があります。
            add2DocumentFields.put("", "");
            add2DocumentFields.put("", "");
            add2DocumentFields.put("", "");

            // コンテンツは、OpenSearch Vector Search Edition でサポートされている複数値属性タイプにすることができます。インデックステーブルを構成するときに、multi_value パラメーターを true に設定します。
            ArrayList addDocumentMultiFields = new ArrayList<>();
            addDocumentMultiFields.add("multi_value_1");
            addDocumentMultiFields.add("multi_value_2");
            add2DocumentFields.put("", addDocumentMultiFields);
            
            // ドキュメントの内容を add2Document 構造に追加します。
            add2Document.put("fields", add2DocumentFields);
            // add コマンドを実行してドキュメントをアップロードします。
            add2Document.put("cmd", "add");
            documents.add(add2Document);
            
            // データをプッシュします。
            PushDocumentsRequestModel requestModel = new PushDocumentsRequestModel();
            // デフォルトでは、データをプッシュするときに、システムはプライマリキー フィールドが存在するかどうかを確認します。チェックを無効にするには、X-Opensearch-Validate-Data リクエスト ヘッダーを false に設定します。
//            requestModel.headers = new HashMap<>();
//            requestModel.headers.put("X-Opensearch-Validate-Data", "false");
            requestModel.setBody(documents);
            PushDocumentsResponseModel responseModel = client.pushDocuments(tableName, pkField, requestModel);
            String responseBody = responseModel.getBody();

            System.out.println("result:" + responseBody);
        } catch (TeaException e) {
            System.out.println(e.getCode());
            System.out.println(e.getMessage());
            Map exceptionData = e.getData();
            System.out.println(com.aliyun.teautil.Common.toJSONString(exceptionData));
        }
    }
}

構造の表示:

[
    {
        "cmd": "add",
        "fields": {
            "id": "1",
            "title": "This is the title",
            "body": "This is the body",
                  "tags" : [1, 2, 3]
        }
    }
]

更新操作の例

package com.aliyun.ha3engine;

import com.aliyun.ha3engine.Client;
import com.aliyun.ha3engine.models.*;
import com.aliyun.tea.TeaException;


import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;


/**
 * @author alibaba
 */
public class PushDoc {

    public static void main(String[] args) throws Exception {
        Config config = new Config();

        // インスタンスの API エンドポイント。API エンドポイントは、[インスタンスの詳細] ページの [API エンドポイント] セクションに表示されます。
        config.setEndpoint("");
        // インスタンスの名前。インスタンス名は、[インスタンスの詳細] ページの左上隅に表示されます。例: ha-cn-i7*****605
        config.setInstanceId("");

        // ユーザー名。ユーザー名は、[インスタンスの詳細] ページの [API エンドポイント] セクションに表示されます。
        config.setAccessUserName("");
        // パスワード。パスワードは、[インスタンスの詳細] ページの [API エンドポイント] セクションで変更できます。
        config.setAccessPassWord("");

        Client client = new Client(config);

        // データソース構成の名前。名前は、[インスタンス管理] > [構成センター] > [データソース構成] に表示されます。
        String tableName = "";

        // データをプッシュするドキュメントのプライマリキー フィールド。
        String pkField = "";

        try {
            // ドキュメントをプッシュするために使用される外部構造。構造には、1 つ以上のドキュメント操作を指定できます。
            ArrayList> documents = new ArrayList<>();

            // 更新するドキュメント。
            Map update2Document = new HashMap<>();
            Map update2DocumentFields = new HashMap<>();

            // ドキュメントの内容。キーと値はペアで一致させる必要があります。
            // field_pk フィールドの値は、pkField フィールドの値と同じである必要があります。
            update2DocumentFields.put("", "");
            update2DocumentFields.put("", "");
            update2DocumentFields.put("", "");

            // コンテンツは、OpenSearch Vector Search Edition でサポートされている複数値属性タイプにすることができます。インデックステーブルを構成するときに、multi_value パラメーターを true に設定します。
            ArrayList updateDocumentMultiFields = new ArrayList<>();
            updateDocumentMultiFields.add("multi_value_1");
            updateDocumentMultiFields.add("multi_value_2");
            update2DocumentFields.put("", updateDocumentMultiFields);

            // ドキュメントの内容を update2Document 構造に追加します。
            update2Document.put("fields", update2DocumentFields);
            // update コマンドを実行してドキュメントを更新します。
            update2Document.put("cmd", "update");
            documents.add(update2Document);

            // データをプッシュします。
            PushDocumentsRequestModel requestModel = new PushDocumentsRequestModel();
            requestModel.setBody(documents);
            PushDocumentsResponseModel responseModel = client.pushDocuments(tableName, pkField, requestModel);
            String responseBody = responseModel.getBody();

            System.out.println("result:" + responseBody);

        } catch (TeaException e) {
            System.out.println(e.getMessage());

            Map abc = e.getData();

            System.out.println(com.aliyun.teautil.Common.toJSONString(abc));
        }
    }
}

構造の表示:

[
   
    {
        "cmd": "update_field",
        "fields": {
            "id": "2",
            "title": "This is the new title"
        }
    }
]

削除操作の例

package com.aliyun.ha3engine;

import com.aliyun.ha3engine.Client;
import com.aliyun.ha3engine.models.*;
import com.aliyun.tea.TeaException;


import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;


/**
 * @author alibaba
 */
public class PushDoc {

    public static void main(String[] args) throws Exception {
        Config config = new Config();

        // インスタンスの API エンドポイント。API エンドポイントは、[インスタンスの詳細] ページの [API エンドポイント] セクションに表示されます。
        config.setEndpoint("");
        // インスタンスの名前。インスタンス名は、[インスタンスの詳細] ページの左上隅に表示されます。例: ha-cn-i7*****605
        config.setInstanceId("");

        // ユーザー名。ユーザー名は、[インスタンスの詳細] ページの [API エンドポイント] セクションに表示されます。
        config.setAccessUserName("");
        // パスワード。パスワードは、[インスタンスの詳細] ページの [API エンドポイント] セクションで変更できます。
        config.setAccessPassWord("");

        Client client = new Client(config);

        // データソース構成の名前。名前は、[インスタンス管理] > [構成センター] > [データソース構成] に表示されます。
        String tableName = "";

        // データをプッシュするドキュメントのプライマリキー フィールド。
        String pkField = "";

        try {
            // ドキュメントをプッシュするために使用される外部構造。構造には、1 つ以上のドキュメント操作を指定できます。
            ArrayList> documents = new ArrayList<>();

            // 削除するドキュメント。
            Map delete2Document = new HashMap<>();
            Map delete2DocumentFields = new HashMap<>();

            // ドキュメントの内容。キーと値はペアで一致させる必要があります。
            // field_pk フィールドの値は、pkField フィールドの値と同じである必要があります。
            delete2DocumentFields.put("", "");

            // ドキュメントの内容を delete2Document 構造に追加します。
            delete2Document.put("fields", delete2DocumentFields);
            // delete コマンドを実行してドキュメントを削除します。
            delete2Document.put("cmd", "delete");
            documents.add(delete2Document);

            // データをプッシュします。
            PushDocumentsRequestModel requestModel = new PushDocumentsRequestModel();
            requestModel.setBody(documents);
            PushDocumentsResponseModel responseModel = client.pushDocuments(tableName, pkField, requestModel);
            String responseBody = responseModel.getBody();

            System.out.println("result:" + responseBody);

        } catch (TeaException e) {
            System.out.println(e.getMessage());

            Map abc = e.getData();

            System.out.println(com.aliyun.teautil.Common.toJSONString(abc));
        }
    }
}

構造の表示:

[
    {
        "cmd":"delete",
        "fields":{
            "id":"3"
        }
    }
]