SDK OpenSearch Vector Search Edition mendukung berbagai strategi kueri. Gunakan tabel berikut untuk memilih pendekatan yang sesuai dengan kasus penggunaan Anda, lalu lanjutkan ke bagian terkait untuk contoh kode.
| Jenis kueri | Gunakan saat |
|---|---|
| Kueri berbasis vektor | Menemukan catatan yang mirip dengan vektor kueri (pencarian tetangga terdekat) |
| Kueri berbasis kunci primer | Mengambil catatan tertentu berdasarkan ID |
| Kueri berbasis prediksi | Mengkueri dengan teks mentah atau gambar — SDK secara otomatis melakukan vektorisasi input |
| Kueri batch | Menjalankan beberapa kueri independen dalam satu permintaan untuk mengurangi overhead jaringan |
| Multi-kueri | Mengkueri satu tabel dengan beberapa sub-kueri dan menggabungkan hasilnya |
| Kueri hibrida menggunakan satu vektor | Menggabungkan skor vektor padat dan vektor jarang dalam satu permintaan |
| Kueri hibrida menggunakan beberapa vektor | Menggabungkan skor vektor padat dan vektor jarang dari beberapa sub-kueri dalam satu permintaan |
| Kueri hibrida berbasis vektor dan teks | Menggabungkan kemiripan vektor dengan pencarian teks lengkap |
Semua contoh menggunakan empat klien SDK yang sama: Java, Python, Go, dan Java (asinkron).
Prasyarat
Sebelum memulai, pastikan Anda telah memiliki:
-
Instans OpenSearch Vector Search Edition
-
Titik akhir instans, username, dan password (tersedia di bagian API Endpoint pada halaman Detail Instans)
-
ID instans (tertera di pojok kiri atas halaman Detail Instans)
Dependencies
Tambahkan dependensi SDK sesuai bahasa pemrograman Anda.
Java
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-sdk-ha3engine-vector</artifactId>
<version>1.1.18</version>
</dependency>
Python
# Memerlukan: Python >=3.6
pip install alibabacloud_ha3engine_vector==1.1.18
Go
go get github.com/aliyun/alibabacloud-ha3-go-sdk@v1.1.18-vector
Java asinkron
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-sdk-ha3engine-async</artifactId>
<version>1.1.8</version>
</dependency>
Parameter konfigurasi
Parameter berikut berlaku untuk SDK Java dan Python. Konfigurasikan saat menginisialisasi klien.
| Parameter | Deskripsi |
|---|---|
endpoint |
Titik akhir internal atau publik instans. Lihat di bagian Network Information dan API Endpoint pada halaman Detail Instans. Aktifkan Public Access untuk mendapatkan titik akhir publik (URL titik akhir berisi kata public). Gunakan titik akhir internal saat mengakses instans dari instans Elastic Compute Service (ECS) pada vSwitch yang sama. |
instance_id |
ID instans. Lihat di pojok kiri atas halaman Detail Instans. |
access_user_name |
Username. Lihat di bagian API Endpoint pada halaman Detail Instans. |
access_pass_word |
Password. Diatur saat pembelian; dapat diubah dari halaman Detail Instans. |
Anda dapat melihat ID instans (misalnya, ha-cn-zpr3dgzxg04) di bagian atas halaman Instance List atau Instance Details.
Sebagai contoh, Username adalah admin dan Password ditampilkan sebagai Set.
Untuk informasi tentang mengonfigurasi daftar izin alamat IP untuk akses titik akhir publik, lihat bagian Network Information di "View instance details."
Kueri berbasis vektor
Kueri berbasis vektor menemukan K catatan teratas yang paling mirip dengan vektor kueri. Masukkan parameter kueri dalam QueryRequest.
Parameter kueri
| Parameter | Wajib | Deskripsi |
|---|---|---|
table_name |
Ya | Nama tabel yang akan dikueri. |
vector |
Ya | Vektor kueri. Dimensinya harus sesuai dengan dimensi indeks vektor. |
vector_count |
Tidak | Jumlah vektor dalam bidang vektor. Atur ke 2 jika bidang tersebut berisi dua vektor. |
top_k |
Tidak | Jumlah hasil yang dikembalikan. |
include_vector |
Tidak | Apakah nilai vektor disertakan dalam respons. |
output_fields |
Tidak | Daftar bidang yang dikembalikan. |
filter |
Tidak | Ekspresi filter untuk mempersempit hasil. Lihat Filter expression. |
search_params |
Tidak | Parameter kueri tambahan. Lihat QcSearcher dan HNSW configuration. |
queries |
Tidak | Daftar sub-kueri yang dieksekusi dalam satu permintaan. |
Kueri sederhana
Java
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Map;
import com.aliyun.ha3engine.vector.Client;
import com.aliyun.ha3engine.vector.models.Config;
import com.aliyun.ha3engine.vector.models.QueryRequest;
import com.aliyun.ha3engine.vector.models.SearchResponse;
import com.aliyun.tea.TeaException;
import org.junit.Before;
import org.junit.Test;
public class Demo {
private Client client;
@Before
public void clientInit() throws Exception {
Config config = new Config();
// ID instans — dapat dilihat di pojok kiri atas halaman Detail Instans.
config.setInstanceId("ha-cn-i7*****605");
// Username — dapat dilihat di bagian API Endpoint pada halaman Detail Instans.
config.setAccessUserName("username");
// Password — diatur saat pembelian; dapat diubah dari halaman Detail Instans.
config.setAccessPassWord("password");
// Titik akhir API — dapat dilihat di bagian API Endpoint pada halaman Detail Instans.
config.setEndpoint("ha-cn-i7*****605.public.ha.aliyuncs.com");
client = new Client(config);
}
@Test
public void query() throws Exception {
try {
QueryRequest request = new QueryRequest();
request.setTableName("gist"); // Wajib.
request.setVector(Arrays.asList(0.183762561f, 0.738372617f)); // Wajib.
request.setTopK(100); // Opsional.
request.setIncludeVector(true); // Opsional.
SearchResponse searchResponse = client.query(request);
System.out.println("Result:\n" + searchResponse.getBody());
} 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, QueryRequest
config = Config(
endpoint="http://ha-cn-i7*****605.public.ha.aliyuncs.com",
access_user_name="username",
access_pass_word="password")
client = Client(config)
request = QueryRequest(
table_name="t1",
vector=[0.1, 0.2, 0.3, 0.4],
vector_count=2,
include_vector=True,
filter="a > 10",
output_fields=["a", "b"],
top_k=10)
result = client.query(request)
Go
package main
import (
"fmt"
"github.com/alibabacloud-go/tea-utils/v2/service"
"github.com/alibabacloud-go/tea/tea"
ha3engine "github.com/aliyun/alibabacloud-ha3-go-sdk/client"
)
func main() {
config := &ha3engine.Config{
Endpoint: tea.String("ha-cn-i7*****605.public.ha.aliyuncs.com"),
AccessUserName: tea.String("username"),
AccessPassWord: tea.String("password"),
RuntimeOptions: &service.RuntimeOptions{
KeepAlive: tea.Bool(true),
MaxIdleConns: tea.Int(1000),
ReadTimeout: tea.Int(1000),
},
}
client, err := ha3engine.NewClient(config)
if err != nil {
fmt.Println(err)
return
}
query(client)
}
func query(client *ha3engine.Client) {
request := &ha3engine.QueryRequest{}
request.SetTableName("test1")
ids := make([]*float32, 4)
ids[0] = tea.Float32(0.1)
ids[1] = tea.Float32(0.2)
ids[2] = tea.Float32(0.3)
ids[3] = tea.Float32(0.4)
request.SetVector(ids)
response, err := client.Query(request)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(response)
}
Java (asinkron)
import com.aliyun.ha3engine.async.AsyncClient;
import com.aliyun.ha3engine.async.models.QueryRequest;
import com.aliyun.ha3engine.async.models.SearchResponse;
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.Arrays;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
public class SimpleQuery {
private AsyncClient client;
@Before
public void clientInit() {
AsyncConfigInfoProvider provider = AsyncConfigInfoProvider.create("username", "password");
client = AsyncClient.builder()
.credentialsProvider(provider)
.overrideConfiguration(
ClientOverrideConfiguration.create()
.setEndpointOverride("ha-cn-i7*****605.public.ha.aliyuncs.com")
.setProtocol("http")
).build();
}
@Test
public void simpleQuery() {
try {
QueryRequest queryRequest = QueryRequest.builder()
.tableName("table_name")
.indexName("index_name")
.vector(Arrays.asList(0.0001575F, 0.00682848F))
.topK(10)
.includeVector(true)
.build();
CompletableFuture<SearchResponse> future = client.query(queryRequest);
String responseBody = future.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));
}
}
}
Kueri berbasis beberapa vektor
Tentukan beberapa vektor dalam satu permintaan. SDK menggabungkan hasil dan mengembalikan K catatan teratas dari semua vektor.
Java
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Map;
import com.aliyun.ha3engine.vector.Client;
import com.aliyun.ha3engine.vector.models.Config;
import com.aliyun.ha3engine.vector.models.QueryRequest;
import com.aliyun.ha3engine.vector.models.SearchResponse;
import com.aliyun.tea.TeaException;
import org.junit.Before;
import org.junit.Test;
public class Demo {
private Client client;
@Before
public void clientInit() throws Exception {
Config config = new Config();
config.setInstanceId("ha-cn-i7*****605");
config.setAccessUserName("username");
config.setAccessPassWord("password");
config.setEndpoint("ha-cn-i7*****605.public.ha.aliyuncs.com");
client = new Client(config);
}
@Test
public void query() throws Exception {
try {
QueryRequest request = new QueryRequest();
request.setTableName("gist");
request.setVector(Arrays.asList(0.183762561f, 0.738372617f));
request.setNamespace("namespace");
request.setTopK(100);
request.setIncludeVector(true);
SearchResponse searchResponse = client.query(request);
System.out.println("Result:\n" + searchResponse.getBody());
} 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, QueryRequest
config = Config(
endpoint="http://ha-cn-i7*****605.public.ha.aliyuncs.com",
access_user_name="username",
access_pass_word="password")
client = Client(config)
request = QueryRequest(
table_name="t1",
vector=[0.1, 0.2, 0.3, 0.4],
vector_count=2,
include_vector=True,
filter="a > 10",
output_fields=["a", "b"],
top_k=10)
result = client.query(request)
Go
package main
import (
"fmt"
"github.com/alibabacloud-go/tea-utils/v2/service"
"github.com/alibabacloud-go/tea/tea"
ha3engine "github.com/aliyun/alibabacloud-ha3-go-sdk/client"
)
func main() {
config := &ha3engine.Config{
Endpoint: tea.String("ha-cn-i7*****605.public.ha.aliyuncs.com"),
AccessUserName: tea.String("username"),
AccessPassWord: tea.String("password"),
RuntimeOptions: &service.RuntimeOptions{
KeepAlive: tea.Bool(true),
MaxIdleConns: tea.Int(1000),
ReadTimeout: tea.Int(1000),
},
}
client, err := ha3engine.NewClient(config)
if err != nil {
fmt.Println(err)
return
}
nameSpaceQuery(client)
}
func nameSpaceQuery(client *ha3engine.Client) {
request := &ha3engine.QueryRequest{}
request.SetTableName("test1")
ids := make([]*float32, 4)
ids[0] = tea.Float32(0.1)
ids[1] = tea.Float32(0.2)
ids[2] = tea.Float32(0.3)
ids[3] = tea.Float32(0.4)
request.SetVector(ids)
request.SetNamespace("1")
response, err := client.Query(request)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(response)
}
Java (asinkron)
import com.aliyun.ha3engine.async.AsyncClient;
import com.aliyun.ha3engine.async.models.QueryRequest;
import com.aliyun.ha3engine.async.models.SearchResponse;
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.Arrays;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
public class NameSpaceQuery {
private AsyncClient client;
@Before
public void clientInit() {
AsyncConfigInfoProvider provider = AsyncConfigInfoProvider.create("username", "password");
client = AsyncClient.builder()
.credentialsProvider(provider)
.overrideConfiguration(
ClientOverrideConfiguration.create()
.setEndpointOverride("ha-cn-i7*****605.public.ha.aliyuncs.com")
.setProtocol("http")
).build();
}
@Test
public void nameSpaceQuery() {
try {
QueryRequest queryRequest = QueryRequest.builder()
.tableName("test1")
.indexName("vector")
.namespace("1")
.vector(Arrays.asList(0.62498F, 0.886408F, 0.586114F, 0.043189F))
.topK(10)
.includeVector(false)
.build();
CompletableFuture<SearchResponse> future = client.query(queryRequest);
String responseBody = future.get().getBody();
System.out.println("query 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));
}
}
}
Kueri berbasis namespace
Namespace mempartisi indeks vektor menjadi subset terisolasi. Saat namespace dikonfigurasi pada indeks vektor, setiap kueri terhadap indeks tersebut harus menyertakan namespace.
Jika Anda mengonfigurasi namespace untuk indeks vektor, Anda harus menentukan namespace tersebut dalam semua kueri terhadap indeks tersebut.
Java
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Map;
import com.aliyun.ha3engine.vector.Client;
import com.aliyun.ha3engine.vector.models.Config;
import com.aliyun.ha3engine.vector.models.QueryRequest;
import com.aliyun.ha3engine.vector.models.SearchResponse;
import com.aliyun.tea.TeaException;
import org.junit.Before;
import org.junit.Test;
public class Demo {
private Client client;
@Before
public void clientInit() throws Exception {
Config config = new Config();
config.setInstanceId("ha-cn-i7*****605");
config.setAccessUserName("username");
config.setAccessPassWord("password");
config.setEndpoint("ha-cn-i7*****605.public.ha.aliyuncs.com");
client = new Client(config);
}
@Test
public void query() throws Exception {
try {
QueryRequest request = new QueryRequest();
request.setTableName("gist");
request.setVector(Arrays.asList(0.183762561f, 0.738372617f));
request.setNamespace("namespace");
request.setTopK(100);
request.setIncludeVector(true);
SearchResponse searchResponse = client.query(request);
System.out.println("Result:\n" + searchResponse.getBody());
} 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, QueryRequest
config = Config(
endpoint="http://ha-cn-i7*****605.public.ha.aliyuncs.com",
access_user_name="username",
access_pass_word="password")
client = Client(config)
request = QueryRequest(
table_name="t1",
namespace="space_b",
vector=[0.1, 0.2],
include_vector=True,
top_k=10)
result = client.query(request)
Go
package main
import (
"fmt"
"github.com/alibabacloud-go/tea-utils/v2/service"
"github.com/alibabacloud-go/tea/tea"
ha3engine "github.com/aliyun/alibabacloud-ha3-go-sdk/client"
)
func main() {
config := &ha3engine.Config{
Endpoint: tea.String("ha-cn-i7*****605.public.ha.aliyuncs.com"),
AccessUserName: tea.String("username"),
AccessPassWord: tea.String("password"),
RuntimeOptions: &service.RuntimeOptions{
KeepAlive: tea.Bool(true),
MaxIdleConns: tea.Int(1000),
ReadTimeout: tea.Int(1000),
},
}
client, err := ha3engine.NewClient(config)
if err != nil {
fmt.Println(err)
return
}
nameSpaceQuery(client)
}
func nameSpaceQuery(client *ha3engine.Client) {
request := &ha3engine.QueryRequest{}
request.SetTableName("test1")
ids := make([]*float32, 4)
ids[0] = tea.Float32(0.1)
ids[1] = tea.Float32(0.2)
ids[2] = tea.Float32(0.3)
ids[3] = tea.Float32(0.4)
request.SetVector(ids)
request.SetNamespace("1")
response, err := client.Query(request)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(response)
}
Java (asinkron)
import com.aliyun.ha3engine.async.AsyncClient;
import com.aliyun.ha3engine.async.models.QueryRequest;
import com.aliyun.ha3engine.async.models.SearchResponse;
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.Arrays;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
public class NameSpaceQuery {
private AsyncClient client;
@Before
public void clientInit() {
AsyncConfigInfoProvider provider = AsyncConfigInfoProvider.create("username", "password");
client = AsyncClient.builder()
.credentialsProvider(provider)
.overrideConfiguration(
ClientOverrideConfiguration.create()
.setEndpointOverride("ha-cn-i7*****605.public.ha.aliyuncs.com")
.setProtocol("http")
).build();
}
@Test
public void nameSpaceQuery() {
try {
QueryRequest queryRequest = QueryRequest.builder()
.tableName("test1")
.indexName("vector")
.namespace("1")
.vector(Arrays.asList(0.62498F, 0.886408F, 0.586114F, 0.043189F))
.topK(10)
.includeVector(false)
.build();
CompletableFuture<SearchResponse> future = client.query(queryRequest);
String responseBody = future.get().getBody();
System.out.println("query 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));
}
}
}
Kueri berbasis beberapa namespace
Kirim satu permintaan yang menargetkan beberapa namespace dan menerima hasil gabungan.
Java
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Map;
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;
public class Demo {
private Client client;
@Before
public void clientInit() throws Exception {
Config config = new Config();
config.setInstanceId("ha-cn-i7*****605");
config.setAccessUserName("username");
config.setAccessPassWord("password");
config.setEndpoint("ha-cn-i7*****605.public.ha.aliyuncs.com");
client = new Client(config);
}
@Test
public void multiQuery() throws Exception {
try {
MultiQueryRequest request = new MultiQueryRequest();
request.setTableName("gist");
request.setTopK(3);
request.setIncludeVector(true);
QueryRequest query1 = new QueryRequest();
query1.setVector(Arrays.asList(0.1f, 0.2f, 0.3f));
query1.setNamespace("space_a");
QueryRequest query2 = new QueryRequest();
query2.setVector(Arrays.asList(0.1f, 0.2f, 0.3f));
query2.setNamespace("space_b");
request.setQueries(Arrays.asList(query1, query2));
SearchResponse searchResponse = client.multiQuery(request);
System.out.println("Result:\n" + searchResponse.getBody());
} 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, QueryRequest, MultiQueryRequest
config = Config(
endpoint="http://ha-cn-i7*****605.public.ha.aliyuncs.com",
access_user_name="username",
access_pass_word="password")
client = Client(config)
q1 = QueryRequest(vector=[0.1, 0.2, 0.3], namespace="space_a")
q2 = QueryRequest(vector=[0.4, 0.5, 0.6], namespace="space_b")
request = MultiQueryRequest(
table_name="gist",
queries=[q1, q2],
top_k=3,
include_vector=True)
result = client.multi_query(request)
Go
package main
import (
"fmt"
"github.com/alibabacloud-go/tea-utils/v2/service"
"github.com/alibabacloud-go/tea/tea"
ha3engine "github.com/aliyun/alibabacloud-ha3-go-sdk/client"
)
func main() {
config := &ha3engine.Config{
Endpoint: tea.String("ha-cn-i7*****605.public.ha.aliyuncs.com"),
AccessUserName: tea.String("username"),
AccessPassWord: tea.String("password"),
RuntimeOptions: &service.RuntimeOptions{
KeepAlive: tea.Bool(true),
MaxIdleConns: tea.Int(1000),
ReadTimeout: tea.Int(1000),
},
}
client, err := ha3engine.NewClient(config)
if err != nil {
fmt.Println(err)
return
}
multiNameSpaceQuery(client)
}
func multiNameSpaceQuery(client *ha3engine.Client) {
array := make([]*float32, 4)
value1, value2, value3, value4 := float32(1.23), float32(4.56), float32(7.89), float32(7.89)
array[0] = &value1
array[1] = &value2
array[2] = &value3
array[3] = &value4
query1 := &ha3engine.QueryRequest{}
query1.SetVector(array)
query1.SetNamespace("space_a")
query2 := &ha3engine.QueryRequest{}
query2.SetVector(array)
query2.SetNamespace("space_b")
request := &ha3engine.MultiQueryRequest{}
request.SetTableName("test2")
queries := make([]*ha3engine.QueryRequest, 2)
queries[0] = query1
queries[1] = query2
request.SetQueries(queries)
request.SetTopK(10)
request.SetIncludeVector(false)
request.SetOrder("DESC")
response, err := client.MultiQuery(request)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(response)
}
Java (asinkron)
import com.aliyun.ha3engine.async.AsyncClient;
import com.aliyun.ha3engine.async.models.MultiQueryRequest;
import com.aliyun.ha3engine.async.models.QueryRequest;
import com.aliyun.ha3engine.async.models.SearchResponse;
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.Arrays;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
public class MultiNameSpaceQuery {
private AsyncClient client;
@Before
public void clientInit() {
AsyncConfigInfoProvider provider = AsyncConfigInfoProvider.create("username", "password");
client = AsyncClient.builder()
.credentialsProvider(provider)
.overrideConfiguration(
ClientOverrideConfiguration.create()
.setEndpointOverride("ha-cn-i7*****605.public.ha.aliyuncs.com")
.setProtocol("http")
).build();
}
@Test
public void multiNameSpaceQuery() {
try {
QueryRequest query1 = QueryRequest.builder()
.vector(Arrays.asList(0.62498F, 0.886408F, 0.586114F, 0.043189F))
.namespace("space_a")
.build();
QueryRequest query2 = QueryRequest.builder()
.vector(Arrays.asList(0.62498F, 0.886408F, 0.586114F, 0.043189F))
.namespace("space_b")
.build();
MultiQueryRequest request = MultiQueryRequest.builder()
.tableName("test1")
.topK(3)
.includeVector(false)
.queries(Arrays.asList(query1, query2))
.build();
CompletableFuture<SearchResponse> future = client.multiQuery(request);
String responseBody = future.get().getBody();
System.out.println("multiQuery 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));
}
}
}
Kueri menggunakan kondisi filter
Tambahkan ekspresi filter ke kueri vektor apa pun untuk membatasi hasil hanya pada catatan yang sesuai. Untuk sintaks filter lengkap, lihat Filter expression.
Java
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Map;
import com.aliyun.ha3engine.vector.Client;
import com.aliyun.ha3engine.vector.models.Config;
import com.aliyun.ha3engine.vector.models.QueryRequest;
import com.aliyun.ha3engine.vector.models.SearchResponse;
import com.aliyun.tea.TeaException;
import org.junit.Before;
import org.junit.Test;
public class Demo {
private Client client;
@Before
public void clientInit() throws Exception {
Config config = new Config();
config.setInstanceId("ha-cn-i7*****605");
config.setAccessUserName("username");
config.setAccessPassWord("password");
config.setEndpoint("ha-cn-i7*****605.public.ha.aliyuncs.com");
client = new Client(config);
}
@Test
public void query() throws Exception {
try {
QueryRequest request = new QueryRequest();
request.setTableName("gist");
request.setVector(Arrays.asList(0.183762561f, 0.738372617f));
request.setTopK(100);
request.setIncludeVector(true);
request.setOutputFields(new ArrayList<String>());
request.setFilter("a>10");
SearchResponse searchResponse = client.query(request);
System.out.println("Result:\n" + searchResponse.getBody());
} 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, QueryRequest
config = Config(
endpoint="http://ha-cn-i7*****605.public.ha.aliyuncs.com",
access_user_name="username",
access_pass_word="password")
client = Client(config)
request = QueryRequest(
table_name="t1",
vector=[0.1, 0.2],
include_vector=True,
filter="a > 10",
output_fields=["a", "b"],
top_k=10)
result = client.query(request)
Go
package main
import (
"fmt"
"github.com/alibabacloud-go/tea-utils/v2/service"
"github.com/alibabacloud-go/tea/tea"
ha3engine "github.com/aliyun/alibabacloud-ha3-go-sdk/client"
)
func main() {
config := &ha3engine.Config{
Endpoint: tea.String("ha-cn-i7*****605.public.ha.aliyuncs.com"),
AccessUserName: tea.String("username"),
AccessPassWord: tea.String("password"),
RuntimeOptions: &service.RuntimeOptions{
KeepAlive: tea.Bool(true),
MaxIdleConns: tea.Int(1000),
ReadTimeout: tea.Int(1000),
},
}
client, err := ha3engine.NewClient(config)
if err != nil {
fmt.Println(err)
return
}
filterQuery(client)
}
func filterQuery(client *ha3engine.Client) {
request := &ha3engine.QueryRequest{}
request.SetTableName("test1")
ids := make([]*float32, 4)
ids[0] = tea.Float32(0.1)
ids[1] = tea.Float32(0.2)
ids[2] = tea.Float32(0.3)
ids[3] = tea.Float32(0.4)
request.SetVector(ids)
request.SetFilter("count>25")
response, err := client.Query(request)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(response)
}
Java (asinkron)
import com.aliyun.ha3engine.async.AsyncClient;
import com.aliyun.ha3engine.async.models.QueryRequest;
import com.aliyun.ha3engine.async.models.SearchResponse;
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.Arrays;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
public class FilterQuery {
private AsyncClient client;
@Before
public void clientInit() {
AsyncConfigInfoProvider provider = AsyncConfigInfoProvider.create("username", "password");
client = AsyncClient.builder()
.credentialsProvider(provider)
.overrideConfiguration(
ClientOverrideConfiguration.create()
.setEndpointOverride("ha-cn-i7*****605.public.ha.aliyuncs.com")
.setProtocol("http")
).build();
}
@Test
public void filterQuery() {
try {
QueryRequest queryRequest = QueryRequest.builder()
.tableName("test1")
.indexName("vector")
.vector(Arrays.asList(0.62498F, 0.886408F, 0.586114F, 0.043189F))
.topK(10)
.filter("count>25")
.includeVector(false)
.build();
CompletableFuture<SearchResponse> future = client.query(queryRequest);
String responseBody = future.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));
}
}
}
Kueri berbasis kunci primer
Ambil catatan tertentu berdasarkan ID kunci primernya menggunakan FetchRequest. Ini merupakan pencarian langsung—tanpa perhitungan skor kemiripan vektor.
Java
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Map;
import com.aliyun.ha3engine.vector.Client;
import com.aliyun.ha3engine.vector.models.Config;
import com.aliyun.ha3engine.vector.models.FetchRequest;
import com.aliyun.ha3engine.vector.models.SearchResponse;
import com.aliyun.tea.TeaException;
import org.junit.Before;
import org.junit.Test;
public class Demo {
private Client client;
@Before
public void clientInit() throws Exception {
Config config = new Config();
config.setInstanceId("ha-cn-i7*****605");
config.setAccessUserName("username");
config.setAccessPassWord("password");
config.setEndpoint("ha-cn-i7*****605.public.ha.aliyuncs.com");
client = new Client(config);
}
@Test
public void fetch() throws Exception {
try {
FetchRequest request = new FetchRequest();
request.setTableName("gist");
request.setIds(Arrays.asList("1", "2"));
SearchResponse searchResponse = client.fetch(request);
System.out.println("Result:\n" + searchResponse.getBody());
} 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, FetchRequest
config = Config(
endpoint="http://ha-cn-i7*****605.public.ha.aliyuncs.com",
access_user_name="username",
access_pass_word="password")
client = Client(config)
request = FetchRequest(table_name="gist", ids=["1", "2"])
result = client.fetch(request)
Go
package main
import (
"fmt"
"github.com/alibabacloud-go/tea-utils/v2/service"
"github.com/alibabacloud-go/tea/tea"
ha3engine "github.com/aliyun/alibabacloud-ha3-go-sdk/client"
)
func main() {
config := &ha3engine.Config{
Endpoint: tea.String("ha-cn-i7*****605.public.ha.aliyuncs.com"),
AccessUserName: tea.String("username"),
AccessPassWord: tea.String("password"),
RuntimeOptions: &service.RuntimeOptions{
KeepAlive: tea.Bool(true),
MaxIdleConns: tea.Int(1000),
ReadTimeout: tea.Int(1000),
},
}
client, err := ha3engine.NewClient(config)
if err != nil {
fmt.Println(err)
return
}
fetch(client)
}
func fetch(client *ha3engine.Client) {
request := &ha3engine.FetchRequest{}
request.SetTableName("test1")
ids := make([]*string, 3)
ids[0] = tea.String("1")
ids[1] = tea.String("2")
ids[2] = tea.String("3")
request.SetIds(ids)
response, err := client.Fetch(request)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(response)
}
Java (asinkron)
import com.aliyun.ha3engine.async.AsyncClient;
import com.aliyun.ha3engine.async.models.FetchRequest;
import com.aliyun.ha3engine.async.models.SearchResponse;
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.Arrays;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
public class PrimaryKeyQuery {
private AsyncClient client;
@Before
public void clientInit() {
AsyncConfigInfoProvider provider = AsyncConfigInfoProvider.create("username", "password");
client = AsyncClient.builder()
.credentialsProvider(provider)
.overrideConfiguration(
ClientOverrideConfiguration.create()
.setEndpointOverride("ha-cn-i7*****605.public.ha.aliyuncs.com")
.setProtocol("http")
).build();
}
@Test
public void primaryKeyQuery() {
try {
FetchRequest fetchRequest = FetchRequest.builder()
.tableName("table_name")
.ids(Arrays.asList("1", "2"))
.build();
CompletableFuture<SearchResponse> future = client.fetch(fetchRequest);
String responseBody = future.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));
}
}
}
Kueri berbasis prediksi
Gunakan kueri berbasis prediksi ketika OpenSearch Vector Search Edition melakukan vektorisasi input untuk Anda—masukkan data teks mentah atau gambar dan biarkan layanan mengonversinya menjadi vektor sebelum menjalankan pencarian.
Dua parameter mengontrol vektorisasi:
-
content: Input yang akan divectorisasi. Dalam skenario vektorisasi teks, berikan teks. Dalam skenario vektorisasi gambar, berikan teks atau gambar yang dikodekan Base64. -
modal: Modalitas. Atur ketextuntuk mengkueri berdasarkan teks baik dalam skenario vektorisasi teks maupun gambar.
Java
import com.aliyun.ha3engine.vector.Client;
import com.aliyun.ha3engine.vector.models.Config;
import com.aliyun.ha3engine.vector.models.QueryRequest;
import com.aliyun.ha3engine.vector.models.SearchResponse;
import com.aliyun.tea.TeaException;
import org.junit.Before;
import org.junit.Test;
import java.util.Map;
public class InferenceQuery {
private Client client;
@Before
public void clientInit() throws Exception {
Config config = new Config();
config.setInstanceId("ha-cn-i7*****605");
config.setAccessUserName("username");
config.setAccessPassWord("password");
config.setEndpoint("ha-cn-i7*****605.public.ha.aliyuncs.com");
client = new Client(config);
}
@Test
public void inferenceQuery() throws Exception {
try {
QueryRequest request = new QueryRequest();
request.setTableName("test");
request.setContent("Child"); // Konten yang akan divectorisasi.
request.setModal("text"); // Modalitas.
request.setTopK(100);
request.setSearchParams("{\\\"qc.searcher.scan_ratio\\\":0.01}");
SearchResponse searchResponse = client.inferenceQuery(request);
System.out.println("Result:\n" + searchResponse.getBody());
} 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, QueryRequest
config = Config(
endpoint="http://ha-cn-i7*****605.public.ha.aliyuncs.com",
access_user_name="username",
access_pass_word="password")
client = Client(config)
def inference_query():
request = QueryRequest(
table_name="test",
content="Puppy",
modal="text",
namespace="123",
search_params="{\\\"qc.searcher.scan_ratio\\\":0.01}",
top_k=10)
result = client.inference_query(request)
print(result.body)
if __name__ == "__main__":
inference_query()
Go
package main
import (
"fmt"
"github.com/alibabacloud-go/tea-utils/v2/service"
"github.com/alibabacloud-go/tea/tea"
ha3engine "github.com/aliyun/alibabacloud-ha3-go-sdk/client"
)
func main() {
config := &ha3engine.Config{
Endpoint: tea.String("ha-cn-i7*****605.public.ha.aliyuncs.com"),
AccessUserName: tea.String("username"),
AccessPassWord: tea.String("password"),
RuntimeOptions: &service.RuntimeOptions{
KeepAlive: tea.Bool(true),
MaxIdleConns: tea.Int(1000),
ReadTimeout: tea.Int(1000),
},
}
client, err := ha3engine.NewClient(config)
if err != nil {
fmt.Println(err)
return
}
inferenceQuery(client)
}
func inferenceQuery(client *ha3engine.Client) {
request := &ha3engine.QueryRequest{}
request.SetTableName("test1")
request.SetContent("Puppy")
request.SetNamespace("123")
request.SetModal("text")
response, err := client.InferenceQuery(request)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(response)
}
Java (asinkron)
import com.aliyun.ha3engine.async.AsyncClient;
import com.aliyun.ha3engine.async.models.QueryRequest;
import com.aliyun.ha3engine.async.models.SearchResponse;
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.Map;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
public class InferenceQuery {
private AsyncClient client;
@Before
public void clientInit() {
AsyncConfigInfoProvider provider = AsyncConfigInfoProvider.create("username", "password");
client = AsyncClient.builder()
.credentialsProvider(provider)
.overrideConfiguration(
ClientOverrideConfiguration.create()
.setEndpointOverride("ha-cn-i7*****605.public.ha.aliyuncs.com")
.setProtocol("http")
).build();
}
@Test
public void inferenceQuery() {
try {
QueryRequest queryRequest = QueryRequest.builder()
.tableName("test2")
.indexName("source_text_vector")
.namespace("1")
.modal("text")
.content("Test text-to-vector conversion")
.topK(10)
.includeVector(false)
.build();
CompletableFuture<SearchResponse> future = client.inferenceQuery(queryRequest);
String responseBody = future.get().getBody();
System.out.println("queryInference 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));
}
}
}
Multi-kueri
Gunakan MultiQueryRequest untuk mengirim beberapa sub-kueri vektor terhadap satu tabel dalam satu permintaan. Hasil dari semua sub-kueri digabung dan dikembalikan bersama.
Java
import java.util.Arrays;
import java.util.Map;
import com.aliyun.ha3engine.vector.Client;
import com.aliyun.ha3engine.vector.models.Config;
import com.aliyun.ha3engine.vector.models.MultiQueryRequest;
import com.aliyun.ha3engine.vector.models.QueryRequest;
import com.aliyun.ha3engine.vector.models.SearchResponse;
import com.aliyun.tea.TeaException;
import org.junit.Before;
import org.junit.Test;
public class Demo {
private Client client;
@Before
public void clientInit() throws Exception {
Config config = new Config();
config.setInstanceId("ha-cn-i7*****605");
config.setAccessUserName("username");
config.setAccessPassWord("password");
config.setEndpoint("ha-cn-i7*****605.public.ha.aliyuncs.com");
client = new Client(config);
}
@Test
public void query() throws Exception {
try {
MultiQueryRequest multiQueryRequest = new MultiQueryRequest();
multiQueryRequest.setTableName("test1");
multiQueryRequest.setTopK(50);
multiQueryRequest.setOutputFields(Arrays.asList("content", "name", "age"));
multiQueryRequest.setOrder("DESC");
QueryRequest queryRequest = new QueryRequest();
queryRequest.setIndexName("vector");
queryRequest.setNamespace("space_a");
queryRequest.setVector(Arrays.asList(0.62498F, 0.886408F, 0.586114F, 0.043189F));
multiQueryRequest.setQueries(Arrays.asList(queryRequest));
SearchResponse searchResponse = client.multiQuery(multiQueryRequest);
System.out.println(searchResponse.getBody());
} 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, MultiQueryRequest, QueryRequest
config = Config(
endpoint="http://ha-cn-i7*****605.public.ha.aliyuncs.com",
access_user_name="username",
access_pass_word="password")
client = Client(config)
def multi_query():
query1 = QueryRequest(
table_name="test",
vector=[0.1, 0.2, 0.3, 0.4],
include_vector=True,
search_params="{\\\"qc.searcher.scan_ratio\\\":0.01}",
top_k=10)
request = MultiQueryRequest(
table_name="test",
queries=[query1],
top_k=10)
result = client.multi_query(request)
print(result.body)
if __name__ == "__main__":
multi_query()
Go
package main
import (
"fmt"
"github.com/alibabacloud-go/tea-utils/v2/service"
"github.com/alibabacloud-go/tea/tea"
ha3engine "github.com/aliyun/alibabacloud-ha3-go-sdk/client"
)
func main() {
config := &ha3engine.Config{
Endpoint: tea.String("ha-cn-i7*****605.public.ha.aliyuncs.com"),
AccessUserName: tea.String("username"),
AccessPassWord: tea.String("password"),
RuntimeOptions: &service.RuntimeOptions{
KeepAlive: tea.Bool(true),
MaxIdleConns: tea.Int(1000),
ReadTimeout: tea.Int(1000),
},
}
client, err := ha3engine.NewClient(config)
if err != nil {
fmt.Println(err)
return
}
multiQuery(client)
}
func multiQuery(client *ha3engine.Client) {
query := &ha3engine.QueryRequest{}
query.SetTableName("test1")
array := make([]*float32, 4)
v1, v2, v3, v4 := float32(1.23), float32(4.56), float32(7.89), float32(7.89)
array[0] = &v1
array[1] = &v2
array[2] = &v3
array[3] = &v4
query.SetVector(array)
request := &ha3engine.MultiQueryRequest{}
request.SetTableName("test1")
queries := make([]*ha3engine.QueryRequest, 1)
queries[0] = query
request.SetQueries(queries)
request.SetTopK(10)
request.SetIncludeVector(true)
request.SetOrder("DESC")
response, err := client.MultiQuery(request)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(response)
}
Java (asinkron)
import com.aliyun.ha3engine.async.AsyncClient;
import com.aliyun.ha3engine.async.models.MultiQueryRequest;
import com.aliyun.ha3engine.async.models.QueryRequest;
import com.aliyun.ha3engine.async.models.SearchResponse;
import com.aliyun.ha3engine.async.models.SparseData;
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.Arrays;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
public class MixMultiVectorQuery {
private AsyncClient client;
@Before
public void clientInit() {
AsyncConfigInfoProvider provider = AsyncConfigInfoProvider.create("username", "password");
client = AsyncClient.builder()
.credentialsProvider(provider)
.overrideConfiguration(
ClientOverrideConfiguration.create()
.setEndpointOverride("ha-cn-i7*****605.public.ha.aliyuncs.com")
.setProtocol("http")
).build();
}
@Test
public void mixMultiVectorQuery() {
try {
QueryRequest query1 = QueryRequest.builder()
.vector(Arrays.asList(0.62498F, 0.886408F, 0.586114F, 0.043189F))
.sparseData(SparseData.builder()
.count(Arrays.asList(2))
.indices(Arrays.asList(1L, 2L))
.values(Arrays.asList(0.1F, 0.2F))
.build())
.namespace("space_a")
.build();
QueryRequest query2 = QueryRequest.builder()
.vector(Arrays.asList(0.62498F, 0.886408F, 0.586114F, 0.043189F))
.sparseData(SparseData.builder()
.count(Arrays.asList(2))
.indices(Arrays.asList(1L, 2L))
.values(Arrays.asList(0.1F, 0.2F))
.build())
.namespace("space_b")
.build();
MultiQueryRequest request = MultiQueryRequest.builder()
.tableName("test2")
.topK(3)
.includeVector(false)
.queries(Arrays.asList(query1, query2))
.build();
CompletableFuture<SearchResponse> future = client.multiQuery(request);
String responseBody = future.get().getBody();
System.out.println("hasil kueri: " + 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));
}
}
}
Kueri batch
Gunakan BatchRequest untuk mengirim beberapa kueri independen—masing-masing menargetkan tabel dan indeks yang berpotensi berbeda—dalam satu permintaan HTTP. Pendekatan ini mengurangi round trip jaringan dan memungkinkan perencana kueri mengoptimalkan kueri yang berbagi filter yang sama.
Java
import com.aliyun.ha3engine.vector.Client;
import com.aliyun.ha3engine.vector.models.BatchRequest;
import com.aliyun.ha3engine.vector.models.Config;
import com.aliyun.ha3engine.vector.models.QueryRequest;
import com.aliyun.ha3engine.vector.models.SearchResponse;
import com.aliyun.tea.TeaException;
import org.junit.Before;
import org.junit.Test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
public class BatchQuery {
private Client client;
@Before
public void clientInit() throws Exception {
Config config = new Config();
config.setInstanceId("ha-cn-i7*****605");
config.setAccessUserName("username");
config.setAccessPassWord("password");
config.setEndpoint("ha-cn-i7*****605.public.ha.aliyuncs.com");
client = new Client(config);
}
@Test
public void batch() throws Exception {
try {
BatchRequest request = new BatchRequest();
QueryRequest queryRequest1 = new QueryRequest();
queryRequest1.setTableName("test");
queryRequest1.setIndexName("vector");
queryRequest1.setOutputFields(Arrays.asList("id", "name"));
queryRequest1.setVector(Arrays.asList(0.62498F, 0.886408F, 0.586114F, 0.043189F));
QueryRequest queryRequest2 = new QueryRequest();
queryRequest2.setTableName("test1");
queryRequest2.setIndexName("vector");
queryRequest2.setOutputFields(Arrays.asList("id", "title"));
queryRequest2.setVector(Arrays.asList(0.62498F, 0.886408F, 0.586114F, 0.043189F));
List<QueryRequest> queries = new ArrayList<>();
queries.add(queryRequest1);
queries.add(queryRequest2);
request.setQueries(queries);
SearchResponse searchResponse = client.batch(request);
System.out.println("Result:\n" + searchResponse.getBody());
} 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, QueryRequest, BatchRequest
config = Config(
endpoint="http://ha-cn-i7*****605.public.ha.aliyuncs.com",
access_user_name="username",
access_pass_word="password")
client = Client(config)
def batch_query():
query_request1 = QueryRequest(
table_name="test",
index_name="vector",
vector=[0.524355, 0.940892, 0.002874, 0.551031],
include_vector=True,
search_params="{\\\"qc.searcher.scan_ratio\\\":0.01}",
top_k=10)
query_request2 = QueryRequest(
table_name="test1",
index_name="vector",
vector=[0.524355, 0.940892, 0.002874, 0.551031],
include_vector=True,
search_params="{\\\"qc.searcher.scan_ratio\\\":0.01}",
top_k=10)
request = BatchRequest(queries=[query_request1, query_request2])
result = client.batch_query(request)
print(result.headers)
print(result.body)
if __name__ == "__main__":
batch_query()
Go
package main
import (
"fmt"
"github.com/alibabacloud-go/tea-utils/v2/service"
"github.com/alibabacloud-go/tea/tea"
ha3engine "github.com/aliyun/alibabacloud-ha3-go-sdk/client"
)
func main() {
config := &ha3engine.Config{
Endpoint: tea.String("ha-cn-i7*****605.public.ha.aliyuncs.com"),
AccessUserName: tea.String("username"),
AccessPassWord: tea.String("password"),
RuntimeOptions: &service.RuntimeOptions{
KeepAlive: tea.Bool(true),
MaxIdleConns: tea.Int(1000),
ReadTimeout: tea.Int(1000),
},
}
client, err := ha3engine.NewClient(config)
if err != nil {
fmt.Println(err)
return
}
batch(client)
}
func batch(client *ha3engine.Client) {
queryRequest1 := &ha3engine.QueryRequest{}
queryRequest1.SetTableName("test")
ids1 := make([]*float32, 4)
ids1[0] = tea.Float32(0.1)
ids1[1] = tea.Float32(0.2)
ids1[2] = tea.Float32(0.3)
ids1[3] = tea.Float32(0.4)
queryRequest1.SetVector(ids1)
queryRequest2 := &ha3engine.QueryRequest{}
queryRequest2.SetTableName("test1")
ids2 := make([]*float32, 4)
ids2[0] = tea.Float32(0.1)
ids2[1] = tea.Float32(0.2)
ids2[2] = tea.Float32(0.3)
ids2[3] = tea.Float32(0.4)
queryRequest2.SetVector(ids2)
batchRequest := &ha3engine.BatchRequest{}
batchRequest.SetQueries([]*ha3engine.QueryRequest{queryRequest1, queryRequest2})
response, err := client.BatchQuery(batchRequest)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(response)
}
Java (asinkron)
import com.aliyun.ha3engine.async.AsyncClient;
import com.aliyun.ha3engine.async.models.BatchRequest;
import com.aliyun.ha3engine.async.models.QueryRequest;
import com.aliyun.ha3engine.async.models.SearchResponse;
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.Arrays;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
public class BatchQuery {
private AsyncClient client;
@Before
public void clientInit() {
AsyncConfigInfoProvider provider = AsyncConfigInfoProvider.create("username", "password");
client = AsyncClient.builder()
.credentialsProvider(provider)
.overrideConfiguration(
ClientOverrideConfiguration.create()
.setEndpointOverride("ha-cn-i7*****605.public.ha.aliyuncs.com")
.setProtocol("http")
).build();
}
@Test
public void batch() {
try {
QueryRequest queryRequest1 = QueryRequest.builder()
.tableName("test")
.indexName("vector")
.vector(Arrays.asList(0.62498F, 0.886408F, 0.586114F, 0.043189F))
.outputFields(Arrays.asList("id", "name"))
.build();
QueryRequest queryRequest2 = QueryRequest.builder()
.tableName("test1")
.indexName("vector")
.vector(Arrays.asList(0.62498F, 0.886408F, 0.586114F, 0.043189F))
.outputFields(Arrays.asList("id", "title"))
.build();
List<QueryRequest> queries = new ArrayList<>();
queries.add(queryRequest1);
queries.add(queryRequest2);
BatchRequest request = BatchRequest.builder()
.queries(queries)
.build();
CompletableFuture<SearchResponse> future = client.batchQuery(request);
String responseBody = future.get().getBody();
System.out.println("batch 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));
}
}
}
Kueri hibrida menggunakan satu vektor
Gabungkan vektor padat dan vektor jarang dalam satu QueryRequest untuk memanfaatkan kedua sinyal skor secara simultan.
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.Arrays;
import java.util.Map;
public class Demo {
private Client client;
@Before
public void clientInit() throws Exception {
Config config = new Config();
config.setInstanceId("ha-cn-i7*****605");
config.setAccessUserName("username");
config.setAccessPassWord("password");
config.setEndpoint("ha-cn-i7*****605.public.ha.aliyuncs.com");
client = new Client(config);
}
@Test
public void query() throws Exception {
try {
QueryRequest queryRequest = new QueryRequest();
queryRequest.setIndexName("index");
queryRequest.setNamespace("cate1");
queryRequest.setVector(Arrays.asList(0.0001575F, 0.00682848F));
SparseData sparseData = new SparseData();
sparseData.setCount(Arrays.asList(2)); // Jumlah elemen per vektor jarang.
sparseData.setIndices(Arrays.asList(983589459L, 1261855554L)); // Indeks elemen dalam urutan menaik.
sparseData.setValues(Arrays.asList(0.0001575F, 0.00682848F)); // Nilai elemen sesuai urutan indeks.
queryRequest.setSparseData(sparseData);
SearchResponse searchResponse = client.query(queryRequest);
System.out.println(searchResponse.getBody());
} 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, SparseData, QueryRequest
config = Config(
endpoint="http://ha-cn-i7*****605.public.ha.aliyuncs.com",
access_user_name="username",
access_pass_word="password")
client = Client(config)
def mix_query():
sparse_data = SparseData(indices=[101, 203], values=[0.1, 0.5])
request = QueryRequest(
table_name="test",
index_name="embedding",
vector=[0.1, 0.2, 0.3, 0.4],
sparse_data=sparse_data,
include_vector=True,
top_k=10)
result = client.query(request)
print(result.body)
if __name__ == "__main__":
mix_query()
Go
package main
import (
"fmt"
"github.com/alibabacloud-go/tea-utils/v2/service"
"github.com/alibabacloud-go/tea/tea"
ha3engine "github.com/aliyun/alibabacloud-ha3-go-sdk/client"
)
func main() {
config := &ha3engine.Config{
Endpoint: tea.String("ha-cn-i7*****605.public.ha.aliyuncs.com"),
AccessUserName: tea.String("username"),
AccessPassWord: tea.String("password"),
RuntimeOptions: &service.RuntimeOptions{
KeepAlive: tea.Bool(true),
MaxIdleConns: tea.Int(1000),
ReadTimeout: tea.Int(1000),
},
}
client, err := ha3engine.NewClient(config)
if err != nil {
fmt.Println(err)
return
}
mixQuery(client)
}
func mixQuery(client *ha3engine.Client) {
request := &ha3engine.QueryRequest{}
request.SetTableName("test1")
ids := make([]*float32, 4)
ids[0] = tea.Float32(0.1)
ids[1] = tea.Float32(0.2)
ids[2] = tea.Float32(0.3)
ids[3] = tea.Float32(0.4)
request.SetVector(ids)
count := make([]*int, 1)
count[0] = tea.Int(2)
indices := make([]*int64, 2)
indices[0] = tea.Int64(1)
indices[1] = tea.Int64(2)
values := make([]*float32, 2)
values[0] = tea.Float32(0.1)
values[1] = tea.Float32(0.2)
request.SetSparseData(&ha3engine.SparseData{
Count: count,
Indices: indices,
Values: values,
})
response, err := client.Query(request)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(response)
}
Java (asinkron)
import com.aliyun.ha3engine.async.AsyncClient;
import com.aliyun.ha3engine.async.models.QueryRequest;
import com.aliyun.ha3engine.async.models.SearchResponse;
import com.aliyun.ha3engine.async.models.SparseData;
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.Arrays;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
public class MixQuery {
private AsyncClient client;
@Before
public void clientInit() {
AsyncConfigInfoProvider provider = AsyncConfigInfoProvider.create("username", "password");
client = AsyncClient.builder()
.credentialsProvider(provider)
.overrideConfiguration(
ClientOverrideConfiguration.create()
.setEndpointOverride("ha-cn-i7*****605.public.ha.aliyuncs.com")
.setProtocol("http")
).build();
}
@Test
public void mixQuery() {
try {
QueryRequest queryRequest = QueryRequest.builder()
.tableName("test1")
.indexName("vector")
.vector(Arrays.asList(0.62498F, 0.886408F, 0.586114F, 0.043189F))
.sparseData(SparseData.builder()
.count(Arrays.asList(2))
.indices(Arrays.asList(1L, 2L))
.values(Arrays.asList(0.1F, 0.2F))
.build())
.topK(10)
.includeVector(false)
.build();
CompletableFuture<SearchResponse> future = client.query(queryRequest);
String responseBody = future.get().getBody();
System.out.println("query 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));
}
}
}
Kueri hibrida menggunakan beberapa vektor
Gunakan MultiQueryRequest untuk menggabungkan vektor padat dan vektor jarang dari beberapa sub-kueri dalam satu permintaan. Setiap sub-kueri dapat membawa data jarangnya sendiri, memungkinkan skor hibrida multi-vektor secara simultan.
Saat melakukan kueri hibrida berbasis beberapa vektor, semua vektor dalam satu kueri harus bertipe sama—misalnya, beberapa vektor padat atau pasangan vektor padat-jarang.
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.Arrays;
import java.util.Map;
public class Demo {
private Client client;
@Before
public void clientInit() throws Exception {
Config config = new Config();
config.setInstanceId("ha-cn-i7*****605");
config.setAccessUserName("username");
config.setAccessPassWord("password");
config.setEndpoint("ha-cn-i7*****605.public.ha.aliyuncs.com");
client = new Client(config);
}
@Test
public void query() throws Exception {
try {
MultiQueryRequest multiQueryRequest = new MultiQueryRequest();
multiQueryRequest.setTableName("main");
multiQueryRequest.setTopK(50);
multiQueryRequest.setOutputFields(Arrays.asList("content", "source", "instance_id"));
multiQueryRequest.setFilter("type='TEXT'");
multiQueryRequest.setOrder("DESC");
QueryRequest queryRequest = new QueryRequest();
queryRequest.setIndexName("index");
queryRequest.setNamespace("cate1");
queryRequest.setVector(Arrays.asList(0.0001575F, 0.00682848F));
SparseData sparseData = new SparseData();
sparseData.setCount(Arrays.asList(2));
sparseData.setIndices(Arrays.asList(983589459L, 1261855554L));
sparseData.setValues(Arrays.asList(0.0001575F, 0.00682848F));
queryRequest.setSparseData(sparseData);
multiQueryRequest.setQueries(Arrays.asList(queryRequest));
SearchResponse searchResponse = client.multiQuery(multiQueryRequest);
System.out.println(searchResponse.getBody());
} 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, SparseData, MultiQueryRequest
from alibabacloud_ha3engine_vector.models import QueryRequest
config = Config(
endpoint="http://ha-cn-i7*****605.public.ha.aliyuncs.com",
access_user_name="username",
access_pass_word="password")
client = Client(config)
def mix_multi_query():
sd1 = SparseData(indices=[101, 203], values=[0.1, 0.5])
sd2 = SparseData(indices=[200, 405, 502], values=[0.9, 0.5, 0.75])
q1 = QueryRequest(vector=[0.1, 0.2, 0.3, 0.4], sparse_data=sd1)
q2 = QueryRequest(vector=[0.4, 0.5, 0.6, 0.7], sparse_data=sd2)
request = MultiQueryRequest(
table_name="test",
queries=[q1, q2],
top_k=3,
include_vector=True)
result = client.multi_query(request)
print(result.body)
if __name__ == "__main__":
mix_multi_query()
Go
package main
import (
"fmt"
"github.com/alibabacloud-go/tea-utils/v2/service"
"github.com/alibabacloud-go/tea/tea"
ha3engine "github.com/aliyun/alibabacloud-ha3-go-sdk/client"
)
func main() {
config := &ha3engine.Config{
Endpoint: tea.String("ha-cn-i7*****605.public.ha.aliyuncs.com"),
AccessUserName: tea.String("username"),
AccessPassWord: tea.String("password"),
RuntimeOptions: &service.RuntimeOptions{
KeepAlive: tea.Bool(true),
MaxIdleConns: tea.Int(1000),
ReadTimeout: tea.Int(1000),
},
}
client, err := ha3engine.NewClient(config)
if err != nil {
fmt.Println(err)
return
}
mixMultiVectorQuery(client)
}
func mixMultiVectorQuery(client *ha3engine.Client) {
array := make([]*float32, 4)
value1 := float32(1.23)
value2 := float32(4.56)
value3 := float32(7.89)
value4 := float32(7.89)
array[0] = &value1
array[1] = &value2
array[2] = &value3
array[3] = &value4
count := make([]*int, 1)
count[0] = tea.Int(2)
indices := make([]*int64, 2)
indices[0] = tea.Int64(1)
indices[1] = tea.Int64(2)
values := make([]*float32, 2)
values[0] = tea.Float32(0.1)
values[1] = tea.Float32(0.2)
sparseData := &ha3engine.SparseData{
Count: count,
Indices: indices,
Values: values,
}
query1 := &ha3engine.QueryRequest{}
query1.SetSparseData(sparseData)
query1.SetVector(array)
query2 := &ha3engine.QueryRequest{}
query2.SetVector(array)
request := &ha3engine.MultiQueryRequest{}
request.SetTableName("test1")
querys := make([]*ha3engine.QueryRequest, 2)
querys[0] = query1
querys[1] = query2
request.SetQueries(querys)
request.SetTopK(10)
request.SetIncludeVector(false)
request.SetOrder("DESC")
response, err := client.MultiQuery(request)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(response)
}
Java (asinkron)
import com.aliyun.ha3engine.async.AsyncClient;
import com.aliyun.ha3engine.async.models.MultiQueryRequest;
import com.aliyun.ha3engine.async.models.QueryRequest;
import com.aliyun.ha3engine.async.models.SearchResponse;
import com.aliyun.ha3engine.async.models.SparseData;
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.Arrays;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
public class MixMultiVectorQuery {
private AsyncClient client;
@Before
public void clientInit() {
AsyncConfigInfoProvider provider = AsyncConfigInfoProvider.create("username", "password");
client = AsyncClient.builder()
.credentialsProvider(provider)
.overrideConfiguration(
ClientOverrideConfiguration.create()
.setEndpointOverride("ha-cn-i7*****605.public.ha.aliyuncs.com")
.setProtocol("http")
).build();
}
@Test
public void mixMultiVectorQuery() {
try {
QueryRequest query1 = QueryRequest.builder()
.vector(Arrays.asList(0.62498F, 0.886408F, 0.586114F, 0.043189F))
.sparseData(SparseData.builder()
.count(Arrays.asList(2))
.indices(Arrays.asList(1L, 2L))
.values(Arrays.asList(0.1F, 0.2F))
.build())
.namespace("space_a")
.build();
QueryRequest query2 = QueryRequest.builder()
.vector(Arrays.asList(0.62498F, 0.886408F, 0.586114F, 0.043189F))
.sparseData(SparseData.builder()
.count(Arrays.asList(2))
.indices(Arrays.asList(1L, 2L))
.values(Arrays.asList(0.1F, 0.2F))
.build())
.namespace("space_b")
.build();
MultiQueryRequest request = MultiQueryRequest.builder()
.tableName("test2")
.topK(3)
.includeVector(false)
.queries(Arrays.asList(query1, query2))
.build();
CompletableFuture<SearchResponse> future = client.multiQuery(request);
String responseBody = future.get().getBody();
System.out.println("query 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));
}
}
}
Kueri hibrida berbasis vektor dan teks
Gabungkan pencarian vektor k-nearest neighbor (k-NN) dengan pencarian teks lengkap dalam satu SearchRequest. Bidang knn menerima QueryRequest dengan parameter vektor; bidang text menerima TextQuery dengan string kueri.
Java
import java.util.Arrays;
import java.util.Map;
import com.alibaba.fastjson.JSONObject;
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;
public class VectorSearchService {
private Client client;
@Before
public void clientInit() throws Exception {
Config config = new Config();
config.setInstanceId("ha-cn-i7*****605");
config.setAccessUserName("username");
config.setAccessPassWord("password");
config.setEndpoint("ha-cn-i7*****605.public.ha.aliyuncs.com");
client = new Client(config);
}
@Test
public void search() throws Exception {
try {
// Parameter vektor (k-NN).
QueryRequest queryRequest = new QueryRequest();
queryRequest.setIndexName("vector");
queryRequest.setTopK(10);
queryRequest.setVector(Arrays.asList(0.62498F, 0.886408F, 0.586114F, 0.043189F));
SparseData sparseData = new SparseData();
sparseData.setIndices(Arrays.asList(1L, 2L, 3L, 4L));
sparseData.setValues(Arrays.asList(0.0001575F, 0.00682848F, 0.008745F, 0.4583474F));
queryRequest.setSparseData(sparseData);
// Parameter kueri teks.
TextQuery textQuery = new TextQuery();
textQuery.setQueryString("content:'Publish'");
SearchRequest request = new SearchRequest();
request.setTableName("test1");
request.setKnn(queryRequest);
request.setText(textQuery);
request.setSize(10);
request.setOutputFields(Arrays.asList("id", "content", "name"));
SearchResponse searchResponse = client.search(request);
System.out.println("Result:\n" + searchResponse.getBody());
} 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, SearchRequest, TextQuery, QueryRequest, RankQuery
config = Config(
endpoint="http://ha-cn-i7*****605.public.ha.aliyuncs.com",
access_user_name="username",
access_pass_word="password")
client = Client(config)
def search():
knn = QueryRequest(
index_name="vector",
vector=[0.62498, 0.886408, 0.586114, 0.043189],
include_vector=True,
top_k=10)
text = TextQuery(query_string="content:'Publish'")
request = SearchRequest(
table_name="test1",
size=10,
output_fields=["id", "content", "name"],
knn=knn,
text=text,
rank=RankQuery(rrf={"rankConstant": 1000}))
result = client.search(request)
print(result.body)
if __name__ == "__main__":
search()
Go
package main
import (
"fmt"
"github.com/alibabacloud-go/tea-utils/v2/service"
"github.com/alibabacloud-go/tea/tea"
ha3engine "github.com/aliyun/alibabacloud-ha3-go-sdk/client"
)
func main() {
config := &ha3engine.Config{
Endpoint: tea.String("ha-cn-i7*****605.public.ha.aliyuncs.com"),
AccessUserName: tea.String("username"),
AccessPassWord: tea.String("password"),
RuntimeOptions: &service.RuntimeOptions{
KeepAlive: tea.Bool(true),
MaxIdleConns: tea.Int(1000),
ReadTimeout: tea.Int(1000),
},
}
client, err := ha3engine.NewClient(config)
if err != nil {
fmt.Println(err)
return
}
search(client)
}
func search(client *ha3engine.Client) {
searchRequest := &ha3engine.SearchRequest{}
searchRequest.SetTableName("test1")
knn := &ha3engine.QueryRequest{}
ids := make([]*float32, 4)
ids[0] = tea.Float32(0.1)
ids[1] = tea.Float32(0.2)
ids[2] = tea.Float32(0.3)
ids[3] = tea.Float32(0.4)
knn.SetVector(ids)
text := &ha3engine.TextQuery{}
text.SetQueryString("content:'Publish'")
searchRequest.SetText(text)
searchRequest.SetKnn(knn)
response, err := client.Search(searchRequest)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(response)
}
Java (asinkron)
import com.aliyun.ha3engine.async.AsyncClient;
import com.aliyun.ha3engine.async.models.QueryRequest;
import com.aliyun.ha3engine.async.models.SearchRequest;
import com.aliyun.ha3engine.async.models.SearchResponse;
import com.aliyun.ha3engine.async.models.TextQuery;
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.Arrays;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
public class VectorTextMixSearch {
private AsyncClient client;
@Before
public void clientInit() {
AsyncConfigInfoProvider provider = AsyncConfigInfoProvider.create("username", "password");
client = AsyncClient.builder()
.credentialsProvider(provider)
.overrideConfiguration(
ClientOverrideConfiguration.create()
.setEndpointOverride("ha-cn-i7*****605.public.ha.aliyuncs.com")
.setProtocol("http")
).build();
}
@Test
public void search() {
try {
SearchRequest request = SearchRequest.builder()
.tableName("test1")
.size(10)
.knn(QueryRequest.builder()
.vector(Arrays.asList(0.1f, 0.2f, 0.3f, 0.4f))
.namespace("space_a")
.build())
.text(TextQuery.builder()
.queryString("content:'Content'")
.build())
.outputFields(Arrays.asList("name", "age", "content"))
.build();
CompletableFuture<SearchResponse> future = client.search(request);
String responseBody = future.get().getBody();
System.out.println("search 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));
}
}
}
Catatan penggunaan
-
Saat melakukan kueri hibrida berbasis beberapa vektor, semua vektor dalam satu kueri harus bertipe sama (misalnya, beberapa vektor padat, atau pasangan vektor padat-jarang).
-
Untuk dependensi Go, selalu tentukan tag edisi spesifik (
@v1.1.17-vector) saat menjalankango get. Jangan gunakan perintah tanpa taggo get github.com/aliyun/alibabacloud-ha3-go-sdk, karena dapat mengarah ke SDK edisi berbeda. -
Untuk detail parameter respons, lihat Response parameters.
Lanjutkan ke
-
Filter expression — referensi sintaks filter lengkap
-
QcSearcher configuration — sesuaikan parameter pencarian clustering kuantitatif
-
HNSW configuration — sesuaikan parameter indeks Hierarchical Navigable Small World