全部产品
Search
文档中心

OpenSearch:Query data

更新时间:Nov 06, 2025

Topik ini menjelaskan cara menggunakan SDK OpenSearch Vector Search Edition untuk Java dalam mode asinkron, Java, Python, dan Go untuk melakukan query berbasis vektor, query berbasis prediksi, serta query dengan kondisi filter.

Dependencies

Java

<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>aliyun-sdk-ha3engine-vector</artifactId>
    <version>1.1.17</version>
</dependency>

Python

# Requires: Python >=3.6
pip install alibabacloud_ha3engine_vector==1.1.17

Go

go get github.com/aliyun/alibabacloud-ha3-go-sdk@v1.1.17-vector

Asynchronous Java

<dependency>
  <groupId>com.aliyun</groupId>
  <artifactId>aliyun-sdk-ha3engine-async</artifactId>
  <version>1.1.7</version>
</dependency>

Parameter

Konfigurasikan parameter berikut dalam SDK untuk Java dan Python: endpoint, instance_id, access_user_name, dan access_pass_word.

  • endpoint: Endpoint internal atau publik.

Endpoint dapat dilihat di bagian Informasi Jaringan dan Endpoint API pada halaman Detail Instans.

image.png

Setelah mengaktifkan Akses Publik, Anda dapat mengakses instans OpenSearch Vector Search Edition menggunakan endpoint publik dari mesin lokal. Endpoint publik mencakup kata "public". Anda juga dapat mengonfigurasi daftar putih alamat IP untuk akses ke instans. Untuk informasi lebih lanjut, lihat Bagian Informasi Jaringan dalam topik "Lihat detail instans".

Jika Anda menggunakan instans Elastic Compute Service (ECS) untuk mengakses instans OpenSearch Vector Search Edition, Anda dapat menentukan vSwitch yang sama dengan instans ECS tersebut untuk mengakses instans OpenSearch Vector Search Edition menggunakan Endpoint API.

  • instance_id: ID dari instans OpenSearch Vector Search Edition.

image.png

  • access_user_name: Nama pengguna.

  • access_pass_word: Kata sandi.

Nama pengguna dan kata sandi dapat dilihat di bagian Endpoint API pada halaman Detail Instans. Kata sandi ditentukan saat pembelian instans dan dapat diubah.

image.png

Query berbasis vektor

Sintaksis

  1. table_name: Nama tabel yang akan di-query.

  2. vector: Data vektor untuk query. Dimensi vektor query harus sesuai dengan dimensi indeks vektor.

  3. vector_count: Jumlah vektor dalam bidang vektor. Misalnya, jika parameter ini disetel ke 2, query berisi dua vektor.

  4. include_vector: Menentukan apakah informasi vektor akan dikembalikan dalam dokumen.

  5. output_fields: Daftar bidang yang nilainya akan dikembalikan.

  6. top_k: Jumlah hasil yang akan dikembalikan.

  7. filter: Ekspresi filter yang menentukan kondisi filter. Untuk sintaksisnya, lihat Ekspresi Filter.

  8. search_params: Parameter kueri. Untuk informasi selengkapnya, lihat QcSearcher dan konfigurasi HNSW.

  9. queries: Query yang akan dieksekusi. Anda dapat mengirimkan beberapa query.

Query 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 {

    /**
     * Klien mesin OpenSearch Vector Search Edition.
     */
    private Client client;

    @Before
    public void clientInit() throws Exception {
        /*
          Inisialisasi klien mesin.
         */
        Config config = new Config();

        // Nama instans. Anda dapat melihat nama instans di pojok kiri atas halaman Detail Instans. Contoh: ha-cn-i7*****605.
        config.setInstanceId("ha-cn-i7*****605");
        // Nama pengguna. Anda dapat melihat nama pengguna di bagian Endpoint API pada halaman Detail Instans.
        config.setAccessUserName("username");
        // Kata sandi. Anda dapat mengubah kata sandi di bagian Endpoint API pada halaman Detail Instans.
        config.setAccessPassWord("password");
        // Endpoint API dari instans. Anda dapat melihat endpoint API di bagian Endpoint API 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"); // Diperlukan. Nama tabel yang akan di-query.
            request.setVector(Arrays.asList(0.183762561f, 0.738372617f)); // Diperlukan. Data vektor yang akan di-query.
            request.setTopK(100); // Opsional. Jumlah hasil yang akan dikembalikan.
            request.setIncludeVector(true); // Opsional. Menentukan apakah akan mengembalikan informasi vektor dalam dokumen.
            
            SearchResponse searchResponse = client.query(request);
            System.out.println("Hasil:\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
from alibabacloud_ha3engine_vector.models import QueryRequest

config = Config(
    # Endpoint API dari instans. Anda dapat melihat endpoint API di bagian Endpoint API pada halaman Detail Instans.
    endpoint="http://ha-cn-i7*****605.public.ha.aliyuncs.com",
    # Nama pengguna. Anda dapat melihat nama pengguna di bagian Endpoint API pada halaman Detail Instans.
    access_user_name="username",
    # Kata sandi. Anda dapat mengubah kata sandi di bagian Endpoint API pada halaman Detail Instans.
    access_pass_word="password")
client = Client(config)

request = QueryRequest(table_name="gist",
                    	vector=[0.1, 0.2, 0.3],
                        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() {

    // Buat instans klien untuk mengirim permintaan.
    config := &ha3engine.Config{
        // Endpoint API dari instans. Anda dapat melihat endpoint API di bagian Endpoint API pada halaman Detail Instans.
        Endpoint: tea.String("ha-cn-i7*****605.public.ha.aliyuncs.com"),
        // Nama pengguna. Anda dapat melihat nama pengguna di bagian Endpoint API pada halaman Detail Instans.
        AccessUserName: tea.String("username"),
        // Kata sandi. Anda dapat mengubah kata sandi di bagian Endpoint API pada halaman Detail Instans.
        AccessPassWord: tea.String("password"),
        RuntimeOptions: &service.RuntimeOptions{
            KeepAlive:    tea.Bool(true),
            MaxIdleConns: tea.Int(1000),
            ReadTimeout:  tea.Int(1000),
        },
    }

    // Inisialisasi klien untuk mengirim permintaan.
    client, _clientErr := ha3engine.NewClient(config)

    // Jika terjadi kesalahan saat sistem membuat klien, _clientErr dan pesan kesalahan akan dikembalikan.
    if _clientErr != nil {
        fmt.Println(_clientErr)
        return
    }

    query(client)
}

/**
 * Query sederhana
 */
func query(client *ha3engine.Client) {

    searchRequestModel := &ha3engine.QueryRequest{}
    searchRequestModel.SetTableName("test1")

    // Buat array bilangan titik mengambang 32-bit.
    ids := make([]*float32, 4)

    // Tetapkan nilai ke elemen-elemen array.
    ids[0] = tea.Float32(0.1)
    ids[1] = tea.Float32(0.2)
    ids[2] = tea.Float32(0.3)
    ids[3] = tea.Float32(0.4)

    searchRequestModel.SetVector(ids)

    response, _requestErr := client.Query(searchRequestModel)

    // Jika terjadi kesalahan saat sistem mengirim permintaan, _requestErr dan pesan kesalahan akan dikembalikan.
    if _requestErr != nil {
        fmt.Println(_requestErr)
        return
    }

    // Tampilkan respons jika tidak ada kesalahan.
    fmt.Println(response)
}

Java dalam mode 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;

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

    /**
     * Klien engine dari instans OpenSearch Vector Search Edition.
     */
    private AsyncClient client;

    @Before
    public void clientInit() {
        // Nama pengguna dan kata sandi yang digunakan untuk mengakses instans. Anda dapat melihat nama pengguna dan kata sandi di bagian API Endpoint pada halaman Detail Instans.
        AsyncConfigInfoProvider provider = AsyncConfigInfoProvider.create("username", "password");
        // Inisialisasi klien asinkron.
        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") // Nama tabel yang akan dikueri.
                    .indexName("index_name") // Nama indeks yang akan dikueri.
                    .vector(Arrays.asList(0.0001575F, 0.00682848F)) // Data vektor yang akan dikueri.
                    .topK(10) // Jumlah hasil yang akan dikembalikan.
                    .includeVector(true) // Menentukan apakah akan mengembalikan informasi vektor dalam dokumen.
                    .build();
            
            CompletableFuture<SearchResponse> responseCompletableFuture = client.query(queryRequest);
            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));
        }
    }
}

Query berdasarkan beberapa vektor

