Dorong dokumen ke tabel OpenSearch Vector Search Edition menggunakan SDK Java, Python, atau Go. Setiap operasi dorong dapat menambah, menimpa, atau menghapus satu atau beberapa dokumen dalam satu permintaan.
Operasi cmd: "add" selalu menimpa seluruh dokumen jika kunci primernya sudah ada. Tidak ada pembaruan parsial—untuk mengubah dokumen, dorong dokumen lengkap yang telah diperbarui menggunakan cmd: "add".
Prasyarat
Sebelum memulai, pastikan Anda telah memiliki:
Instans OpenSearch Vector Search Edition
Titik akhir instans, nama pengguna, dan kata sandi (tersedia di bagian API Endpoint pada halaman Instance Details)
SDK yang telah diinstal untuk bahasa pemrograman Anda
Instal SDK
Java
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-sdk-ha3engine-vector</artifactId>
<version>1.1.17</version>
</dependency>Python
# Memerlukan: Python >=3.6
pip install alibabacloud_ha3engine_vector==1.1.17Go
go get github.com/aliyun/alibabacloud-ha3-go-sdk@v1.1.17-vectorJava asinkron
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-sdk-ha3engine-async</artifactId>
<version>1.1.7</version>
</dependency>Parameter
Konfigurasikan parameter berikut saat menginisialisasi klien SDK.
| Parameter | Deskripsi |
|---|---|
endpoint | Titik akhir internal atau publik dari instans. Lihat titik akhir di bagian Network Information dan API Endpoint pada halaman Instance Details. |
instance_id | ID instans OpenSearch Vector Search Edition. |
access_user_name | Username untuk akses API. Lihat username di bagian API Endpoint pada halaman Instance Details. |
access_pass_word | Password untuk akses API. Password ditetapkan saat Anda membeli instans dan dapat diubah kapan saja. |
data_source_name | Nama sumber data API. Format default adalah <instance_id>_<table_name>, contohnya: ha-cn-zpr3dgzxg04_test_image_vector. |
Jenis titik akhir
Titik akhir publik: Mengandung kata
public. Untuk menggunakan titik akhir publik dari mesin on-premises, aktifkan Public Access dan konfigurasikan daftar putih alamat IP. Lakukan ping ke instans sebelum menghubungkan untuk memverifikasi aksesibilitas. Untuk detailnya, lihat bagian Network Information section dalam "View instance details."Titik akhir API: Gunakan titik akhir ini saat mengakses instans dari instans Elastic Compute Service (ECS). Konfigurasikan instans ECS dan instans OpenSearch agar menggunakan vSwitch yang sama.
Unggah dokumen
Gunakan cmd: "add" untuk mendorong dokumen baru atau menimpa dokumen yang sudah ada dengan kunci primer yang sama.
Semua contoh memanggil pushDocuments(tableName, pkField, request), dengan tableName mengikuti format <instance_id>_<table_name>.
Java
import com.aliyun.ha3engine.vector.Client;
import com.aliyun.ha3engine.vector.models.Config;
import com.aliyun.ha3engine.vector.models.PushDocumentsRequest;
import com.aliyun.ha3engine.vector.models.PushDocumentsResponse;
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 {
/**
* Client engine dari instans OpenSearch Vector Search Edition.
*/
private Client client;
@Before
public void clientInit() throws Exception {
/*
Inisialisasi client engine.
*/
Config config = new Config();
// Nama instans. Anda dapat melihat nama instans di pojok kiri atas halaman Instance Details. Contoh: ha-cn-i7*****605.
config.setInstanceId("ha-cn-i7*****605");
// Username. Anda dapat melihat username di bagian API Endpoint pada halaman Instance Details.
config.setAccessUserName("username");
// Password. Anda dapat mengubah password di bagian API Endpoint pada halaman Instance Details.
config.setAccessPassWord("password");
// Titik akhir API dari instans. Anda dapat melihat titik akhir API di bagian API Endpoint pada halaman Instance Details.
config.setEndpoint("ha-cn-i7*****605.public.ha.aliyuncs.com");
client = new Client(config);
}
@Test
public void add() throws Exception {
// Nama tabel tempat dokumen didorong. Format: <ID Instans>_<Nama tabel>.
String tableName = "<instance_id>_<table_name>";
// Bidang kunci primer dari dokumen yang datanya akan didorong.
String pkField = "<field_pk>";
try {
// Struktur luar yang digunakan untuk mendorong dokumen. Anda dapat menentukan satu atau beberapa operasi dokumen dalam struktur ini.
ArrayList<Map<String, ?>> documents = new ArrayList<>();
// Dokumen yang akan diunggah.
Map<String, Object> add2Document = new HashMap<>();
Map<String, Object> add2DocumentFields = new HashMap<>();
// Konten dokumen. Kunci dan nilai harus dipasangkan secara berpasangan.
// Nilai bidang field_pk harus sama dengan nilai bidang pkField.
add2DocumentFields.put("<field_pk>", "<field_pk_value>");
add2DocumentFields.put("<field_map_key_1>", "<field_map_value_1>");
add2DocumentFields.put("<field_map_key_2>", "<field_map_value_2>");
// Atribut bernilai ganda didukung. Atur multi_value ke true saat mengonfigurasi tabel indeks.
ArrayList<Object> addDocumentMultiFields = new ArrayList<>();
addDocumentMultiFields.add("multi_value_1");
addDocumentMultiFields.add("multi_value_2");
add2DocumentFields.put("<multi_value_key>", addDocumentMultiFields);
// Tambahkan konten dokumen ke struktur add2Document.
add2Document.put("fields", add2DocumentFields);
// Jalankan perintah add untuk mengunggah dokumen.
add2Document.put("cmd", "add");
documents.add(add2Document);
// Dorong data.
PushDocumentsRequest request = new PushDocumentsRequest();
request.setBody(documents);
PushDocumentsResponse response = client.pushDocuments(tableName, pkField, request);
String responseBody = response.getBody();
System.out.println("result:" + responseBody);
} catch (TeaException e) {
System.out.println(e.getCode());
System.out.println(e.getMessage());
Map<String, Object> exceptionData = e.getData();
System.out.println(com.aliyun.teautil.Common.toJSONString(exceptionData));
}
}
}Python
from alibabacloud_ha3engine_vector.client import Client
from alibabacloud_ha3engine_vector.models import Config
from alibabacloud_ha3engine_vector import models
from Tea.exceptions import TeaException, RetryError
config = Config(
# Titik akhir API dari instans. Anda dapat melihat titik akhir API di bagian API Endpoint pada halaman Instance Details.
endpoint="http://ha-cn-i7*****605.public.ha.aliyuncs.com",
# Username. Anda dapat melihat username di bagian API Endpoint pada halaman Instance Details.
access_user_name="username",
# Password. Anda dapat mengubah password di bagian API Endpoint pada halaman Instance Details.
access_pass_word="password")
# Inisialisasi client engine.
client = Client(config)
def push():
# Nama tabel tempat dokumen didorong. Format: <ID Instans>_<Nama tabel>.
tableName = "<instance_id>_<table_name>"
try:
# Bidang dokumen. Jika dokumen dengan kunci primer yang sama sudah ada, dokumen tersebut akan ditimpa sepenuhnya.
add2DocumentFields = {
"id": 1, # Bidang kunci primer (tipe INT).
"name": "Search", # Bidang bernilai tunggal (tipe STRING).
"str_arr": "a\x1Db\x1Dc\x1Dd" # Bidang bernilai ganda (tipe STRING, dipisahkan oleh \x1D).
}
# Tambahkan konten dokumen ke struktur add2Document.
add2Document = {
"fields": add2DocumentFields,
"cmd": "add" # Jalankan perintah add untuk mengunggah dokumen.
}
optionsHeaders = {}
# Struktur luar yang digunakan untuk mendorong dokumen. Anda dapat menentukan satu atau beberapa operasi dokumen dalam struktur ini.
documentArrayList = []
documentArrayList.append(add2Document)
pushDocumentsRequest = models.PushDocumentsRequest(optionsHeaders, documentArrayList)
# Bidang kunci primer dari dokumen yang datanya akan didorong.
pkField = "id"
response = client.push_documents(tableName, pkField, pushDocumentsRequest)
print(response.body)
except TeaException as e:
print(f"send request with TeaException : {e}")
except RetryError as e:
print(f"send request with Connection Exception : {e}")
if __name__ == "__main__":
push()Go
Contoh ini membungkus data dokumen ke dalam objek Map dan memanggil PushDocuments() untuk mengirimkannya dalam satu permintaan.
package main
import (
"fmt"
"github.com/alibabacloud-go/tea/tea"
ha3engine "github.com/aliyun/alibabacloud-ha3-go-sdk/client"
)
func main() {
// Buat instans Config.
config := &ha3engine.Config{
// Titik akhir API dari instans. Anda dapat melihat titik akhir API di bagian API Endpoint pada halaman Instance Details.
Endpoint: tea.String("ha-cn-i7*****605.public.ha.aliyuncs.com"),
// Username. Anda dapat melihat username di bagian API Endpoint pada halaman Instance Details.
AccessUserName: tea.String("username"),
// Password. Anda dapat mengubah password di bagian API Endpoint pada halaman Instance Details.
AccessPassWord: tea.String("password"),
}
// Inisialisasi client untuk mengirim permintaan.
client, _clientErr := ha3engine.NewClient(config)
// Jika terjadi kesalahan saat membuat client, cetak kesalahan dan keluar.
if _clientErr != nil {
fmt.Println(_clientErr)
return
}
docPush(client)
}
func docPush(client *ha3engine.Client) {
pushDocumentsRequestModel := &ha3engine.PushDocumentsRequest{}
// Nama tabel tempat dokumen didorong. Format: <ID Instans>_<Nama tabel>.
tableName := "<instance_id>_<table_name>"
// Bidang kunci primer dari dokumen yang datanya akan didorong.
keyField := "<field_pk>"
a := [20]int{}
array := []map[string]interface{}{}
for x := range a {
filed := map[string]interface{}{
"fields": map[string]interface{}{
"id": tea.ToString(x),
"fb_boolean": tea.BoolValue(nil),
"fb_datetime": "2167747200000",
"fb_string": "409a6b18-a10b-409e-af91-07121c45d899",
},
"cmd": tea.String("add"),
}
array = append(array, filed)
pushDocumentsRequestModel.SetBody(array)
// Panggil metode untuk mengirim permintaan.
response, _requestErr := client.PushDocuments(tea.String(dataSourceName), tea.String(keyField), pushDocumentsRequestModel)
// Jika terjadi kesalahan saat mengirim permintaan, cetak kesalahan dan keluar.
if _requestErr != nil {
fmt.Println(_requestErr)
return
}
// Tampilkan tanggapan.
fmt.Println(response)
}
}Java (mode asinkron)
Klien asinkron mengembalikan CompletableFuture untuk setiap permintaan dorong.
import com.aliyun.ha3engine.async.AsyncClient;
import com.aliyun.ha3engine.async.models.PushDocumentsRequest;
import com.aliyun.ha3engine.async.models.PushDocumentsResponse;
import com.aliyun.sdk.ha3engine.async.core.AsyncConfigInfoProvider;
import com.aliyun.tea.TeaException;
import darabonba.core.client.ClientOverrideConfiguration;
import org.junit.Before;
import org.junit.Test;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
/**
* @author alibaba
*/
public class AddDoc {
/**
* Client engine dari instans OpenSearch Vector Search Edition.
*/
private AsyncClient client;
@Before
public void clientInit() {
// Username dan password yang digunakan untuk mengakses instans. Anda dapat melihat username dan password di bagian API Endpoint pada halaman Instance Details.
AsyncConfigInfoProvider provider = AsyncConfigInfoProvider.create("username", "password");
// Inisialisasi client asinkron.
client = AsyncClient.builder()
.credentialsProvider(provider)
.overrideConfiguration(
ClientOverrideConfiguration.create()
.setEndpointOverride("ha-cn-i7*****605.public.ha.aliyuncs.com")
.setProtocol("http")
).build();
}
@Test
public void add() {
try {
// Nama tabel tempat dokumen didorong. Format: <ID Instans>_<Nama tabel>.
String tableName = "<instance_id>_<table_name>";
// Bidang kunci primer dari dokumen yang datanya akan didorong.
String pkField = "<field_pk>";
// Struktur luar yang digunakan untuk mendorong dokumen. Anda dapat menentukan satu atau beberapa operasi dokumen dalam struktur ini.
ArrayList<Map<String, ?>> documents = new ArrayList<>();
// Dokumen yang akan diunggah.
Map<String, Object> add2Document = new HashMap<>();
Map<String, Object> add2DocumentFields = new HashMap<>();
// Konten dokumen. Kunci dan nilai harus dipasangkan secara berpasangan.
// Nilai bidang field_pk harus sama dengan nilai bidang pkField.
add2DocumentFields.put("<field_pk>", "<field_pk_value>");
add2DocumentFields.put("<field_map_key_1>", "<field_map_value_1>");
add2DocumentFields.put("<field_map_key_2>", "<field_map_value_2>");
// Atribut bernilai ganda didukung. Atur multi_value ke true saat mengonfigurasi tabel indeks.
ArrayList<Object> addDocumentMultiFields = new ArrayList<>();
addDocumentMultiFields.add("multi_value_1");
addDocumentMultiFields.add("multi_value_2");
add2DocumentFields.put("<multi_value_key>", addDocumentMultiFields);
// Tambahkan konten dokumen ke struktur add2Document.
add2Document.put("fields", add2DocumentFields);
// Jalankan perintah add untuk mengunggah dokumen.
add2Document.put("cmd", "add");
documents.add(add2Document);
// Dorong data.
PushDocumentsRequest request = PushDocumentsRequest.builder().body(documents).build();
CompletableFuture<PushDocumentsResponse> responseCompletableFuture = client.pushDocuments(tableName, pkField, request);
String responseBody = responseCompletableFuture.get().getBody();
System.out.println("result:" + responseBody);
} catch (ExecutionException | InterruptedException e) {
System.out.println(e.getMessage());
} catch (TeaException e) {
System.out.println(e.getCode());
System.out.println(e.getMessage());
Map<String, Object> abc = e.getData();
System.out.println(com.aliyun.teautil.Common.toJSONString(abc));
}
}
}Hapus dokumen
Gunakan cmd: "delete" untuk menghapus dokumen berdasarkan kunci primernya. Hanya bidang kunci primer yang diperlukan dalam map fields.
Jika indeks Anda menggunakan struktur penghashan bertingkat, tentukan bidang kunci primer untuk setiap tingkat hash.
Java
import com.aliyun.ha3engine.vector.Client;
import com.aliyun.ha3engine.vector.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 {
/**
* Client engine dari instans OpenSearch Vector Search Edition.
*/
private Client client;
@Before
public void clientInit() throws Exception {
/*
Inisialisasi client engine.
*/
Config config = new Config();
// Nama instans. Anda dapat melihat nama instans di pojok kiri atas halaman Instance Details. Contoh: ha-cn-i7*****605.
config.setInstanceId("ha-cn-i7*****605");
// Username. Anda dapat melihat username di bagian API Endpoint pada halaman Instance Details.
config.setAccessUserName("username");
// Password. Anda dapat mengubah password di bagian API Endpoint pada halaman Instance Details.
config.setAccessPassWord("password");
// Titik akhir API dari instans. Anda dapat melihat titik akhir API di bagian API Endpoint pada halaman Instance Details.
config.setEndpoint("ha-cn-i7*****605.public.ha.aliyuncs.com");
client = new Client(config);
}
@Test
public void delete() throws Exception {
// Nama tabel tempat dokumen didorong. Format: <ID Instans>_<Nama tabel>.
String tableName = "<instance_id>_<table_name>";
// Bidang kunci primer dari dokumen yang datanya akan didorong.
String pkField = "<field_pk>";
try {
// Struktur luar yang digunakan untuk mendorong dokumen. Anda dapat menentukan satu atau beberapa operasi dokumen dalam struktur ini.
ArrayList<Map<String, ?>> documents = new ArrayList<>();
// Dokumen yang akan dihapus.
Map<String, Object> delete2Document = new HashMap<>();
Map<String, Object> delete2DocumentFields = new HashMap<>();
// Hanya bidang kunci primer yang diperlukan untuk mengidentifikasi dokumen yang akan dihapus.
delete2DocumentFields.put("<field_pk>", "<field_pk_value>");
// Tambahkan konten dokumen ke struktur delete2Document.
delete2Document.put("fields", delete2DocumentFields);
// Jalankan perintah delete untuk menghapus dokumen.
delete2Document.put("cmd", "delete");
documents.add(delete2Document);
// Dorong data.
PushDocumentsRequest request = new PushDocumentsRequest();
request.setBody(documents);
PushDocumentsResponse response = client.pushDocuments(tableName, pkField, request);
String responseBody = response.getBody();
System.out.println("result:" + responseBody);
} catch (TeaException e) {
System.out.println(e.getCode());
System.out.println(e.getMessage());
Map<String, Object> exceptionData = e.getData();
System.out.println(com.aliyun.teautil.Common.toJSONString(exceptionData));
}
}
}Python
from alibabacloud_ha3engine_vector.client import Client
from alibabacloud_ha3engine_vector.models import Config
from alibabacloud_ha3engine_vector import models
from Tea.exceptions import TeaException, RetryError
config = Config(
# Titik akhir API dari instans. Anda dapat melihat titik akhir API di bagian API Endpoint pada halaman Instance Details.
endpoint="http://ha-cn-i7*****605.public.ha.aliyuncs.com",
# Username. Anda dapat melihat username di bagian API Endpoint pada halaman Instance Details.
access_user_name="username",
# Password. Anda dapat mengubah password di bagian API Endpoint pada halaman Instance Details.
access_pass_word="password")
# Inisialisasi client engine.
ha3EngineClient = Client(Config)
def pushDoc():
# Nama tabel tempat dokumen didorong. Format: <ID Instans>_<Nama tabel>.
tableName = "<instance_id>_<table_name>"
try:
documentArrayList = []
# Hanya bidang kunci primer yang diperlukan untuk menghapus dokumen.
delete2DocumentFields = {
"id": 1 # Bidang kunci primer (tipe INT).
}
delete2Document = {
"fields": delete2DocumentFields, # Tambahkan konten dokumen ke struktur delete2Document.
"cmd": "delete" # Jalankan perintah delete untuk menghapus dokumen.
}
optionsHeaders = {}
documentArrayList.append(delete2Document)
pushDocumentsRequest = models.PushDocumentsRequest(
optionsHeaders, documentArrayList
)
# Bidang kunci primer dari dokumen yang datanya akan didorong.
pkField = "id"
response = ha3EngineClient.push_documents(
tableName, pkField, pushDocumentsRequest
)
print(response)
except TeaException as e:
print(f"send request with TeaException : {e}")
except RetryError as e:
print(f"send request with Connection Exception : {e}")
if __name__ == "__main__":
pushDoc()Go
package main
import (
"fmt"
"github.com/alibabacloud-go/tea/tea"
ha3engine "github.com/aliyun/alibabacloud-ha3-go-sdk/client"
)
func main() {
// Buat instans Config.
config := &ha3engine.Config{
// Titik akhir API dari instans. Anda dapat melihat titik akhir API di bagian API Endpoint pada halaman Instance Details.
Endpoint: tea.String("ha-cn-i7*****605.public.ha.aliyuncs.com"),
// Username. Anda dapat melihat username di bagian API Endpoint pada halaman Instance Details.
AccessUserName: tea.String("username"),
// Password. Anda dapat mengubah password di bagian API Endpoint pada halaman Instance Details.
AccessPassWord: tea.String("password"),
}
// Inisialisasi client untuk mengirim permintaan.
client, _clientErr := ha3engine.NewClient(config)
// Jika terjadi kesalahan saat membuat client, cetak kesalahan dan keluar.
if _clientErr != nil {
fmt.Println(_clientErr)
return
}
deleteDoc(client)
}
func deleteDoc(client *ha3engine.Client) {
pushDocumentsRequestModel := &ha3engine.PushDocumentsRequest{}
// Nama tabel tempat dokumen didorong. Format: <ID Instans>_<Nama tabel>.
tableName := "<instance_id>_<table_name>"
// Bidang kunci primer dari dokumen yang datanya akan didorong.
keyField := "<field_pk>"
var array []map[string]interface{}
filed := map[string]interface{}{
"fields": map[string]interface{}{
"id": 2, // Nilai kunci primer dari dokumen yang akan dihapus.
},
"cmd": tea.String("delete"),
}
array = append(array, filed)
pushDocumentsRequestModel.SetBody(array)
// Panggil metode untuk mengirim permintaan.
response, _requestErr := client.PushDocuments(tea.String(tableName), tea.String(keyField), pushDocumentsRequestModel)
// Jika terjadi kesalahan saat mengirim permintaan, cetak kesalahan dan keluar.
if _requestErr != nil {
fmt.Println(_requestErr)
return
}
// Tampilkan tanggapan.
fmt.Println(response)
}Java (mode asinkron)
import com.aliyun.ha3engine.async.AsyncClient;
import com.aliyun.ha3engine.async.models.PushDocumentsRequest;
import com.aliyun.ha3engine.async.models.PushDocumentsResponse;
import com.aliyun.sdk.ha3engine.async.core.AsyncConfigInfoProvider;
import com.aliyun.tea.TeaException;
import darabonba.core.client.ClientOverrideConfiguration;
import org.junit.Before;
import org.junit.Test;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
/**
* @author alibaba
*/
public class DeleteDoc {
/**
* Client engine dari instans OpenSearch Vector Search Edition.
*/
private AsyncClient client;
@Before
public void clientInit() {
// Username dan password yang digunakan untuk mengakses instans. Anda dapat melihat username dan password di bagian API Endpoint pada halaman Instance Details.
AsyncConfigInfoProvider provider = AsyncConfigInfoProvider.create("username", "password");
// Inisialisasi client asinkron.
client = AsyncClient.builder()
.credentialsProvider(provider)
.overrideConfiguration(
ClientOverrideConfiguration.create()
.setEndpointOverride("ha-cn-i7*****605.public.ha.aliyuncs.com")
.setProtocol("http")
).build();
}
@Test
public void delete() throws Exception {
try {
// Nama tabel tempat dokumen didorong. Format: <ID Instans>_<Nama tabel>.
String tableName = "<instance_id>_<table_name>";
// Bidang kunci primer dari dokumen yang datanya akan didorong.
String pkField = "<field_pk>";
// Struktur luar yang digunakan untuk mendorong dokumen. Anda dapat menentukan satu atau beberapa operasi dokumen dalam struktur ini.
ArrayList<Map<String, ?>> documents = new ArrayList<>();
// Dokumen yang akan dihapus.
Map<String, Object> deleteDocument = new HashMap<>();
Map<String, Object> deleteDocumentFields = new HashMap<>();
// Hanya bidang kunci primer yang diperlukan untuk mengidentifikasi dokumen yang akan dihapus.
deleteDocumentFields.put("<field_pk>", "<field_pk_value>");
// Tambahkan konten dokumen ke struktur deleteDocument.
deleteDocument.put("fields", deleteDocumentFields);
// Jalankan perintah delete untuk menghapus dokumen.
deleteDocument.put("cmd", "delete");
documents.add(deleteDocument);
// Dorong data.
PushDocumentsRequest request = PushDocumentsRequest.builder().body(documents).build();
CompletableFuture<PushDocumentsResponse> responseCompletableFuture = client.pushDocuments(tableName, pkField, request);
String responseBody = responseCompletableFuture.get().getBody();
System.out.println("result:" + responseBody);
} catch (ExecutionException | InterruptedException e) {
System.out.println(e.getMessage());
} catch (TeaException e) {
System.out.println(e.getCode());
System.out.println(e.getMessage());
Map<String, Object> exceptionData = e.getData();
System.out.println(com.aliyun.teautil.Common.toJSONString(exceptionData));
}
}
}Langkah berikutnya
Referensi API pembaruan data — format respons dan kode kesalahan untuk permintaan dorong