Anda dapat menentukan beberapa vektor untuk melakukan query berbasis vektor. Sistem akan menggabungkan dan mengurutkan hasil yang ditemukan, lalu mengembalikan hasil top K.

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 {

    /**
     * Klien mesin OpenSearch Vector Search Edition.
     */
    private Client client;

    @Before
    public void clientInit() throws Exception {
        /*
          Inisialisasi klien mesin.
         */
        Config config = new Config();

        // Nama instans. Anda dapat melihat nama instans di pojok kiri atas halaman Detail Instans. Contoh: ha-cn-i7*****605.
        config.setInstanceId("ha-cn-i7*****605");
        // Nama pengguna. Anda dapat melihat nama pengguna di bagian Endpoint API pada halaman Detail Instans.
        config.setAccessUserName("username");
        // Kata sandi. Anda dapat mengubah kata sandi di bagian Endpoint API pada halaman Detail Instans.
        config.setAccessPassWord("password");
        // Endpoint API dari instans. Anda dapat melihat endpoint API di bagian Endpoint API 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"); // Diperlukan. Nama tabel yang akan di-query.
            request.setVector(Arrays.asList(0.1f, 0.2f, 0.3f, 0.4f)); // Diperlukan. Data vektor yang akan di-query.
            request.setVectorCount(2); // Opsional. Jumlah vektor yang terkandung dalam bidang vektor.
            request.setTopK(100); // Opsional. Jumlah hasil yang akan dikembalikan.
            request.setIncludeVector(true); // Opsional. Menentukan apakah akan mengembalikan informasi vektor dalam dokumen.
            request.setOutputFields(new ArrayList<String>()); // Opsional. Bidang yang akan dikembalikan.
            request.setFilter("a>10"); // Opsional. Ekspresi filter.
            
            SearchResponse searchResponse = client.query(request);
            System.out.println("Hasil:\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
from alibabacloud_ha3engine_vector.models import QueryRequest

config = Config(
    # Endpoint API dari instans. Anda dapat melihat endpoint API di bagian Endpoint API pada halaman Detail Instans.
    endpoint="http://ha-cn-i7*****605.public.ha.aliyuncs.com",
    # Nama pengguna. Anda dapat melihat nama pengguna di bagian Endpoint API pada halaman Detail Instans.
    access_user_name="username",
    # Kata sandi. Anda dapat mengubah kata sandi di bagian Endpoint API pada halaman Detail Instans.
    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"
	"sync"
)

func main() {

	// Buat instans klien untuk mengirim permintaan.
	config := &ha3engine.Config{
		// Endpoint API dari instans. Anda dapat melihat endpoint API di bagian Endpoint API pada halaman Detail Instans.
		Endpoint: tea.String("ha-cn-i7*****605.public.ha.aliyuncs.com"),
		// Nama pengguna. Anda dapat melihat nama pengguna di bagian Endpoint API pada halaman Detail Instans.
		AccessUserName: tea.String("username"),
		// Kata sandi. Anda dapat mengubah kata sandi di bagian Endpoint API pada halaman Detail Instans.
		AccessPassWord: tea.String("password"),
		RuntimeOptions: &service.RuntimeOptions{
			KeepAlive:    tea.Bool(true),
			MaxIdleConns: tea.Int(1000),
			ReadTimeout:  tea.Int(1000),
		},
	}

	// Inisialisasi klien untuk mengirim permintaan.
	client, _clientErr := ha3engine.NewClient(config)

	// Jika terjadi kesalahan saat sistem membuat klien, _clientErr dan pesan kesalahan akan dikembalikan.
	if _clientErr != nil {
		fmt.Println(_clientErr)
		return
	}

	multiVectorQuery(client)
}

func multiVectorQuery(client *ha3engine.Client) {

	queryRequest := &ha3engine.QueryRequest{}
	queryRequest.SetTableName("test1")

	// Buat array bilangan titik mengambang 32-bit.
	ids := make([]*float32, 8)

	// Tetapkan nilai ke elemen-elemen array.
	ids[0] = tea.Float32(0.1)
	ids[1] = tea.Float32(0.2)
	ids[2] = tea.Float32(0.3)
	ids[3] = tea.Float32(0.4)
	ids[4] = tea.Float32(0.1)
	ids[5] = tea.Float32(0.2)
	ids[6] = tea.Float32(0.3)
	ids[7] = tea.Float32(0.4)

	queryRequest.SetVector(ids)
	queryRequest.SetVectorCount(2)

	response, _requestErr := client.Query(queryRequest)

	// Jika terjadi kesalahan saat sistem mengirim permintaan, _requestErr dan pesan kesalahan akan dikembalikan.
	if _requestErr != nil {
		fmt.Println(_requestErr)
		return
	}

	// Tampilkan respons jika tidak ada kesalahan.
	fmt.Println(response)
}

Java dalam mode 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;

/**
 * Query berdasarkan beberapa vektor
 */
public class MultiVectorQuery {

    /**
     * Klien mesin OpenSearch Vector Search Edition.
     */
    private AsyncClient client;

    @Before
    public void clientInit() {
        // Nama pengguna dan kata sandi yang digunakan untuk mengakses instans. Anda dapat melihat nama pengguna dan kata sandi di bagian Endpoint API pada halaman Detail Instans.
        AsyncConfigInfoProvider provider = AsyncConfigInfoProvider.create("username", "password");
        // Inisialisasi klien asinkron.
        client = AsyncClient.builder()
                .credentialsProvider(provider)
                .overrideConfiguration(
                        ClientOverrideConfiguration.create()
                                .setEndpointOverride("ha-cn-i7*****605.public.ha.aliyuncs.com")
                                .setProtocol("http")
                ).build();
    }

    @Test

    public void multiVectorQuery() {
        try {
            QueryRequest queryRequest = QueryRequest.builder()
                    .tableName("test1") // Nama tabel yang akan di-query.
                    .indexName("vector") // Nama indeks yang akan di-query.
                    .vector(Arrays.asList(0.62498F, 0.886408F, 0.586114F, 0.043189F,0.62498F, 0.886408F, 0.586114F, 0.043189F)) // Data vektor yang akan di-query.
                    .vectorCount(2)// Opsional. Jumlah vektor yang terkandung dalam bidang vektor.
                    .topK(10) // Jumlah hasil yang akan dikembalikan.
                    .includeVector(false) // Menentukan apakah akan mengembalikan informasi vektor dalam dokumen.
                    .build();

            CompletableFuture<SearchResponse> responseCompletableFuture = client.query(queryRequest);
            String responseBody = responseCompletableFuture.get().getBody();
            System.out.println("hasil query: " + 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));
        }
    }
}

Query berbasis namespace

OpenSearch Vector Search Edition memungkinkan Anda mempartisi indeks menggunakan namespace. Setelah mengonfigurasi namespace untuk indeks vektor, Anda dapat menentukan namespace untuk mengquery data. Dengan cara ini, Anda dapat mengquery subset indeks yang berbeda dengan mengirimkan permintaan query yang berbeda.

Catatan: Jika Anda mengonfigurasi namespace untuk indeks vektor, Anda harus menentukan namespace saat mengquery data.

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 {

    /**
     * Klien mesin OpenSearch Vector Search Edition.
     */
    private Client client;

    @Before
    public void clientInit() throws Exception {
        /*
          Inisialisasi klien mesin.
         */
        Config config = new Config();

        // Nama instans. Anda dapat melihat nama instans di pojok kiri atas halaman Detail Instans. Contoh: ha-cn-i7*****605.
        config.setInstanceId("ha-cn-i7*****605");
        // Nama pengguna. Anda dapat melihat nama pengguna di bagian Endpoint API pada halaman Detail Instans.
        config.setAccessUserName("username");
        // Kata sandi. Anda dapat mengubah kata sandi di bagian Endpoint API pada halaman Detail Instans.
        config.setAccessPassWord("password");
        // Endpoint API dari instans. Anda dapat melihat endpoint API di bagian Endpoint API 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"); // Diperlukan. Nama tabel yang akan di-query.
            request.setVector(Arrays.asList(0.183762561f, 0.738372617f)); // Diperlukan. Data vektor yang akan di-query.
            request.setNamespace("namespace"); // Opsional. Namespace dari vektor yang akan di-query.
            request.setTopK(100); // Opsional. Jumlah hasil yang akan dikembalikan.
            request.setIncludeVector(true); // Opsional. Menentukan apakah akan mengembalikan informasi vektor dalam dokumen.
            
            SearchResponse searchResponse = client.query(request);
            System.out.println("Hasil:\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
from alibabacloud_ha3engine_vector.models import QueryRequest

config = Config(
    # Endpoint API dari instans. Anda dapat melihat endpoint API di bagian Endpoint API pada halaman Detail Instans.
    endpoint="http://ha-cn-i7*****605.public.ha.aliyuncs.com",
    # Nama pengguna. Anda dapat melihat nama pengguna di bagian Endpoint API pada halaman Detail Instans.
    access_user_name="username",
    # Kata sandi. Anda dapat mengubah kata sandi di bagian Endpoint API pada halaman Detail Instans.
    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"
	"sync"
)

func main() {

	// Buat instans klien untuk mengirim permintaan.
	config := &ha3engine.Config{
		// Endpoint API dari instans. Anda dapat melihat endpoint API di bagian Endpoint API pada halaman Detail Instans.
		Endpoint: tea.String("ha-cn-i7*****605.public.ha.aliyuncs.com"),
		// Nama pengguna. Anda dapat melihat nama pengguna di bagian Endpoint API pada halaman Detail Instans.
		AccessUserName: tea.String("username"),
		// Kata sandi. Anda dapat mengubah kata sandi di bagian Endpoint API pada halaman Detail Instans.
		AccessPassWord: tea.String("password"),
		RuntimeOptions: &service.RuntimeOptions{
			KeepAlive:    tea.Bool(true),
			MaxIdleConns: tea.Int(1000),
			ReadTimeout:  tea.Int(1000),
		},
	}

	// Inisialisasi klien untuk mengirim permintaan.
	client, _clientErr := ha3engine.NewClient(config)

	// Jika terjadi kesalahan saat sistem membuat klien, _clientErr dan pesan kesalahan akan dikembalikan.
	if _clientErr != nil {
		fmt.Println(_clientErr)
		return
	}

	nameSpaceQuery(client)
}

func nameSpaceQuery(client *ha3engine.Client) {

	searchRequestModel := &ha3engine.QueryRequest{}
	searchRequestModel.SetTableName("test1")

	// Buat array bilangan titik mengambang 32-bit.
	ids := make([]*float32, 4)

	// Tetapkan nilai ke elemen-elemen array.
	ids[0] = tea.Float32(0.1)
	ids[1] = tea.Float32(0.2)
	ids[2] = tea.Float32(0.3)
	ids[3] = tea.Float32(0.4)

	searchRequestModel.SetVector(ids)
	searchRequestModel.SetNamespace("1")

	response, _requestErr := client.Query(searchRequestModel)

	// Jika terjadi kesalahan saat sistem mengirim permintaan, _requestErr dan pesan kesalahan akan dikembalikan.
	if _requestErr != nil {
		fmt.Println(_requestErr)
		return
	}

	// Tampilkan respons jika tidak ada kesalahan.
	fmt.Println(response)
}

Java dalam mode 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 {
    /**
     * Klien engine dari instans OpenSearch Vector Search Edition.
     */
    private AsyncClient client;

    @Before
    public void clientInit() {
        // Nama pengguna dan kata sandi yang digunakan untuk mengakses instans. Anda dapat melihat nama pengguna dan kata sandi di bagian API Endpoint pada halaman Detail Instans.
        AsyncConfigInfoProvider provider = AsyncConfigInfoProvider.create("username", "password");
        // Inisialisasi klien asinkron.
        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") // Nama tabel yang akan dikueri.
                    .indexName("vector") // Nama indeks yang akan dikueri.
                    .namespace("1")
                    .vector(Arrays.asList(0.62498F, 0.886408F, 0.586114F, 0.043189F)) // Data vektor yang akan dikueri.
                    .topK(10) // Jumlah hasil yang akan dikembalikan.
                    .includeVector(false) // Menentukan apakah akan mengembalikan informasi vektor dalam dokumen.
                    .build();

            CompletableFuture<SearchResponse> responseCompletableFuture = client.query(queryRequest);
            String responseBody = responseCompletableFuture.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));
        }
    }
}

Query berdasarkan beberapa namespace

Jika Anda mengonfigurasi namespace untuk indeks vektor, Anda dapat mengquery data di beberapa namespace.

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 {

    /**
     * Klien mesin OpenSearch Vector Search Edition.
     */
    private Client client;

    @Before
    public void clientInit() throws Exception {
        /*
          Inisialisasi klien mesin.
         */
        Config config = new Config();

        // Nama instans. Anda dapat melihat nama instans di pojok kiri atas halaman Detail Instans. Contoh: ha-cn-i7*****605.
        config.setInstanceId("ha-cn-i7*****605");
        // Nama pengguna. Anda dapat melihat nama pengguna di bagian Endpoint API pada halaman Detail Instans.
        config.setAccessUserName("username");
        // Kata sandi. Anda dapat mengubah kata sandi di bagian Endpoint API pada halaman Detail Instans.
        config.setAccessPassWord("password");
        // Endpoint API dari instans. Anda dapat melihat endpoint API di bagian Endpoint API pada halaman Detail Instans.
        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("Hasil:\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
from alibabacloud_ha3engine_vector.models import QueryRequest
from alibabacloud_ha3engine_vector.models import MultiQueryRequest

config = Config(
    # Endpoint API dari instans. Anda dapat melihat endpoint API di bagian Endpoint API pada halaman Detail Instans.
    endpoint="http://ha-cn-i7*****605.public.ha.aliyuncs.com",
    # Nama pengguna. Anda dapat melihat nama pengguna di bagian Endpoint API pada halaman Detail Instans.
    access_user_name="username",
    # Kata sandi. Anda dapat mengubah kata sandi di bagian Endpoint API pada halaman Detail Instans.
    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"
	"sync"
)

func main() {

	// Buat instans klien untuk mengirim permintaan.
	config := &ha3engine.Config{
		// Endpoint API dari instans. Anda dapat melihat endpoint API di bagian Endpoint API pada halaman Detail Instans.
		Endpoint: tea.String("ha-cn-i7*****605.public.ha.aliyuncs.com"),
		// Nama pengguna. Anda dapat melihat nama pengguna di bagian Endpoint API pada halaman Detail Instans.
		AccessUserName: tea.String("username"),
		// Kata sandi. Anda dapat mengubah kata sandi di bagian Endpoint API pada halaman Detail Instans.
		AccessPassWord: tea.String("password"),
		RuntimeOptions: &service.RuntimeOptions{
			KeepAlive:    tea.Bool(true),
			MaxIdleConns: tea.Int(1000),
			ReadTimeout:  tea.Int(1000),
		},
	}

	// Inisialisasi klien untuk mengirim permintaan.
	client, _clientErr := ha3engine.NewClient(config)

	// Jika terjadi kesalahan saat sistem membuat klien, _clientErr dan pesan kesalahan akan dikembalikan.
	if _clientErr != nil {
		fmt.Println(_clientErr)
		return
	}

	multiNameSpaceQuery(client)
}

func multiNameSpaceQuery(client *ha3engine.Client) {

	query1 := &ha3engine.QueryRequest{}
	// Buat array bilangan titik mengambang 32-bit.
	array := make([]*float32, 4)

	// Alokasikan alamat memori ke setiap nilai array dan inisialisasi nilai-nilai tersebut.
	value1 := float32(1.23)
	value2 := float32(4.56)
	value3 := float32(7.89)
	value4 := float32(7.89)

	// Tetapkan nilai ke elemen-elemen array.
	array[0] = &value1
	array[1] = &value2
	array[2] = &value3
	array[3] = &value4

	query1.SetVector(array)
	query1.SetNamespace("space_a")

	query2 := &ha3engine.QueryRequest{}
	query2.SetVector(array)
	query2.SetNamespace("space_b")

	request := &ha3engine.MultiQueryRequest{}

	request.SetTableName("test2")

	querys := make([]*ha3engine.QueryRequest, 2)
	querys[0] = query1
	querys[1] = query2
	request.SetQueries(querys)
	request.SetTopK(10)
	request.SetIncludeVector(false)
	request.SetOrder("DESC")

	response, _requestErr := client.MultiQuery(request)

	// Jika terjadi kesalahan saat sistem mengirim permintaan, _requestErr dan pesan kesalahan akan dikembalikan.
	if _requestErr != nil {
		fmt.Println(_requestErr)
		return
	}

	// Tampilkan respons jika tidak ada kesalahan.
	fmt.Println(response)
}

Java dalam mode 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 {
    /**
     * Klien mesin OpenSearch Vector Search Edition.
     */
    private AsyncClient client;

    @Before
    public void clientInit() {
        // Nama pengguna dan kata sandi yang digunakan untuk mengakses instans. Anda dapat melihat nama pengguna dan kata sandi di bagian Endpoint API pada halaman Detail Instans.
        AsyncConfigInfoProvider provider = AsyncConfigInfoProvider.create("username", "password");
        // Inisialisasi klien asinkron.
        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")// Nama tabel yang akan di-query.
                    .topK(3)
                    .includeVector(false)// Menentukan apakah akan mengembalikan informasi vektor dalam dokumen.
                    .queries(Arrays.asList(query1, query2))// Kondisi filter dari namespace yang akan di-query.
                    .build();

            CompletableFuture<SearchResponse> responseCompletableFuture = client.multiQuery(request);
            String responseBody = responseCompletableFuture.get().getBody();

            System.out.println("hasil multiQuery: " + 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));
        }
    }
}

Query menggunakan kondisi filter

Anda dapat menggunakan ekspresi filter untuk menentukan kondisi filter saat mengquery data.

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 {

    /**
     * Klien mesin OpenSearch Vector Search Edition.
     */
    private Client client;

    @Before
    public void clientInit() throws Exception {
        /*
          Inisialisasi klien mesin.
         */
        Config config = new Config();

        // Nama instans. Anda dapat melihat nama instans di pojok kiri atas halaman Detail Instans. Contoh: ha-cn-i7*****605.
        config.setInstanceId("ha-cn-i7*****605");
        // Nama pengguna. Anda dapat melihat nama pengguna di bagian Endpoint API pada halaman Detail Instans.
        config.setAccessUserName("username");
        // Kata sandi. Anda dapat mengubah kata sandi di bagian Endpoint API pada halaman Detail Instans.
        config.setAccessPassWord("password");
        // Endpoint API dari instans. Anda dapat melihat endpoint API di bagian Endpoint API 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"); // Diperlukan. Nama tabel yang akan di-query.
            request.setVector(Arrays.asList(0.183762561f, 0.738372617f)); // Diperlukan. Data vektor yang akan di-query.
            request.setTopK(100); // Opsional. Jumlah hasil yang akan dikembalikan.
            request.setIncludeVector(true); // Opsional. Menentukan apakah akan mengembalikan informasi vektor dalam dokumen.
            request.setOutputFields(new ArrayList<String>()); // Opsional. Bidang yang akan dikembalikan.
            request.setFilter("a>10"); // Opsional. Ekspresi filter.
            
            SearchResponse searchResponse = client.query(request);
            System.out.println("Hasil:\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
from alibabacloud_ha3engine_vector.models import QueryRequest

config = Config(
    # Endpoint API dari instans. Anda dapat melihat endpoint API di bagian Endpoint API pada halaman Detail Instans.
    endpoint="http://ha-cn-i7*****605.public.ha.aliyuncs.com",
    # Nama pengguna. Anda dapat melihat nama pengguna di bagian Endpoint API pada halaman Detail Instans.
    access_user_name="username",
    # Kata sandi. Anda dapat mengubah kata sandi di bagian Endpoint API pada halaman Detail Instans.
    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"
	"sync"
)

func main() {

	// Buat instans klien untuk mengirim permintaan.
	config := &ha3engine.Config{
		// Endpoint API dari instans. Anda dapat melihat endpoint API di bagian Endpoint API pada halaman Detail Instans.
		Endpoint: tea.String("ha-cn-i7*****605.public.ha.aliyuncs.com"),
		// Nama pengguna. Anda dapat melihat nama pengguna di bagian Endpoint API pada halaman Detail Instans.
		AccessUserName: tea.String("username"),
		// Kata sandi. Anda dapat mengubah kata sandi di bagian Endpoint API pada halaman Detail Instans.
		AccessPassWord: tea.String("password"),
		RuntimeOptions: &service.RuntimeOptions{
			KeepAlive:    tea.Bool(true),
			MaxIdleConns: tea.Int(1000),
			ReadTimeout:  tea.Int(1000),
		},
	}

	// Inisialisasi klien untuk mengirim permintaan.
	client, _clientErr := ha3engine.NewClient(config)

	// Jika terjadi kesalahan saat sistem membuat klien, _clientErr dan pesan kesalahan akan dikembalikan.
	if _clientErr != nil {
		fmt.Println(_clientErr)
		return
	}

	filterQuery(client)
}

func filterQuery(client *ha3engine.Client) {

	searchRequestModel := &ha3engine.QueryRequest{}
	searchRequestModel.SetTableName("test1")

	// Buat array bilangan titik mengambang 32-bit.
	ids := make([]*float32, 4)

	// Tetapkan nilai ke elemen-elemen array.
	ids[0] = tea.Float32(0.1)
	ids[1] = tea.Float32(0.2)
	ids[2] = tea.Float32(0.3)
	ids[3] = tea.Float32(0.4)

	searchRequestModel.SetVector(ids)
	searchRequestModel.SetFilter("count>25")

	response, _requestErr := client.Query(searchRequestModel)

	// Jika terjadi kesalahan saat sistem mengirim permintaan, _requestErr dan pesan kesalahan akan dikembalikan.
	if _requestErr != nil {
		fmt.Println(_requestErr)
		return
	}

	// Tampilkan respons jika tidak ada kesalahan.
	fmt.Println(response)
}

Java dalam mode 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 {
    /**
     * Klien mesin OpenSearch Vector Search Edition.
     */
    private AsyncClient client;

    @Before
    public void clientInit() {
        // Nama pengguna dan kata sandi yang digunakan untuk mengakses instans. Anda dapat melihat nama pengguna dan kata sandi di bagian Endpoint API pada halaman Detail Instans.
        AsyncConfigInfoProvider provider = AsyncConfigInfoProvider.create("username", "password");
        // Inisialisasi klien asinkron.
        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") // Nama tabel yang akan di-query.
                    .indexName("vector") // Nama indeks yang akan di-query.
                    .vector(Arrays.asList(0.62498F, 0.886408F, 0.586114F, 0.043189F)) // Data vektor yang akan di-query.
                    .topK(10) // Jumlah hasil yang akan dikembalikan.
                    .filter("count>25")// Kondisi filter.
                    .includeVector(false) // Menentukan apakah akan mengembalikan informasi vektor dalam dokumen.
                    .build();

            CompletableFuture<SearchResponse> responseCompletableFuture = client.query(queryRequest);
            String responseBody = responseCompletableFuture.get().getBody();

            System.out.println("hasil multiQuery: " + 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));
        }
    }
}

Untuk informasi lebih lanjut tentang cara menggunakan ekspresi filter, lihat Ekspresi Filter.

Query berbasis primary key

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 {

    /**
     * Klien mesin OpenSearch Vector Search Edition.
     */
    private Client client;

    @Before
    public void clientInit() throws Exception {
        /*
          Inisialisasi klien mesin.
         */
        Config config = new Config();

        // Nama instans. Anda dapat melihat nama instans di pojok kiri atas halaman Detail Instans. Contoh: ha-cn-i7*****605.
        config.setInstanceId("ha-cn-i7*****605");
        // Nama pengguna. Anda dapat melihat nama pengguna di bagian Endpoint API pada halaman Detail Instans.
        config.setAccessUserName("username");
        // Kata sandi. Anda dapat mengubah kata sandi di bagian Endpoint API pada halaman Detail Instans.
        config.setAccessPassWord("password");
        // Endpoint API dari instans. Anda dapat melihat endpoint API di bagian Endpoint API pada halaman Detail Instans.
        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("Hasil:\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
from alibabacloud_ha3engine_vector.models import FetchRequest

config = Config(
    # Endpoint API dari instans. Anda dapat melihat endpoint API di bagian Endpoint API pada halaman Detail Instans.
    endpoint="http://ha-cn-i7*****605.public.ha.aliyuncs.com",
    # Nama pengguna. Anda dapat melihat nama pengguna di bagian Endpoint API pada halaman Detail Instans.
    access_user_name="username",
    # Kata sandi. Anda dapat mengubah kata sandi di bagian Endpoint API pada halaman Detail Instans.
    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() {

	// Buat instans klien untuk mengirim permintaan.
	config := &ha3engine.Config{
		// Endpoint API dari instans. Anda dapat melihat endpoint API di bagian Endpoint API pada halaman Detail Instans.
		Endpoint: tea.String("ha-cn-i7*****605.public.ha.aliyuncs.com"),
		// Nama pengguna. Anda dapat melihat nama pengguna di bagian Endpoint API pada halaman Detail Instans.
		AccessUserName: tea.String("username"),
		// Kata sandi. Anda dapat mengubah kata sandi di bagian Endpoint API pada halaman Detail Instans.
		AccessPassWord: tea.String("password"),
		RuntimeOptions: &service.RuntimeOptions{
			KeepAlive:    tea.Bool(true),
			MaxIdleConns: tea.Int(1000),
			ReadTimeout:  tea.Int(1000),
		},
	}

	// Inisialisasi klien untuk mengirim permintaan.
	client, _clientErr := ha3engine.NewClient(config)

	// Jika terjadi kesalahan saat sistem membuat klien, _clientErr dan pesan kesalahan akan dikembalikan.
	if _clientErr != nil {
		fmt.Println(_clientErr)
		return
	}

	fetch(client)
}

/**
 * Query berbasis primary key
 */
func fetch(client *ha3engine.Client) {

	searchRequestModel := &ha3engine.FetchRequest{}
	searchRequestModel.SetTableName("test1")

	// Tetapkan nilai ke elemen-elemen array.
	ids := make([]*string, 3)
	ids[0] = tea.String("1")
	ids[1] = tea.String("2")
	ids[2] = tea.String("3")
	searchRequestModel.SetIds(ids)

	response, _requestErr := client.Fetch(searchRequestModel)

	// Jika terjadi kesalahan saat sistem mengirim permintaan, _requestErr dan pesan kesalahan akan dikembalikan.
	if _requestErr != nil {
		fmt.Println(_requestErr)
		return
	}

	// Tampilkan respons jika tidak ada kesalahan.
	fmt.Println(response)
}

Java dalam mode 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;

/**
 * @author alibaba
 */
public class PrimaryKeyQuery {
    
    /**
     * Klien mesin OpenSearch Vector Search Edition.
     */
    private AsyncClient client;

    @Before
    public void clientInit() {
        // Nama pengguna dan kata sandi yang digunakan untuk mengakses instans. Anda dapat melihat nama pengguna dan kata sandi di bagian Endpoint API pada halaman Detail Instans.
        AsyncConfigInfoProvider provider = AsyncConfigInfoProvider.create("username", "password");
        // Inisialisasi klien asinkron.
        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> searchResponseCompletableFuture = client.fetch(fetchRequest);
            String responseBody = searchResponseCompletableFuture.get().getBody();

            System.out.println("hasil: " + 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));
        }
    }
}

Query berbasis prediksi

Anda dapat melakukan query berbasis prediksi saat menggunakan OpenSearch Vector Search Edition untuk memvektorkan teks atau gambar untuk query berbasis vektor. Kode berikut memberikan contoh cara menggunakan SDK untuk melakukan query berbasis prediksi.

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 {

    /**
     * Klien mesin OpenSearch Vector Search Edition.
     */
    private Client client;

    @Before
    public void clientInit() throws Exception {
        /*
          Inisialisasi klien mesin.
         */
        Config config = new Config();

        // Nama instans. Anda dapat melihat nama instans di pojok kiri atas halaman Detail Instans. Contoh: ha-cn-i7*****605.
        config.setInstanceId("ha-cn-i7*****605");
        // Nama pengguna. Anda dapat melihat nama pengguna di bagian Endpoint API pada halaman Detail Instans.
        config.setAccessUserName("username");
        // Kata sandi. Anda dapat mengubah kata sandi di bagian Endpoint API pada halaman Detail Instans.
        config.setAccessPassWord("password");
        // Endpoint API dari instans. Anda dapat melihat endpoint API di bagian Endpoint API pada halaman Detail Instans.
        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"); // Diperlukan. Nama tabel yang akan di-query.
            request.setContent("Child"); // Diperlukan. Konten yang ingin Anda query.
            request.setModal("text"); // Diperlukan. Parameter ini digunakan untuk memvektorkan istilah yang akan di-query.
            request.setTopK(100); // Opsional. Jumlah hasil yang akan dikembalikan.
            request.setSearchParams("{\\\"qc.searcher.scan_ratio\\\":0.01}");
            SearchResponse searchResponse = client.inferenceQuery(request);
            System.out.println("Hasil:\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
from alibabacloud_ha3engine_vector.models import QueryRequest

config = Config(
    # Endpoint API dari instans. Anda dapat melihat endpoint API di bagian Endpoint API pada halaman Detail Instans.
    endpoint="http://ha-cn-i7*****605.public.ha.aliyuncs.com",
    # Nama pengguna. Anda dapat melihat nama pengguna di bagian Endpoint API pada halaman Detail Instans.
    access_user_name="username",
    # Kata sandi. Anda dapat mengubah kata sandi di bagian Endpoint API pada halaman Detail Instans.
    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() {

	// Buat instans klien untuk mengirim permintaan.
	config := &ha3engine.Config{
		// Titik akhir API 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"),
		// Nama pengguna. Anda dapat melihat nama pengguna di bagian API Endpoint pada halaman Instance Details.
		AccessUserName: tea.String("username"),
		// Kata sandi. Anda dapat mengubah kata sandi di bagian API Endpoint pada halaman Instance Details.
		AccessPassWord: tea.String("password"),
		RuntimeOptions: &service.RuntimeOptions{
			KeepAlive:    tea.Bool(true),
			MaxIdleConns: tea.Int(1000),
			ReadTimeout:  tea.Int(1000),
		},
	}

	// Inisialisasi klien untuk mengirim permintaan.
	client, _clientErr := ha3engine.NewClient(config)

	// Jika terjadi kesalahan saat sistem membuat klien, _clientErr dan pesan kesalahan akan dikembalikan.
	if _clientErr != nil {
		fmt.Println(_clientErr)
		return
	}

	inferenceQuery(client)
}

/**
 * Kueri berbasis prediksi
 */
func inferenceQuery(client *ha3engine.Client) {

	searchRequestModel := &ha3engine.QueryRequest{}
	searchRequestModel.SetTableName("test1")

	// Buat array bilangan titik mengambang 32-bit.
	array := make([]*float32, 3)

	// Alokasikan alamat memori untuk setiap nilai array dan inisialisasi nilainya.
	value1 := float32(1.23)
	value2 := float32(4.56)
	value3 := float32(7.89)

	// Tetapkan nilai ke elemen-elemen array.
	array[0] = &value1
	array[1] = &value2
	array[2] = &value3

	//searchRequestModel.SetVector(array)
	searchRequestModel.SetContent("Puppy")
	searchRequestModel.SetNamespace("123")
	searchRequestModel.SetModal("text") // Wajib. Parameter ini digunakan untuk melakukan vektorisasi kata kunci yang akan dikueri.

	response, _requestErr := client.InferenceQuery(searchRequestModel)

	// Jika terjadi kesalahan saat sistem mengirimkan permintaan, _requestErr dan pesan kesalahan akan dikembalikan.
	if _requestErr != nil {
		fmt.Println(_requestErr)
		return
	}

	// Tampilkan tanggapan jika tidak terjadi kesalahan.
	fmt.Println(response)
}

Java dalam mode 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;

/**
 * Query berbasis prediksi
 */
public class InferenceQuery {
    /**
     * Klien mesin OpenSearch Vector Search Edition.
     */
    private AsyncClient client;

    @Before
    public void clientInit() {
        // Nama pengguna dan kata sandi yang digunakan untuk mengakses instans. Anda dapat melihat nama pengguna dan kata sandi di bagian Endpoint API pada halaman Detail Instans.
        AsyncConfigInfoProvider provider = AsyncConfigInfoProvider.create("username", "password");
        // Inisialisasi klien asinkron.
        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") // Nama tabel yang akan di-query.
                    .indexName("source_text_vector") // Nama indeks yang akan di-query.
                    .namespace("1")// Nama namespace yang akan di-query.
                    .modal("text")// Nama model.
                    .content("Tes konversi teks-ke-vektor")// Konten yang akan di-vektorkan.
                    .topK(10) // Jumlah hasil yang akan dikembalikan.
                    .includeVector(false) // Menentukan apakah akan mengembalikan informasi vektor dalam dokumen.
                    .build();

            CompletableFuture<SearchResponse> responseCompletableFuture = client.inferenceQuery(queryRequest);
            String responseBody = responseCompletableFuture.get().getBody();
            System.out.println("hasil queryInference: " + 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));
        }
    }
}

Parameter:

  • Parameter content dalam QueryRequest menunjukkan konten yang Anda tentukan untuk query. Dalam skenario vektorisasi teks, Anda dapat menentukan teks sebagai konten yang akan di-query. Dalam skenario vektorisasi gambar, Anda dapat menentukan teks atau gambar yang dikodekan dalam Base64 sebagai konten yang akan di-query.

  • Parameter modal dalam QueryRequest menunjukkan mode kueri. Jika Anda mengatur parameter ke text, sistem akan melakukan kueri teks berdasarkan teks yang ditentukan dalam skenario vektorisasi teks, dan melakukan kueri citra berdasarkan teks yang ditentukan dalam skenario vektorisasi citra.

Multi-query

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;

/**
 * Multi-query
 */
public class Demo {

    /**
     * Klien mesin dari instans OpenSearch Vector Search Edition.
     */
    private Client client;

    @Before
    public void clientInit() throws Exception {
        /*
          Inisialisasi klien mesin.
         */
        Config config = new Config();

        // Nama instans. Anda dapat melihat nama instans di pojok kiri atas halaman Detail Instans. Contoh: ha-cn-i7*****605.
        config.setInstanceId("ha-cn-i7*****605");
        // Nama pengguna. Anda dapat melihat nama pengguna di bagian API Endpoint pada halaman Detail Instans.
        config.setAccessUserName("username");
        // Kata sandi. Anda dapat mengubah kata sandi di bagian API Endpoint pada halaman Detail Instans.
        config.setAccessPassWord("password");
        // Titik akhir API dari instans. Anda dapat melihat titik akhir API 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 {

            MultiQueryRequest multiQueryRequest = new MultiQueryRequest();

            multiQueryRequest.setTableName("test1"); // Nama tabel yang akan diquery.
            multiQueryRequest.setTopK(50); // Jumlah hasil yang akan dikembalikan.
            multiQueryRequest.setOutputFields(Arrays.asList("content", "name", "age")); // Bidang-bidang yang akan dikembalikan.
            multiQueryRequest.setOrder("DESC");

            QueryRequest queryRequest = new QueryRequest();
            queryRequest.setIndexName("vector"); // Nama indeks yang akan diquery. Tentukan parameter ini di SearchRequest atau di setiap query.
            queryRequest.setNamespace("space_a"); // Namespace dari data vektor yang akan diquery.
            queryRequest.setVector(Arrays.asList(0.62498F, 0.886408F, 0.586114F, 0.043189F)); // Data vektor yang akan diquery. Data ini bertipe ARRAY.

            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
from alibabacloud_ha3engine_vector.models import QueryRequest

config = Config(
    # Titik akhir API dari instans. Anda dapat melihat titik akhir API di bagian API Endpoint pada halaman Detail Instans.
    endpoint="http://ha-cn-i7*****605.public.ha.aliyuncs.com",
    # Nama pengguna. Anda dapat melihat nama pengguna di bagian API Endpoint pada halaman Detail Instans.
    access_user_name="username",
    # Kata sandi. Anda dapat mengubah kata sandi di bagian API Endpoint pada halaman Detail Instans.
    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)
    queries = [query1]
    request = MultiQueryRequest(table_name="test",
                                queries=queries,
                                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() {

	// Buat instans klien untuk mengirim permintaan.
	config := &ha3engine.Config{
		// Titik akhir API dari instans. Anda dapat melihat titik akhir API di bagian API Endpoint pada halaman Detail Instans.
		Endpoint: tea.String("ha-cn-i7*****605.public.ha.aliyuncs.com"),
		// Nama pengguna. Anda dapat melihat nama pengguna di bagian API Endpoint pada halaman Detail Instans.
		AccessUserName: tea.String("username"),
		// Kata sandi. Anda dapat mengubah kata sandi di bagian API Endpoint pada halaman Detail Instans.
		AccessPassWord: tea.String("password"),
		RuntimeOptions: &service.RuntimeOptions{
			KeepAlive:    tea.Bool(true),
			MaxIdleConns: tea.Int(1000),
			ReadTimeout:  tea.Int(1000),
		},
	}

	// Inisialisasi klien untuk mengirim permintaan.
	client, _clientErr := ha3engine.NewClient(config)

	// Jika terjadi kesalahan saat sistem membuat klien, _clientErr dan pesan kesalahan akan dikembalikan.
	if _clientErr != nil {
		fmt.Println(_clientErr)
		return
	}
	multiQuery(client)
}


/**
 * Multi-query
 */
func multiQuery(client *ha3engine.Client) {

	query := &ha3engine.QueryRequest{}
	query.SetTableName("test1")

	// Buat array bilangan titik mengambang 32-bit.
	array := make([]*float32, 4)

	// Alokasikan alamat memori ke setiap nilai array dan inisialisasi nilai-nilai tersebut.
	value1 := float32(1.23)
	value2 := float32(4.56)
	value3 := float32(7.89)
	value4 := float32(7.89)

	// Tetapkan nilai ke elemen-elemen array.
	array[0] = &value1
	array[1] = &value2
	array[2] = &value3
	array[3] = &value4

	query.SetVector(array)

	request := &ha3engine.MultiQueryRequest{}

	request.SetTableName("test1")

	querys := make([]*ha3engine.QueryRequest, 1)
	querys[0] = query
	request.SetQueries(querys)
	request.SetTopK(10)
	request.SetIncludeVector(true)
	request.SetOrder("DESC")

	response, _requestErr := client.MultiQuery(request)

	// Jika terjadi kesalahan saat sistem mengirim permintaan, _requestErr dan pesan kesalahan akan dikembalikan.
	if _requestErr != nil {
		fmt.Println(_requestErr)
		return
	}

	// Tampilkan respons jika tidak ada kesalahan.
	fmt.Println(response)
}

Java dalam mode 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;

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

    /**
     * Klien mesin dari instans OpenSearch Vector Search Edition.
     */
    private AsyncClient client;

    @Before
    public void clientInit() {
        // Nama pengguna dan kata sandi yang digunakan untuk mengakses instans. Anda dapat melihat nama pengguna dan kata sandi di bagian API Endpoint pada halaman Detail Instans.
        AsyncConfigInfoProvider provider = AsyncConfigInfoProvider.create("username", "password");
        // Inisialisasi klien asinkron.
        client = AsyncClient.builder()
                .credentialsProvider(provider)
                .overrideConfiguration(
                        ClientOverrideConfiguration.create()
                                .setEndpointOverride("ha-cn-i7*****605.public.ha.aliyuncs.com")
                                .setProtocol("http")
                ).build();
    }

    @Test
    public void searchDoc()  {
        try {
            QueryRequest queryRequest = QueryRequest.builder()
                    .indexName("content_vector") // Nama indeks yang akan diquery.
                    .namespace("150086193") // Namespace dari indeks yang akan diquery.
                    .vector(Arrays.asList(0.0001575F, 0.00682848F)) // Data vektor yang akan diquery.
                    .build();
            MultiQueryRequest multiQueryRequest = MultiQueryRequest.builder()
                    .tableName("hybrid") // Nama tabel yang akan diquery.
                    .topK(10) // Jumlah hasil yang akan dikembalikan.
                    .outputFields(Arrays.asList("content", "source", "instance_id")) // Bidang-bidang yang akan dikembalikan.
                    .filter("type='TEXT'") // Ekspresi filter.
                    .order("DESC") // Urutan dokumen yang dikembalikan.
                    .queries(Arrays.asList(queryRequest)).build();
            CompletableFuture<SearchResponse> searchResponseCompletableFuture = client.multiQuery(multiQueryRequest);
            String responseBody = searchResponseCompletableFuture.get().getBody();

            System.out.println("hasil: " + 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

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 org.something.util.VectorUtils;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;

/**
 * Kueri batch
 */
public class BatchQuery {

    /**
     * Klien mesin dari instans OpenSearch Vector Search Edition.
     */
    private Client client;

    @Before
    public void clientInit() throws Exception {
        /*
          Inisialisasi klien mesin.
         */
        Config config = new Config();

        // Nama instans. Anda dapat melihat nama instans di pojok kiri atas halaman Detail Instans. Contoh: ha-cn-i7*****605.
        config.setInstanceId("ha-cn-i7*****605");
        // Nama pengguna. Anda dapat melihat nama pengguna di bagian API Endpoint halaman Detail Instans.
        config.setAccessUserName("username");
        // Kata sandi. Anda dapat mengubah kata sandi di bagian API Endpoint halaman Detail Instans.
        config.setAccessPassWord("password");
        // Titik akhir API dari instans. Anda dapat melihat titik akhir API di bagian API Endpoint halaman Detail Instans.
        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("Hasil:\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
from alibabacloud_ha3engine_vector.models import BatchRequest

config = Config(
    # Titik akhir API dari instans. Anda dapat melihat titik akhir API di bagian Titik Akhir API pada halaman Detail Instans.
    endpoint="http://ha-cn-i7*****605.public.ha.aliyuncs.com",
    # Nama pengguna. Anda dapat melihat nama pengguna di bagian Titik Akhir API pada halaman Detail Instans.
    access_user_name="username",
    # Kata sandi. Anda dapat mengubah kata sandi di bagian Titik Akhir API pada halaman Detail Instans.
    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() {

    // Buat instans klien untuk mengirim permintaan.
    config := &ha3engine.Config{
        // Endpoint API dari instans. Anda dapat melihat endpoint API di bagian Endpoint API pada halaman Detail Instans.
        Endpoint: tea.String("ha-cn-i7*****605.public.ha.aliyuncs.com"),
        // Nama pengguna. Anda dapat melihat nama pengguna di bagian Endpoint API pada halaman Detail Instans.
        AccessUserName: tea.String("username"),
        // Kata sandi. Anda dapat mengubah kata sandi di bagian Endpoint API pada halaman Detail Instans.
        AccessPassWord: tea.String("password"),
        RuntimeOptions: &service.RuntimeOptions{
            KeepAlive:    tea.Bool(true),
            MaxIdleConns: tea.Int(1000),
            ReadTimeout:  tea.Int(1000),
        },
    }

    // Inisialisasi klien untuk mengirim permintaan.
    client, _clientErr := ha3engine.NewClient(config)

    // Jika terjadi kesalahan saat sistem membuat klien, _clientErr dan pesan kesalahan akan dikembalikan.
    if _clientErr != nil {
        fmt.Println(_clientErr)
        return
    }

    batch(client)
}

func batch(client *ha3engine.Client) {

    queryRequestModel1 := &ha3engine.QueryRequest{}
    queryRequestModel1.SetTableName("test")
    // Buat array bilangan titik mengambang 32-bit.
    ids1 := make([]*float32, 4)
    // Tetapkan nilai ke elemen-elemen array.
    ids1[0] = tea.Float32(0.1)
    ids1[1] = tea.Float32(0.2)
    ids1[2] = tea.Float32(0.3)
    ids1[3] = tea.Float32(0.4)
    queryRequestModel1.SetVector(ids1)

    queryRequestModel2 := &ha3engine.QueryRequest{}
    queryRequestModel2.SetTableName("test1")
    // Buat array bilangan titik mengambang 32-bit.
    ids2 := make([]*float32, 4)
    // Tetapkan nilai ke elemen-elemen array.
    ids2[0] = tea.Float32(0.1)
    ids2[1] = tea.Float32(0.2)
    ids2[2] = tea.Float32(0.3)
    ids2[3] = tea.Float32(0.4)
    queryRequestModel2.SetVector(ids2)

    batchRequestModel := &ha3engine.BatchRequest{}
    batchRequestModel.SetQueries([]*ha3engine.QueryRequest{queryRequestModel1, queryRequestModel2})

    response, _requestErr := client.BatchQuery(batchRequestModel)

    // Jika terjadi kesalahan saat sistem mengirim permintaan, _requestErr dan pesan kesalahan akan dikembalikan.
    if _requestErr != nil {
        fmt.Println(_requestErr)
        return
    }

    // Tampilkan respons jika tidak ada kesalahan.
    fmt.Println(response)
}

Java dalam mode 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 org.something.util.VectorUtils;

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;

/**
 * Multi-query
 */
public class BatchQuery {
    
    /**
     * Klien mesin OpenSearch Vector Search Edition.
     */
    private AsyncClient client;

    @Before
    public void clientInit() {
        // Nama pengguna dan kata sandi yang digunakan untuk mengakses instans. Anda dapat melihat nama pengguna dan kata sandi di bagian Endpoint API pada halaman Detail Instans.
        AsyncConfigInfoProvider provider = AsyncConfigInfoProvider.create("username", "password");
        // Inisialisasi klien asinkron.
        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") // Nama tabel yang akan di-query.
                    .indexName("vector") // Nama indeks yang akan di-query.
                    .vector(Arrays.asList(0.62498F, 0.886408F, 0.586114F, 0.043189F)) // Data vektor yang akan di-query.
                    .outputFields(Arrays.asList("id", "name"))
                    .build();
            QueryRequest queryRequest2 = QueryRequest.builder()
                    .tableName("test1") // Nama tabel yang akan di-query.
                    .indexName("vector") // Nama indeks yang akan di-query.
                    .vector(Arrays.asList(0.62498F, 0.886408F, 0.586114F, 0.043189F)) // Data vektor yang akan di-query.
                    .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> responseCompletableFuture = client.batchQuery(request);
            String responseBody = responseCompletableFuture.get().getBody();
            System.out.println("hasil batch: " + 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));
        }
    }
}

Hybrid query menggunakan satu vektor

Anda dapat melakukan hybrid query menggunakan vektor padat dan vektor jarang. Contoh kode berikut memberikan contoh cara menggunakan SDK untuk melakukan hybrid query:

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 {

    /**
     * Klien mesin OpenSearch Vector Search Edition.
     */
    private Client client;

    @Before
    public void clientInit() throws Exception {
        /*
          Inisialisasi klien mesin.
         */
        Config config = new Config();

        // Nama instans. Anda dapat melihat nama instans di pojok kiri atas halaman Detail Instans. Contoh: ha-cn-i7*****605.
        config.setInstanceId("ha-cn-i7*****605");
        // Nama pengguna. Anda dapat melihat nama pengguna di bagian Endpoint API pada halaman Detail Instans.
        config.setAccessUserName("username");
        // Kata sandi. Anda dapat mengubah kata sandi di bagian Endpoint API pada halaman Detail Instans.
        config.setAccessPassWord("password");
        // Endpoint API dari instans. Anda dapat melihat endpoint API di bagian Endpoint API 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 queryRequest = new QueryRequest();
            queryRequest.setIndexName("index"); // Nama indeks yang akan di-query. Tentukan parameter ini dalam SearchRequest atau dalam setiap query.
            queryRequest.setNamespace("cate1"); // Namespace dari data vektor yang akan di-query.
            queryRequest.setVector(Arrays.asList(0.0001575F, 0.00682848F)); // Data vektor yang akan di-query. Data ini bertipe ARRAY.

            SparseData sparseData = new SparseData();
            sparseData.setCount(Arrays.asList(2)); // Jumlah elemen dalam setiap vektor jarang.
            sparseData.setIndices(Arrays.asList(983589459L, 1261855554L)); // Indeks elemen dalam urutan menaik.
            sparseData.setValues(Arrays.asList(0.0001575F, 0.00682848F)); // Nilai elemen dalam urutan yang sama dengan 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
from alibabacloud_ha3engine_vector.models import QueryRequest

config = Config(
    # Endpoint API dari instans. Anda dapat melihat endpoint API di bagian Endpoint API pada halaman Detail Instans.
    endpoint="http://ha-cn-i7*****605.public.ha.aliyuncs.com",
    # Nama pengguna. Anda dapat melihat nama pengguna di bagian Endpoint API pada halaman Detail Instans.
    access_user_name="username",
    # Kata sandi. Anda dapat mengubah kata sandi di bagian Endpoint API pada halaman Detail Instans.
    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"
	"sync"
)

func main() {

	// Buat instans klien untuk mengirim permintaan.
	config := &ha3engine.Config{
		// Endpoint API dari instans. Anda dapat melihat endpoint API di bagian Endpoint API pada halaman Detail Instans.
		Endpoint: tea.String("ha-cn-i7*****605.public.ha.aliyuncs.com"),
		// Nama pengguna. Anda dapat melihat nama pengguna di bagian Endpoint API pada halaman Detail Instans.
		AccessUserName: tea.String("username"),
		// Kata sandi. Anda dapat mengubah kata sandi di bagian Endpoint API pada halaman Detail Instans.
		AccessPassWord: tea.String("password"),
		RuntimeOptions: &service.RuntimeOptions{
			KeepAlive:    tea.Bool(true),
			MaxIdleConns: tea.Int(1000),
			ReadTimeout:  tea.Int(1000),
		},
	}

	// Inisialisasi klien untuk mengirim permintaan.
	client, _clientErr := ha3engine.NewClient(config)

	// Jika terjadi kesalahan saat sistem membuat klien, _clientErr dan pesan kesalahan akan dikembalikan.
	if _clientErr != nil {
		fmt.Println(_clientErr)
		return
	}

	mixQuery(client)
}

func mixQuery(client *ha3engine.Client) {

	searchRequestModel := &ha3engine.QueryRequest{}
	searchRequestModel.SetTableName("test1")

	// Buat array bilangan titik mengambang 32-bit.
	ids := make([]*float32, 4)

	// Tetapkan nilai ke elemen-elemen array.
	ids[0] = tea.Float32(0.1)
	ids[1] = tea.Float32(0.2)
	ids[2] = tea.Float32(0.3)
	ids[3] = tea.Float32(0.4)

	searchRequestModel.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)
	sparseDataha := &ha3engine.SparseData{
		Count:   count,
		Indices: indices,
		Values:  values,
	}
	searchRequestModel.SetSparseData(sparseDataha)

	response, _requestErr := client.Query(searchRequestModel)

	// Jika terjadi kesalahan saat sistem mengirim permintaan, _requestErr dan pesan kesalahan akan dikembalikan.
	if _requestErr != nil {
		fmt.Println(_requestErr)
		return
	}

	// Tampilkan respons jika tidak ada kesalahan.
	fmt.Println(response)
}

Java dalam mode 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;

/**
 * Hybrid query
 */
public class MixQuery {
    /**
     * Klien mesin OpenSearch Vector Search Edition.
     */
    private AsyncClient client;

    @Before
    public void clientInit() {
        // Nama pengguna dan kata sandi yang digunakan untuk mengakses instans. Anda dapat melihat nama pengguna dan kata sandi di bagian Endpoint API pada halaman Detail Instans.
        AsyncConfigInfoProvider provider = AsyncConfigInfoProvider.create("username", "password");
        // Inisialisasi klien asinkron.
        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") // Nama tabel yang akan di-query.
                    .indexName("vector") // Nama indeks yang akan di-query.
                    .vector(Arrays.asList(0.62498F, 0.886408F, 0.586114F, 0.043189F)) // Data vektor yang akan di-query.
                    .sparseData(SparseData.builder().count(Arrays.asList(2)).indices(Arrays.asList(1L,2L)).values(Arrays.asList(0.1F,0.2F)).build())// Vektor jarang.
                    .topK(10) // Jumlah hasil yang akan dikembalikan.
                    .includeVector(false) // Menentukan apakah akan mengembalikan informasi vektor dalam dokumen.
                    .build();
            
            CompletableFuture<SearchResponse> responseCompletableFuture = client.query(queryRequest);
            String responseBody = responseCompletableFuture.get().getBody();
            System.out.println("hasil query: " + 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));
        }
    }
}

Hybrid query menggunakan beberapa vektor

Anda dapat melakukan hybrid query menggunakan vektor padat dan vektor jarang. Contoh kode berikut memberikan contoh cara menggunakan SDK untuk melakukan hybrid query:

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 {

    /**
     * Klien mesin OpenSearch Vector Search Edition.
     */
    private Client client;

    @Before
    public void clientInit() throws Exception {
        /*
          Inisialisasi klien mesin.
         */
        Config config = new Config();

        // Nama instans. Anda dapat melihat nama instans di pojok kiri atas halaman Detail Instans. Contoh: ha-cn-i7*****605.
        config.setInstanceId("ha-cn-i7*****605");
        // Nama pengguna. Anda dapat melihat nama pengguna di bagian Endpoint API pada halaman Detail Instans.
        config.setAccessUserName("username");
        // Kata sandi. Anda dapat mengubah kata sandi di bagian Endpoint API pada halaman Detail Instans.
        config.setAccessPassWord("password");
        // Endpoint API dari instans. Anda dapat melihat endpoint API di bagian Endpoint API 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 {

            MultiQueryRequest multiQueryRequest = new MultiQueryRequest();

            multiQueryRequest.setTableName("main"); // Nama tabel yang akan di-query.
            multiQueryRequest.setTopK(50); // Jumlah hasil yang akan dikembalikan.
            multiQueryRequest.setOutputFields(Arrays.asList("content", "source", "instance_id")); // Bidang yang akan dikembalikan.
            multiQueryRequest.setFilter("type='TEXT'"); // Ekspresi filter.
            multiQueryRequest.setOrder("DESC");

            QueryRequest queryRequest = new QueryRequest();
            queryRequest.setIndexName("index"); // Nama indeks yang akan di-query. Tentukan parameter ini dalam SearchRequest atau dalam setiap query.
            queryRequest.setNamespace("cate1"); // Namespace dari data vektor yang akan di-query.
            queryRequest.setVector(Arrays.asList(0.0001575F, 0.00682848F)); // Data vektor yang akan di-query. Data ini bertipe ARRAY.

            SparseData sparseData = new SparseData();
            sparseData.setCount(Arrays.asList(2)); // Jumlah elemen dalam setiap vektor jarang.
            sparseData.setIndices(Arrays.asList(983589459L, 1261855554L)); // Indeks elemen dalam urutan menaik.
            sparseData.setValues(Arrays.asList(0.0001575F, 0.00682848F)); // Nilai elemen dalam urutan yang sama dengan indeks.

            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 API dari instans. Anda dapat melihat endpoint API di bagian Endpoint API pada halaman Detail Instans.
    endpoint="http://ha-cn-i7*****605.public.ha.aliyuncs.com",
    # Nama pengguna. Anda dapat melihat nama pengguna di bagian Endpoint API pada halaman Detail Instans.
    access_user_name="username",
    # Kata sandi. Anda dapat mengubah kata sandi di bagian Endpoint API pada halaman Detail Instans.
    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"
	"sync"
)

func main() {

	// Buat instans klien untuk mengirim permintaan.
	config := &ha3engine.Config{
		// Endpoint API dari instans. Anda dapat melihat endpoint API di bagian Endpoint API pada halaman Detail Instans.
		Endpoint: tea.String("ha-cn-i7*****605.public.ha.aliyuncs.com"),
		// Nama pengguna. Anda dapat melihat nama pengguna di bagian Endpoint API pada halaman Detail Instans.
		AccessUserName: tea.String("username"),
		// Kata sandi. Anda dapat mengubah kata sandi di bagian Endpoint API pada halaman Detail Instans.
		AccessPassWord: tea.String("password"),
		RuntimeOptions: &service.RuntimeOptions{
			KeepAlive:    tea.Bool(true),
			MaxIdleConns: tea.Int(1000),
			ReadTimeout:  tea.Int(1000),
		},
	}

	// Inisialisasi klien untuk mengirim permintaan.
	client, _clientErr := ha3engine.NewClient(config)

	// Jika terjadi kesalahan saat sistem membuat klien, _clientErr dan pesan kesalahan akan dikembalikan.
	if _clientErr != nil {
		fmt.Println(_clientErr)
		return
	}

	mixMultiVectorQuery(client)
}

func mixMultiVectorQuery(client *ha3engine.Client) {

	query1 := &ha3engine.QueryRequest{}
	// Buat array bilangan titik mengambang 32-bit.
	array := make([]*float32, 4)

	// Alokasikan alamat memori ke setiap nilai array dan inisialisasi nilai-nilai tersebut.
	value1 := float32(1.23)
	value2 := float32(4.56)
	value3 := float32(7.89)
	value4 := float32(7.89)

	// Tetapkan nilai ke elemen-elemen array.
	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.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, _requestErr := client.MultiQuery(request)

	// Jika terjadi kesalahan saat sistem mengirim permintaan, _requestErr dan pesan kesalahan akan dikembalikan.
	if _requestErr != nil {
		fmt.Println(_requestErr)
		return
	}

	// Tampilkan respons jika tidak ada kesalahan.
	fmt.Println(response)
}

Java dalam mode 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;

/**
 * Query berdasarkan beberapa vektor
 */
public class MixMultiVectorQuery {

    /**
     * Klien mesin OpenSearch Vector Search Edition.
     */
    private AsyncClient client;

    @Before
    public void clientInit() {
        // Nama pengguna dan kata sandi yang digunakan untuk mengakses instans. Anda dapat melihat nama pengguna dan kata sandi di bagian Endpoint API pada halaman Detail Instans.
        AsyncConfigInfoProvider provider = AsyncConfigInfoProvider.create("username", "password");
        // Inisialisasi klien asinkron.
        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())// Vektor jarang.
                    .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())// Vektor jarang.
                    .namespace("space_b")
                    .build();
            MultiQueryRequest request = MultiQueryRequest.builder()
                    .tableName("test2")// Nama tabel yang akan di-query.
                    .topK(3)
                    .includeVector(false)// Menentukan apakah akan mengembalikan informasi vektor dalam dokumen.
                    .queries(Arrays.asList(query1, query2))// Kondisi filter dari namespace yang akan di-query.
                    .build();
            
            CompletableFuture<SearchResponse> responseCompletableFuture = client.multiQuery(request);
            String responseBody = responseCompletableFuture.get().getBody();
            System.out.println("hasil query: " + 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));
        }
    }
}
Penting

Untuk melakukan query berdasarkan beberapa vektor, pastikan bahwa vektor tersebut memiliki tipe yang sama. Misalnya, Anda dapat melakukan query berdasarkan beberapa vektor padat atau vektor padat-jarang.

Hybrid query berbasis vektor dan teks

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;

/**
 * Hybrid query berbasis vektor dan teks
 **/
public class VectorSearchService {

    /**
     * Klien mesin OpenSearch Vector Search Edition.
     */
    private Client client;


    @Before
    public void clientInit() throws Exception {
        /*
          Inisialisasi klien mesin.
         */
        Config config = new Config();

        // Nama instans. Anda dapat melihat nama instans di pojok kiri atas halaman Detail Instans. Contoh: ha-cn-i7*****605.
        config.setInstanceId("ha-cn-i7*****605");
        // Nama pengguna. Anda dapat melihat nama pengguna di bagian Endpoint API pada halaman Detail Instans.
        config.setAccessUserName("username");
        // Kata sandi. Anda dapat mengubah kata sandi di bagian Endpoint API pada halaman Detail Instans.
        config.setAccessPassWord("password");
        // Endpoint API dari instans. Anda dapat melihat endpoint API di bagian Endpoint API pada halaman Detail Instans.
        config.setEndpoint("ha-cn-i7*****605.public.ha.aliyuncs.com");

        client = new Client(config);
    }

    @Test
    public void search() throws Exception {
        try {
            // Buat objek permintaan query.
            SearchRequest request = new SearchRequest();
            request.setTableName("test1");// Diperlukan. Nama tabel yang akan di-query.
            // Parameter untuk query k-NN (k tetangga terdekat).
            QueryRequest queryRequest = new QueryRequest();
            queryRequest.setIndexName("vector");// Nama indeks yang akan di-query.
            queryRequest.setTopK(10);
            queryRequest.setVector(Arrays.asList(0.62498F, 0.886408F, 0.586114F, 0.043189F));// Data vektor yang akan di-query.
            // Vektor jarang.
            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);
            request.setKnn(queryRequest);
            // Buat parameter query teks.
            TextQuery textQuery = new TextQuery();
            textQuery.setQueryString("content:'Publish'");
            request.setText(textQuery);
            request.setSize(10);
            request.setOutputFields(Arrays.asList("id", "content", "name"));

            SearchResponse searchResponse = client.search(request);
            System.out.println("Hasil:\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
from alibabacloud_ha3engine_vector.models import QueryRequest

config = Config(
    # Endpoint API dari instans. Anda dapat melihat endpoint API di bagian Endpoint API pada halaman Detail Instans.
    endpoint="http://ha-cn-i7*****605.public.ha.aliyuncs.com",
    # Nama pengguna. Anda dapat melihat nama pengguna di bagian Endpoint API pada halaman Detail Instans.
    access_user_name="username",
    # Kata sandi. Anda dapat mengubah kata sandi di bagian Endpoint API pada halaman Detail Instans.
    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)
    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"
	"sync"
)

func main() {

	// Buat instans klien untuk mengirim permintaan.
	config := &ha3engine.Config{
		// Endpoint API dari instans. Anda dapat melihat endpoint API di bagian Endpoint API pada halaman Detail Instans.
		Endpoint: tea.String("ha-cn-i7*****605.public.ha.aliyuncs.com"),
		// Nama pengguna. Anda dapat melihat nama pengguna di bagian Endpoint API pada halaman Detail Instans.
		AccessUserName: tea.String("username"),
		// Kata sandi. Anda dapat mengubah kata sandi di bagian Endpoint API pada halaman Detail Instans.
		AccessPassWord: tea.String("password"),
		RuntimeOptions: &service.RuntimeOptions{
			KeepAlive:    tea.Bool(true),
			MaxIdleConns: tea.Int(1000),
			ReadTimeout:  tea.Int(1000),
		},
	}

	// Inisialisasi klien untuk mengirim permintaan.
	client, _clientErr := ha3engine.NewClient(config)

	// Jika terjadi kesalahan saat sistem membuat klien, _clientErr dan pesan kesalahan akan dikembalikan.
	if _clientErr != nil {
		fmt.Println(_clientErr)
		return
	}

	search(client)
}
func search(client *ha3engine.Client) {

	searchRequestModel := &ha3engine.SearchRequest{}
	searchRequestModel.SetTableName("test1")

	knn := &ha3engine.QueryRequest{}

	// Tetapkan nilai ke elemen-elemen array.
	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'")

	searchRequestModel.SetText(text)
	searchRequestModel.SetKnn(knn)

	response, _requestErr := client.Search(searchRequestModel)

	// Jika terjadi kesalahan saat sistem mengirim permintaan, _requestErr dan pesan kesalahan akan dikembalikan.
	if _requestErr != nil {
		fmt.Println(_requestErr)
		return
	}

	// Tampilkan respons jika tidak ada kesalahan.
	fmt.Println(response)
}

Java dalam mode 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 {

    /**
     * Klien mesin OpenSearch Vector Search Edition.
     */
    private AsyncClient client;

    @Before
    public void clientInit() {
        // Nama pengguna dan kata sandi yang digunakan untuk mengakses instans. Anda dapat melihat nama pengguna dan kata sandi di bagian Endpoint API pada halaman Detail Instans.
        AsyncConfigInfoProvider provider = AsyncConfigInfoProvider.create("username", "password");
        // Inisialisasi klien asinkron.
        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")// Nama tabel yang akan di-query.
                    .size(10)// Jumlah hasil yang akan dikembalikan.
                    .knn(QueryRequest.builder()
                            .vector(Arrays.asList(0.1f, 0.2f, 0.3f,0.4f))// Data vektor yang akan di-query.
                            .namespace("space_a")// Nama namespace yang akan di-query.
                            .build())// Parameter untuk query k-NN.
                    .text(TextQuery.builder()
                            .queryString("content:'Content'")// Kondisi query.
                            .build())
                    .outputFields(Arrays.asList("name", "age", "content"))// Bidang yang akan dikembalikan.
                    .build();

            CompletableFuture<SearchResponse> responseCompletableFuture = client.search(request);
            String responseBody = responseCompletableFuture.get().getBody();

            System.out.println("hasil pencarian: " + 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));
        }
    }
}

Informasi tambahan

  • Untuk informasi tentang respons terhadap permintaan, lihat Parameter Respons.

  • Jangan jalankan perintah go get github.com/aliyun/alibabacloud-ha3-go-sdk untuk menarik dependensi. Dependensi SDK untuk OpenSearch Vector Search Edition dan OpenSearch Retrieval Engine Edition diklasifikasikan ke dalam tag yang sama di GitHub. Anda harus menentukan edisi yang sesuai berdasarkan edisi instans saat menarik dependensi.