Todos los productos
Search
Centro de documentos

OpenSearch:Consulta de datos

Última actualización: Sep 04, 2026

Los SDK de OpenSearch Vector Search Edition admiten varias estrategias de consulta. Utilice la siguiente tabla para identificar el enfoque adecuado según su caso de uso y consulte la sección correspondiente para ver ejemplos de código.

Tipo de consulta

Cuándo utilizarla

Consulta basada en vectores

Para encontrar registros similares a un vector de consulta (búsqueda del vecino más cercano)

Consulta basada en clave primaria

Para recuperar registros específicos por ID

Consulta basada en predicción

Para consultar con texto sin formato o imágenes; el SDK vectoriza la entrada automáticamente

Consulta por lotes

Para ejecutar varias consultas independientes en una sola solicitud y reducir la sobrecarga de red

Consulta múltiple

Para consultar una sola tabla con varias subconsultas y combinar los resultados

Consulta híbrida con un solo vector

Para combinar la puntuación de vectores densos y dispersos en una misma solicitud

Consulta híbrida con varios vectores

Para combinar la puntuación de vectores densos y dispersos en múltiples subconsultas dentro de una solicitud

Consulta híbrida basada en vectores y texto

Para combinar la similitud vectorial con la búsqueda de texto completo

Todos los ejemplos utilizan los mismos cuatro clientes SDK: Java, Python, Go y Java (asíncrono).

Requisitos previos

Antes de empezar, asegúrese de contar con lo siguiente:

  • Una instancia de OpenSearch Vector Search Edition

  • El endpoint, el nombre de usuario y la contraseña de la instancia (disponibles en la sección API Endpoint de la página Instance Details)

  • El ID de la instancia (visible en la esquina superior izquierda de la página Instance Details)

Dependencias

Agregue la dependencia del SDK correspondiente a su lenguaje.

Java

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

Python

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

Go

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

Asynchronous Java

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

Parámetros de configuración

Los siguientes parámetros aplican a los SDK de Java y Python. Configúrelos al inicializar el cliente.

Parámetro

Descripción

endpoint

El endpoint interno o público de la instancia. Puede consultarlo en las secciones Network Information y API Endpoint de la página Instance Details. Habilite Public Access para obtener un endpoint público (la URL del endpoint contiene la palabra public). Utilice el endpoint interno cuando acceda a la instancia desde una instancia de Elastic Compute Service (ECS) que se encuentre en el mismo vSwitch.

instance_id

El ID de la instancia. Puede consultarlo en la esquina superior izquierda de la página Instance Details.

access_user_name

El nombre de usuario. Puede consultarlo en la sección API Endpoint de la página Instance Details.

access_pass_word

La contraseña. Se establece durante la compra y puede modificarse desde la página Instance Details.

Puede consultar el ID de la instancia (por ejemplo, ha-cn-zpr3dgzxg04) en la parte superior de la página Instance List o Instance Details.

Por ejemplo, el campo Username muestra admin y el campo Password aparece como Set.

Para obtener información sobre cómo configurar una lista de permitidos de direcciones IP para el acceso mediante endpoint público, consulte Network Information section en "View instance details".

Consulta basada en vectores

Las consultas basadas en vectores permiten encontrar los K registros principales más similares a un vector de consulta. Pase los parámetros de consulta en QueryRequest.

Parámetros de consulta

Parámetro

Obligatorio

Descripción

table_name

Sí

Nombre de la tabla que se va a consultar.

vector

Sí

Vector de consulta. Su dimensión debe coincidir con la del índice vectorial.

vector_count

No

Cantidad de vectores en el campo vectorial. Establezca este valor en 2 si el campo contiene dos vectores.

top_k

No

Número de resultados que se devolverán.

include_vector

No

Indica si se deben incluir los valores vectoriales en la respuesta.

output_fields

No

Lista de campos que se devolverán.

filter

No

Expresión de filtro para acotar los resultados. Consulte Filter expression.

search_params

No

Parámetros adicionales de consulta. Consulte QcSearcher y HNSW configuration.

queries

No

Lista de subconsultas para ejecutar en una sola solicitud.

Consulta simple

Java

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

import com.aliyun.ha3engine.vector.Client;
import com.aliyun.ha3engine.vector.models.Config;
import com.aliyun.ha3engine.vector.models.QueryRequest;
import com.aliyun.ha3engine.vector.models.SearchResponse;
import com.aliyun.tea.TeaException;

import org.junit.Before;
import org.junit.Test;

public class Demo {

    private Client client;

    @Before
    public void clientInit() throws Exception {
        Config config = new Config();
        // Instance ID — viewable in the upper-left corner of the Instance Details page.
        config.setInstanceId("ha-cn-i7*****605");
        // Username — viewable in the API Endpoint section of the Instance Details page.
        config.setAccessUserName("username");
        // Password — set at purchase; modifiable from the Instance Details page.
        config.setAccessPassWord("password");
        // API endpoint — viewable in the API Endpoint section of the Instance Details page.
        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");                                  // Required.
            request.setVector(Arrays.asList(0.183762561f, 0.738372617f)); // Required.
            request.setTopK(100);                                          // Optional.
            request.setIncludeVector(true);                               // Optional.

            SearchResponse searchResponse = client.query(request);
            System.out.println("Result:\n" + searchResponse.getBody());
        } catch (TeaException e) {
            System.out.println(e.getCode());
            System.out.println(e.getMessage());
            Map<String, Object> exceptionData = e.getData();
            System.out.println(com.aliyun.teautil.Common.toJSONString(exceptionData));
        }
    }
}

Python

from alibabacloud_ha3engine_vector.client import Client
from alibabacloud_ha3engine_vector.models import Config, QueryRequest

config = Config(
    endpoint="http://ha-cn-i7*****605.public.ha.aliyuncs.com",
    access_user_name="username",
    access_pass_word="password")
client = Client(config)

request = QueryRequest(
    table_name="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() {
    config := &ha3engine.Config{
        Endpoint:       tea.String("ha-cn-i7*****605.public.ha.aliyuncs.com"),
        AccessUserName: tea.String("username"),
        AccessPassWord: tea.String("password"),
        RuntimeOptions: &service.RuntimeOptions{
            KeepAlive:    tea.Bool(true),
            MaxIdleConns: tea.Int(1000),
            ReadTimeout:  tea.Int(1000),
        },
    }

    client, err := ha3engine.NewClient(config)
    if err != nil {
        fmt.Println(err)
        return
    }

    query(client)
}

func query(client *ha3engine.Client) {
    request := &ha3engine.QueryRequest{}
    request.SetTableName("test1")

    ids := make([]*float32, 4)
    ids[0] = tea.Float32(0.1)
    ids[1] = tea.Float32(0.2)
    ids[2] = tea.Float32(0.3)
    ids[3] = tea.Float32(0.4)
    request.SetVector(ids)

    response, err := client.Query(request)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(response)
}

Java (asynchronous)

import com.aliyun.ha3engine.async.AsyncClient;
import com.aliyun.ha3engine.async.models.QueryRequest;
import com.aliyun.ha3engine.async.models.SearchResponse;
import com.aliyun.sdk.ha3engine.async.core.AsyncConfigInfoProvider;
import com.aliyun.tea.TeaException;
import darabonba.core.client.ClientOverrideConfiguration;
import org.junit.Before;
import org.junit.Test;

import java.util.Arrays;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;

public class SimpleQuery {

    private AsyncClient client;

    @Before
    public void clientInit() {
        AsyncConfigInfoProvider provider = AsyncConfigInfoProvider.create("username", "password");
        client = AsyncClient.builder()
                .credentialsProvider(provider)
                .overrideConfiguration(
                        ClientOverrideConfiguration.create()
                                .setEndpointOverride("ha-cn-i7*****605.public.ha.aliyuncs.com")
                                .setProtocol("http")
                ).build();
    }

    @Test
    public void simpleQuery() {
        try {
            QueryRequest queryRequest = QueryRequest.builder()
                    .tableName("table_name")
                    .indexName("index_name")
                    .vector(Arrays.asList(0.0001575F, 0.00682848F))
                    .topK(10)
                    .includeVector(true)
                    .build();

            CompletableFuture<SearchResponse> future = client.query(queryRequest);
            String responseBody = future.get().getBody();
            System.out.println("result: " + responseBody);
        } catch (ExecutionException | InterruptedException e) {
            System.out.println(e.getMessage());
        } catch (TeaException e) {
            System.out.println(e.getCode());
            System.out.println(e.getMessage());
            Map<String, Object> exceptionData = e.getData();
            System.out.println(com.aliyun.teautil.Common.toJSONString(exceptionData));
        }
    }
}

Consulta basada en varios vectores

Especifique varios vectores en una sola solicitud. El SDK combina los resultados y devuelve los K registros principales de todos los vectores.

Java

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

import com.aliyun.ha3engine.vector.Client;
import com.aliyun.ha3engine.vector.models.Config;
import com.aliyun.ha3engine.vector.models.QueryRequest;
import com.aliyun.ha3engine.vector.models.SearchResponse;
import com.aliyun.tea.TeaException;

import org.junit.Before;
import org.junit.Test;

public class Demo {

    private Client client;

    @Before
    public void clientInit() throws Exception {
        Config config = new Config();
        config.setInstanceId("ha-cn-i7*****605");
        config.setAccessUserName("username");
        config.setAccessPassWord("password");
        config.setEndpoint("ha-cn-i7*****605.public.ha.aliyuncs.com");
        client = new Client(config);
    }

    @Test
    public void query() throws Exception {
        try {
            QueryRequest request = new QueryRequest();
            request.setTableName("gist");
            request.setVector(Arrays.asList(0.1f, 0.2f, 0.3f, 0.4f));
            request.setVectorCount(2);   // Two vectors concatenated in the vector field.
            request.setTopK(100);
            request.setIncludeVector(true);
            request.setOutputFields(new ArrayList<String>());
            request.setFilter("a>10");

            SearchResponse searchResponse = client.query(request);
            System.out.println("Result:\n" + searchResponse.getBody());
        } catch (TeaException e) {
            System.out.println(e.getCode());
            System.out.println(e.getMessage());
            Map<String, Object> exceptionData = e.getData();
            System.out.println(com.aliyun.teautil.Common.toJSONString(exceptionData));
        }
    }
}

Python

from alibabacloud_ha3engine_vector.client import Client
from alibabacloud_ha3engine_vector.models import Config, QueryRequest

config = Config(
    endpoint="http://ha-cn-i7*****605.public.ha.aliyuncs.com",
    access_user_name="username",
    access_pass_word="password")
client = Client(config)

request = QueryRequest(
    table_name="t1",
    vector=[0.1, 0.2, 0.3, 0.4],
    vector_count=2,
    include_vector=True,
    filter="a > 10",
    output_fields=["a", "b"],
    top_k=10)
result = client.query(request)

Go

package main

import (
    "fmt"
    "github.com/alibabacloud-go/tea-utils/v2/service"
    "github.com/alibabacloud-go/tea/tea"
    ha3engine "github.com/aliyun/alibabacloud-ha3-go-sdk/client"
)

func main() {
    config := &ha3engine.Config{
        Endpoint:       tea.String("ha-cn-i7*****605.public.ha.aliyuncs.com"),
        AccessUserName: tea.String("username"),
        AccessPassWord: tea.String("password"),
        RuntimeOptions: &service.RuntimeOptions{
            KeepAlive:    tea.Bool(true),
            MaxIdleConns: tea.Int(1000),
            ReadTimeout:  tea.Int(1000),
        },
    }

    client, err := ha3engine.NewClient(config)
    if err != nil {
        fmt.Println(err)
        return
    }
    multiVectorQuery(client)
}

func multiVectorQuery(client *ha3engine.Client) {
    request := &ha3engine.QueryRequest{}
    request.SetTableName("test1")

    // Eight floats representing two concatenated vectors.
    ids := make([]*float32, 8)
    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)

    request.SetVector(ids)
    request.SetVectorCount(2)

    response, err := client.Query(request)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(response)
}

Java (asynchronous)

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

    private AsyncClient client;

    @Before
    public void clientInit() {
        AsyncConfigInfoProvider provider = AsyncConfigInfoProvider.create("username", "password");
        client = AsyncClient.builder()
                .credentialsProvider(provider)
                .overrideConfiguration(
                        ClientOverrideConfiguration.create()
                                .setEndpointOverride("ha-cn-i7*****605.public.ha.aliyuncs.com")
                                .setProtocol("http")
                ).build();
    }

    @Test
    public void multiVectorQuery() {
        try {
            QueryRequest queryRequest = QueryRequest.builder()
                    .tableName("test1")
                    .indexName("vector")
                    .vector(Arrays.asList(0.62498F, 0.886408F, 0.586114F, 0.043189F,
                                         0.62498F, 0.886408F, 0.586114F, 0.043189F))
                    .vectorCount(2)
                    .topK(10)
                    .includeVector(false)
                    .build();

            CompletableFuture<SearchResponse> future = client.query(queryRequest);
            String responseBody = future.get().getBody();
            System.out.println("query result: " + responseBody);
        } catch (ExecutionException | InterruptedException e) {
            System.out.println(e.getMessage());
        } catch (TeaException e) {
            System.out.println(e.getCode());
            System.out.println(e.getMessage());
            Map<String, Object> exceptionData = e.getData();
            System.out.println(com.aliyun.teautil.Common.toJSONString(exceptionData));
        }
    }
}

Consulta basada en espacios de nombres

Los espacios de nombres dividen un índice vectorial en subconjuntos aislados. Cuando se configura un espacio de nombres en un índice vectorial, todas las consultas dirigidas a ese índice deben incluirlo.

Si configura un espacio de nombres para un índice vectorial, deberá especificarlo en todas las consultas realizadas contra dicho índice.

Java

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

import com.aliyun.ha3engine.vector.Client;
import com.aliyun.ha3engine.vector.models.Config;
import com.aliyun.ha3engine.vector.models.QueryRequest;
import com.aliyun.ha3engine.vector.models.SearchResponse;
import com.aliyun.tea.TeaException;

import org.junit.Before;
import org.junit.Test;

public class Demo {

    private Client client;

    @Before
    public void clientInit() throws Exception {
        Config config = new Config();
        config.setInstanceId("ha-cn-i7*****605");
        config.setAccessUserName("username");
        config.setAccessPassWord("password");
        config.setEndpoint("ha-cn-i7*****605.public.ha.aliyuncs.com");
        client = new Client(config);
    }

    @Test
    public void query() throws Exception {
        try {
            QueryRequest request = new QueryRequest();
            request.setTableName("gist");
            request.setVector(Arrays.asList(0.183762561f, 0.738372617f));
            request.setNamespace("namespace");
            request.setTopK(100);
            request.setIncludeVector(true);

            SearchResponse searchResponse = client.query(request);
            System.out.println("Result:\n" + searchResponse.getBody());
        } catch (TeaException e) {
            System.out.println(e.getCode());
            System.out.println(e.getMessage());
            Map<String, Object> exceptionData = e.getData();
            System.out.println(com.aliyun.teautil.Common.toJSONString(exceptionData));
        }
    }
}

Python

from alibabacloud_ha3engine_vector.client import Client
from alibabacloud_ha3engine_vector.models import Config, QueryRequest

config = Config(
    endpoint="http://ha-cn-i7*****605.public.ha.aliyuncs.com",
    access_user_name="username",
    access_pass_word="password")
client = Client(config)

request = QueryRequest(
    table_name="t1",
    namespace="space_b",
    vector=[0.1, 0.2],
    include_vector=True,
    top_k=10)
result = client.query(request)

Go

package main

import (
    "fmt"
    "github.com/alibabacloud-go/tea-utils/v2/service"
    "github.com/alibabacloud-go/tea/tea"
    ha3engine "github.com/aliyun/alibabacloud-ha3-go-sdk/client"
)

func main() {
    config := &ha3engine.Config{
        Endpoint:       tea.String("ha-cn-i7*****605.public.ha.aliyuncs.com"),
        AccessUserName: tea.String("username"),
        AccessPassWord: tea.String("password"),
        RuntimeOptions: &service.RuntimeOptions{
            KeepAlive:    tea.Bool(true),
            MaxIdleConns: tea.Int(1000),
            ReadTimeout:  tea.Int(1000),
        },
    }

    client, err := ha3engine.NewClient(config)
    if err != nil {
        fmt.Println(err)
        return
    }
    nameSpaceQuery(client)
}

func nameSpaceQuery(client *ha3engine.Client) {
    request := &ha3engine.QueryRequest{}
    request.SetTableName("test1")

    ids := make([]*float32, 4)
    ids[0] = tea.Float32(0.1)
    ids[1] = tea.Float32(0.2)
    ids[2] = tea.Float32(0.3)
    ids[3] = tea.Float32(0.4)
    request.SetVector(ids)
    request.SetNamespace("1")

    response, err := client.Query(request)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(response)
}

Java (asynchronous)

import com.aliyun.ha3engine.async.AsyncClient;
import com.aliyun.ha3engine.async.models.QueryRequest;
import com.aliyun.ha3engine.async.models.SearchResponse;
import com.aliyun.sdk.ha3engine.async.core.AsyncConfigInfoProvider;
import com.aliyun.tea.TeaException;
import darabonba.core.client.ClientOverrideConfiguration;
import org.junit.Before;
import org.junit.Test;

import java.util.Arrays;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;

public class NameSpaceQuery {

    private AsyncClient client;

    @Before
    public void clientInit() {
        AsyncConfigInfoProvider provider = AsyncConfigInfoProvider.create("username", "password");
        client = AsyncClient.builder()
                .credentialsProvider(provider)
                .overrideConfiguration(
                        ClientOverrideConfiguration.create()
                                .setEndpointOverride("ha-cn-i7*****605.public.ha.aliyuncs.com")
                                .setProtocol("http")
                ).build();
    }

    @Test
    public void nameSpaceQuery() {
        try {
            QueryRequest queryRequest = QueryRequest.builder()
                    .tableName("test1")
                    .indexName("vector")
                    .namespace("1")
                    .vector(Arrays.asList(0.62498F, 0.886408F, 0.586114F, 0.043189F))
                    .topK(10)
                    .includeVector(false)
                    .build();

            CompletableFuture<SearchResponse> future = client.query(queryRequest);
            String responseBody = future.get().getBody();
            System.out.println("query result: " + responseBody);
        } catch (ExecutionException | InterruptedException e) {
            System.out.println(e.getMessage());
        } catch (TeaException e) {
            System.out.println(e.getCode());
            System.out.println(e.getMessage());
            Map<String, Object> exceptionData = e.getData();
            System.out.println(com.aliyun.teautil.Common.toJSONString(exceptionData));
        }
    }
}

Consulta basada en varios espacios de nombres

Envíe una sola solicitud dirigida a varios espacios de nombres para recibir resultados combinados.

Java

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

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

import org.junit.Before;
import org.junit.Test;

public class Demo {

    private Client client;

    @Before
    public void clientInit() throws Exception {
        Config config = new Config();
        config.setInstanceId("ha-cn-i7*****605");
        config.setAccessUserName("username");
        config.setAccessPassWord("password");
        config.setEndpoint("ha-cn-i7*****605.public.ha.aliyuncs.com");
        client = new Client(config);
    }

    @Test
    public void multiQuery() throws Exception {
        try {
            MultiQueryRequest request = new MultiQueryRequest();
            request.setTableName("gist");
            request.setTopK(3);
            request.setIncludeVector(true);

            QueryRequest query1 = new QueryRequest();
            query1.setVector(Arrays.asList(0.1f, 0.2f, 0.3f));
            query1.setNamespace("space_a");

            QueryRequest query2 = new QueryRequest();
            query2.setVector(Arrays.asList(0.1f, 0.2f, 0.3f));
            query2.setNamespace("space_b");

            request.setQueries(Arrays.asList(query1, query2));

            SearchResponse searchResponse = client.multiQuery(request);
            System.out.println("Result:\n" + searchResponse.getBody());
        } catch (TeaException e) {
            System.out.println(e.getCode());
            System.out.println(e.getMessage());
            Map<String, Object> exceptionData = e.getData();
            System.out.println(com.aliyun.teautil.Common.toJSONString(exceptionData));
        }
    }
}

Python

from alibabacloud_ha3engine_vector.client import Client
from alibabacloud_ha3engine_vector.models import Config, QueryRequest, MultiQueryRequest

config = Config(
    endpoint="http://ha-cn-i7*****605.public.ha.aliyuncs.com",
    access_user_name="username",
    access_pass_word="password")
client = Client(config)

q1 = QueryRequest(vector=[0.1, 0.2, 0.3], namespace="space_a")
q2 = QueryRequest(vector=[0.4, 0.5, 0.6], namespace="space_b")
request = MultiQueryRequest(
    table_name="gist",
    queries=[q1, q2],
    top_k=3,
    include_vector=True)
result = client.multi_query(request)

Go

package main

import (
    "fmt"
    "github.com/alibabacloud-go/tea-utils/v2/service"
    "github.com/alibabacloud-go/tea/tea"
    ha3engine "github.com/aliyun/alibabacloud-ha3-go-sdk/client"
)

func main() {
    config := &ha3engine.Config{
        Endpoint:       tea.String("ha-cn-i7*****605.public.ha.aliyuncs.com"),
        AccessUserName: tea.String("username"),
        AccessPassWord: tea.String("password"),
        RuntimeOptions: &service.RuntimeOptions{
            KeepAlive:    tea.Bool(true),
            MaxIdleConns: tea.Int(1000),
            ReadTimeout:  tea.Int(1000),
        },
    }

    client, err := ha3engine.NewClient(config)
    if err != nil {
        fmt.Println(err)
        return
    }
    multiNameSpaceQuery(client)
}

func multiNameSpaceQuery(client *ha3engine.Client) {
    array := make([]*float32, 4)
    value1, value2, value3, value4 := float32(1.23), float32(4.56), float32(7.89), float32(7.89)
    array[0] = &value1
    array[1] = &value2
    array[2] = &value3
    array[3] = &value4

    query1 := &ha3engine.QueryRequest{}
    query1.SetVector(array)
    query1.SetNamespace("space_a")

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

    request := &ha3engine.MultiQueryRequest{}
    request.SetTableName("test2")

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

    response, err := client.MultiQuery(request)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(response)
}

Java (asynchronous)

import com.aliyun.ha3engine.async.AsyncClient;
import com.aliyun.ha3engine.async.models.MultiQueryRequest;
import com.aliyun.ha3engine.async.models.QueryRequest;
import com.aliyun.ha3engine.async.models.SearchResponse;
import com.aliyun.sdk.ha3engine.async.core.AsyncConfigInfoProvider;
import com.aliyun.tea.TeaException;
import darabonba.core.client.ClientOverrideConfiguration;
import org.junit.Before;
import org.junit.Test;

import java.util.Arrays;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;

public class MultiNameSpaceQuery {

    private AsyncClient client;

    @Before
    public void clientInit() {
        AsyncConfigInfoProvider provider = AsyncConfigInfoProvider.create("username", "password");
        client = AsyncClient.builder()
                .credentialsProvider(provider)
                .overrideConfiguration(
                        ClientOverrideConfiguration.create()
                                .setEndpointOverride("ha-cn-i7*****605.public.ha.aliyuncs.com")
                                .setProtocol("http")
                ).build();
    }

    @Test
    public void multiNameSpaceQuery() {
        try {
            QueryRequest query1 = QueryRequest.builder()
                    .vector(Arrays.asList(0.62498F, 0.886408F, 0.586114F, 0.043189F))
                    .namespace("space_a")
                    .build();
            QueryRequest query2 = QueryRequest.builder()
                    .vector(Arrays.asList(0.62498F, 0.886408F, 0.586114F, 0.043189F))
                    .namespace("space_b")
                    .build();
            MultiQueryRequest request = MultiQueryRequest.builder()
                    .tableName("test1")
                    .topK(3)
                    .includeVector(false)
                    .queries(Arrays.asList(query1, query2))
                    .build();

            CompletableFuture<SearchResponse> future = client.multiQuery(request);
            String responseBody = future.get().getBody();
            System.out.println("multiQuery result: " + responseBody);
        } catch (ExecutionException | InterruptedException e) {
            System.out.println(e.getMessage());
        } catch (TeaException e) {
            System.out.println(e.getCode());
            System.out.println(e.getMessage());
            Map<String, Object> exceptionData = e.getData();
            System.out.println(com.aliyun.teautil.Common.toJSONString(exceptionData));
        }
    }
}

Consulta mediante condiciones de filtro

Agregue una expresión filter a cualquier consulta vectorial para restringir los resultados a los registros coincidentes. Para conocer la sintaxis completa del filtro, consulte Filter expression.

Java

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

import com.aliyun.ha3engine.vector.Client;
import com.aliyun.ha3engine.vector.models.Config;
import com.aliyun.ha3engine.vector.models.QueryRequest;
import com.aliyun.ha3engine.vector.models.SearchResponse;
import com.aliyun.tea.TeaException;

import org.junit.Before;
import org.junit.Test;

public class Demo {

    private Client client;

    @Before
    public void clientInit() throws Exception {
        Config config = new Config();
        config.setInstanceId("ha-cn-i7*****605");
        config.setAccessUserName("username");
        config.setAccessPassWord("password");
        config.setEndpoint("ha-cn-i7*****605.public.ha.aliyuncs.com");
        client = new Client(config);
    }

    @Test
    public void query() throws Exception {
        try {
            QueryRequest request = new QueryRequest();
            request.setTableName("gist");
            request.setVector(Arrays.asList(0.183762561f, 0.738372617f));
            request.setTopK(100);
            request.setIncludeVector(true);
            request.setOutputFields(new ArrayList<String>());
            request.setFilter("a>10");

            SearchResponse searchResponse = client.query(request);
            System.out.println("Result:\n" + searchResponse.getBody());
        } catch (TeaException e) {
            System.out.println(e.getCode());
            System.out.println(e.getMessage());
            Map<String, Object> exceptionData = e.getData();
            System.out.println(com.aliyun.teautil.Common.toJSONString(exceptionData));
        }
    }
}

Python

from alibabacloud_ha3engine_vector.client import Client
from alibabacloud_ha3engine_vector.models import Config, QueryRequest

config = Config(
    endpoint="http://ha-cn-i7*****605.public.ha.aliyuncs.com",
    access_user_name="username",
    access_pass_word="password")
client = Client(config)

request = QueryRequest(
    table_name="t1",
    vector=[0.1, 0.2],
    include_vector=True,
    filter="a > 10",
    output_fields=["a", "b"],
    top_k=10)
result = client.query(request)

Go

package main

import (
    "fmt"
    "github.com/alibabacloud-go/tea-utils/v2/service"
    "github.com/alibabacloud-go/tea/tea"
    ha3engine "github.com/aliyun/alibabacloud-ha3-go-sdk/client"
)

func main() {
    config := &ha3engine.Config{
        Endpoint:       tea.String("ha-cn-i7*****605.public.ha.aliyuncs.com"),
        AccessUserName: tea.String("username"),
        AccessPassWord: tea.String("password"),
        RuntimeOptions: &service.RuntimeOptions{
            KeepAlive:    tea.Bool(true),
            MaxIdleConns: tea.Int(1000),
            ReadTimeout:  tea.Int(1000),
        },
    }

    client, err := ha3engine.NewClient(config)
    if err != nil {
        fmt.Println(err)
        return
    }
    filterQuery(client)
}

func filterQuery(client *ha3engine.Client) {
    request := &ha3engine.QueryRequest{}
    request.SetTableName("test1")

    ids := make([]*float32, 4)
    ids[0] = tea.Float32(0.1)
    ids[1] = tea.Float32(0.2)
    ids[2] = tea.Float32(0.3)
    ids[3] = tea.Float32(0.4)
    request.SetVector(ids)
    request.SetFilter("count>25")

    response, err := client.Query(request)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(response)
}

Java (asynchronous)

import com.aliyun.ha3engine.async.AsyncClient;
import com.aliyun.ha3engine.async.models.QueryRequest;
import com.aliyun.ha3engine.async.models.SearchResponse;
import com.aliyun.sdk.ha3engine.async.core.AsyncConfigInfoProvider;
import com.aliyun.tea.TeaException;
import darabonba.core.client.ClientOverrideConfiguration;
import org.junit.Before;
import org.junit.Test;

import java.util.Arrays;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;

public class FilterQuery {

    private AsyncClient client;

    @Before
    public void clientInit() {
        AsyncConfigInfoProvider provider = AsyncConfigInfoProvider.create("username", "password");
        client = AsyncClient.builder()
                .credentialsProvider(provider)
                .overrideConfiguration(
                        ClientOverrideConfiguration.create()
                                .setEndpointOverride("ha-cn-i7*****605.public.ha.aliyuncs.com")
                                .setProtocol("http")
                ).build();
    }

    @Test
    public void filterQuery() {
        try {
            QueryRequest queryRequest = QueryRequest.builder()
                    .tableName("test1")
                    .indexName("vector")
                    .vector(Arrays.asList(0.62498F, 0.886408F, 0.586114F, 0.043189F))
                    .topK(10)
                    .filter("count>25")
                    .includeVector(false)
                    .build();

            CompletableFuture<SearchResponse> future = client.query(queryRequest);
            String responseBody = future.get().getBody();
            System.out.println("result: " + responseBody);
        } catch (ExecutionException | InterruptedException e) {
            System.out.println(e.getMessage());
        } catch (TeaException e) {
            System.out.println(e.getCode());
            System.out.println(e.getMessage());
            Map<String, Object> exceptionData = e.getData();
            System.out.println(com.aliyun.teautil.Common.toJSONString(exceptionData));
        }
    }
}

Consulta basada en clave primaria

Recupere registros específicos mediante sus ID de clave primaria con FetchRequest. Esta operación es una búsqueda directa por punto y no implica puntuación por similitud vectorial.

Java

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

import com.aliyun.ha3engine.vector.Client;
import com.aliyun.ha3engine.vector.models.Config;
import com.aliyun.ha3engine.vector.models.FetchRequest;
import com.aliyun.ha3engine.vector.models.SearchResponse;
import com.aliyun.tea.TeaException;

import org.junit.Before;
import org.junit.Test;

public class Demo {

    private Client client;

    @Before
    public void clientInit() throws Exception {
        Config config = new Config();
        config.setInstanceId("ha-cn-i7*****605");
        config.setAccessUserName("username");
        config.setAccessPassWord("password");
        config.setEndpoint("ha-cn-i7*****605.public.ha.aliyuncs.com");
        client = new Client(config);
    }

    @Test
    public void fetch() throws Exception {
        try {
            FetchRequest request = new FetchRequest();
            request.setTableName("gist");
            request.setIds(Arrays.asList("1", "2"));
            SearchResponse searchResponse = client.fetch(request);
            System.out.println("Result:\n" + searchResponse.getBody());
        } catch (TeaException e) {
            System.out.println(e.getCode());
            System.out.println(e.getMessage());
            Map<String, Object> exceptionData = e.getData();
            System.out.println(com.aliyun.teautil.Common.toJSONString(exceptionData));
        }
    }
}

Python

from alibabacloud_ha3engine_vector.client import Client
from alibabacloud_ha3engine_vector.models import Config, FetchRequest

config = Config(
    endpoint="http://ha-cn-i7*****605.public.ha.aliyuncs.com",
    access_user_name="username",
    access_pass_word="password")
client = Client(config)

request = FetchRequest(table_name="gist", ids=["1", "2"])
result = client.fetch(request)

Go

package main

import (
    "fmt"
    "github.com/alibabacloud-go/tea-utils/v2/service"
    "github.com/alibabacloud-go/tea/tea"
    ha3engine "github.com/aliyun/alibabacloud-ha3-go-sdk/client"
)

func main() {
    config := &ha3engine.Config{
        Endpoint:       tea.String("ha-cn-i7*****605.public.ha.aliyuncs.com"),
        AccessUserName: tea.String("username"),
        AccessPassWord: tea.String("password"),
        RuntimeOptions: &service.RuntimeOptions{
            KeepAlive:    tea.Bool(true),
            MaxIdleConns: tea.Int(1000),
            ReadTimeout:  tea.Int(1000),
        },
    }

    client, err := ha3engine.NewClient(config)
    if err != nil {
        fmt.Println(err)
        return
    }
    fetch(client)
}

func fetch(client *ha3engine.Client) {
    request := &ha3engine.FetchRequest{}
    request.SetTableName("test1")

    ids := make([]*string, 3)
    ids[0] = tea.String("1")
    ids[1] = tea.String("2")
    ids[2] = tea.String("3")
    request.SetIds(ids)

    response, err := client.Fetch(request)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(response)
}

Java (asynchronous)

import com.aliyun.ha3engine.async.AsyncClient;
import com.aliyun.ha3engine.async.models.FetchRequest;
import com.aliyun.ha3engine.async.models.SearchResponse;
import com.aliyun.sdk.ha3engine.async.core.AsyncConfigInfoProvider;
import com.aliyun.tea.TeaException;
import darabonba.core.client.ClientOverrideConfiguration;
import org.junit.Before;
import org.junit.Test;

import java.util.Arrays;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;

public class PrimaryKeyQuery {

    private AsyncClient client;

    @Before
    public void clientInit() {
        AsyncConfigInfoProvider provider = AsyncConfigInfoProvider.create("username", "password");
        client = AsyncClient.builder()
                .credentialsProvider(provider)
                .overrideConfiguration(
                        ClientOverrideConfiguration.create()
                                .setEndpointOverride("ha-cn-i7*****605.public.ha.aliyuncs.com")
                                .setProtocol("http")
                ).build();
    }

    @Test
    public void primaryKeyQuery() {
        try {
            FetchRequest fetchRequest = FetchRequest.builder()
                    .tableName("table_name")
                    .ids(Arrays.asList("1", "2"))
                    .build();
            CompletableFuture<SearchResponse> future = client.fetch(fetchRequest);
            String responseBody = future.get().getBody();
            System.out.println("result: " + responseBody);
        } catch (ExecutionException | InterruptedException e) {
            System.out.println(e.getMessage());
        } catch (TeaException e) {
            System.out.println(e.getCode());
            System.out.println(e.getMessage());
            Map<String, Object> exceptionData = e.getData();
            System.out.println(com.aliyun.teautil.Common.toJSONString(exceptionData));
        }
    }
}

Consulta basada en predicción

Utilice consultas basadas en predicción cuando OpenSearch Vector Search Edition vectoriza la entrada por usted. Pase texto sin formato o datos de imagen y permita que el servicio los convierta en un vector antes de ejecutar la búsqueda.

Dos parámetros controlan la vectorización:

  • content: La entrada que se va a vectorizar. En escenarios de vectorización de texto, proporcione texto. En escenarios de vectorización de imágenes, proporcione texto o una imagen codificada en Base64.

  • modal: La modalidad. Establezca este valor en text para realizar consultas por texto tanto en escenarios de vectorización de texto como de imagen.

Java

import com.aliyun.ha3engine.vector.Client;
import com.aliyun.ha3engine.vector.models.Config;
import com.aliyun.ha3engine.vector.models.QueryRequest;
import com.aliyun.ha3engine.vector.models.SearchResponse;
import com.aliyun.tea.TeaException;
import org.junit.Before;
import org.junit.Test;

import java.util.Map;

public class InferenceQuery {

    private Client client;

    @Before
    public void clientInit() throws Exception {
        Config config = new Config();
        config.setInstanceId("ha-cn-i7*****605");
        config.setAccessUserName("username");
        config.setAccessPassWord("password");
        config.setEndpoint("ha-cn-i7*****605.public.ha.aliyuncs.com");
        client = new Client(config);
    }

    @Test
    public void inferenceQuery() throws Exception {
        try {
            QueryRequest request = new QueryRequest();
            request.setTableName("test");
            request.setContent("Child");           // The content to vectorize.
            request.setModal("text");              // The modality.
            request.setTopK(100);
            request.setSearchParams("{\\\"qc.searcher.scan_ratio\\\":0.01}");
            SearchResponse searchResponse = client.inferenceQuery(request);
            System.out.println("Result:\n" + searchResponse.getBody());
        } catch (TeaException e) {
            System.out.println(e.getCode());
            System.out.println(e.getMessage());
            Map<String, Object> exceptionData = e.getData();
            System.out.println(com.aliyun.teautil.Common.toJSONString(exceptionData));
        }
    }
}

Python

from alibabacloud_ha3engine_vector.client import Client
from alibabacloud_ha3engine_vector.models import Config, QueryRequest

config = Config(
    endpoint="http://ha-cn-i7*****605.public.ha.aliyuncs.com",
    access_user_name="username",
    access_pass_word="password")
client = Client(config)

def inference_query():
    request = QueryRequest(
        table_name="test",
        content="Puppy",
        modal="text",
        namespace="123",
        search_params="{\\\"qc.searcher.scan_ratio\\\":0.01}",
        top_k=10)
    result = client.inference_query(request)
    print(result.body)

if __name__ == "__main__":
    inference_query()

Go

package main

import (
    "fmt"
    "github.com/alibabacloud-go/tea-utils/v2/service"
    "github.com/alibabacloud-go/tea/tea"
    ha3engine "github.com/aliyun/alibabacloud-ha3-go-sdk/client"
)

func main() {
    config := &ha3engine.Config{
        Endpoint:       tea.String("ha-cn-i7*****605.public.ha.aliyuncs.com"),
        AccessUserName: tea.String("username"),
        AccessPassWord: tea.String("password"),
        RuntimeOptions: &service.RuntimeOptions{
            KeepAlive:    tea.Bool(true),
            MaxIdleConns: tea.Int(1000),
            ReadTimeout:  tea.Int(1000),
        },
    }

    client, err := ha3engine.NewClient(config)
    if err != nil {
        fmt.Println(err)
        return
    }
    inferenceQuery(client)
}

func inferenceQuery(client *ha3engine.Client) {
    request := &ha3engine.QueryRequest{}
    request.SetTableName("test1")
    request.SetContent("Puppy")
    request.SetNamespace("123")
    request.SetModal("text")

    response, err := client.InferenceQuery(request)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(response)
}

Java (asynchronous)

import com.aliyun.ha3engine.async.AsyncClient;
import com.aliyun.ha3engine.async.models.QueryRequest;
import com.aliyun.ha3engine.async.models.SearchResponse;
import com.aliyun.sdk.ha3engine.async.core.AsyncConfigInfoProvider;
import com.aliyun.tea.TeaException;
import darabonba.core.client.ClientOverrideConfiguration;
import org.junit.Before;
import org.junit.Test;

import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;

public class InferenceQuery {

    private AsyncClient client;

    @Before
    public void clientInit() {
        AsyncConfigInfoProvider provider = AsyncConfigInfoProvider.create("username", "password");
        client = AsyncClient.builder()
                .credentialsProvider(provider)
                .overrideConfiguration(
                        ClientOverrideConfiguration.create()
                                .setEndpointOverride("ha-cn-i7*****605.public.ha.aliyuncs.com")
                                .setProtocol("http")
                ).build();
    }

    @Test
    public void inferenceQuery() {
        try {
            QueryRequest queryRequest = QueryRequest.builder()
                    .tableName("test2")
                    .indexName("source_text_vector")
                    .namespace("1")
                    .modal("text")
                    .content("Test text-to-vector conversion")
                    .topK(10)
                    .includeVector(false)
                    .build();

            CompletableFuture<SearchResponse> future = client.inferenceQuery(queryRequest);
            String responseBody = future.get().getBody();
            System.out.println("queryInference result: " + responseBody);
        } catch (ExecutionException | InterruptedException e) {
            System.out.println(e.getMessage());
        } catch (TeaException e) {
            System.out.println(e.getCode());
            System.out.println(e.getMessage());
            Map<String, Object> exceptionData = e.getData();
            System.out.println(com.aliyun.teautil.Common.toJSONString(exceptionData));
        }
    }
}

Consulta múltiple

Use MultiQueryRequest para enviar varias subconsultas vectoriales a una sola tabla en una única solicitud. Los resultados de todas las subconsultas se fusionan y se devuelven juntos.

Java

import java.util.Arrays;
import java.util.Map;

import com.aliyun.ha3engine.vector.Client;
import com.aliyun.ha3engine.vector.models.Config;
import com.aliyun.ha3engine.vector.models.MultiQueryRequest;
import com.aliyun.ha3engine.vector.models.QueryRequest;
import com.aliyun.ha3engine.vector.models.SearchResponse;
import com.aliyun.tea.TeaException;

import org.junit.Before;
import org.junit.Test;

public class Demo {

    private Client client;

    @Before
    public void clientInit() throws Exception {
        Config config = new Config();
        config.setInstanceId("ha-cn-i7*****605");
        config.setAccessUserName("username");
        config.setAccessPassWord("password");
        config.setEndpoint("ha-cn-i7*****605.public.ha.aliyuncs.com");
        client = new Client(config);
    }

    @Test
    public void query() throws Exception {
        try {
            MultiQueryRequest multiQueryRequest = new MultiQueryRequest();
            multiQueryRequest.setTableName("test1");
            multiQueryRequest.setTopK(50);
            multiQueryRequest.setOutputFields(Arrays.asList("content", "name", "age"));
            multiQueryRequest.setOrder("DESC");

            QueryRequest queryRequest = new QueryRequest();
            queryRequest.setIndexName("vector");
            queryRequest.setNamespace("space_a");
            queryRequest.setVector(Arrays.asList(0.62498F, 0.886408F, 0.586114F, 0.043189F));

            multiQueryRequest.setQueries(Arrays.asList(queryRequest));

            SearchResponse searchResponse = client.multiQuery(multiQueryRequest);
            System.out.println(searchResponse.getBody());
        } catch (TeaException e) {
            System.out.println(e.getCode());
            System.out.println(e.getMessage());
            Map<String, Object> exceptionData = e.getData();
            System.out.println(com.aliyun.teautil.Common.toJSONString(exceptionData));
        }
    }
}

Python

from alibabacloud_ha3engine_vector.client import Client
from alibabacloud_ha3engine_vector.models import Config, MultiQueryRequest, QueryRequest

config = Config(
    endpoint="http://ha-cn-i7*****605.public.ha.aliyuncs.com",
    access_user_name="username",
    access_pass_word="password")
client = Client(config)

def multi_query():
    query1 = QueryRequest(
        table_name="test",
        vector=[0.1, 0.2, 0.3, 0.4],
        include_vector=True,
        search_params="{\\\"qc.searcher.scan_ratio\\\":0.01}",
        top_k=10)
    request = MultiQueryRequest(
        table_name="test",
        queries=[query1],
        top_k=10)
    result = client.multi_query(request)
    print(result.body)

if __name__ == "__main__":
    multi_query()

Go

package main

import (
    "fmt"
    "github.com/alibabacloud-go/tea-utils/v2/service"
    "github.com/alibabacloud-go/tea/tea"
    ha3engine "github.com/aliyun/alibabacloud-ha3-go-sdk/client"
)

func main() {
    config := &ha3engine.Config{
        Endpoint:       tea.String("ha-cn-i7*****605.public.ha.aliyuncs.com"),
        AccessUserName: tea.String("username"),
        AccessPassWord: tea.String("password"),
        RuntimeOptions: &service.RuntimeOptions{
            KeepAlive:    tea.Bool(true),
            MaxIdleConns: tea.Int(1000),
            ReadTimeout:  tea.Int(1000),
        },
    }

    client, err := ha3engine.NewClient(config)
    if err != nil {
        fmt.Println(err)
        return
    }
    multiQuery(client)
}

func multiQuery(client *ha3engine.Client) {
    query := &ha3engine.QueryRequest{}
    query.SetTableName("test1")

    array := make([]*float32, 4)
    v1, v2, v3, v4 := float32(1.23), float32(4.56), float32(7.89), float32(7.89)
    array[0] = &v1
    array[1] = &v2
    array[2] = &v3
    array[3] = &v4
    query.SetVector(array)

    request := &ha3engine.MultiQueryRequest{}
    request.SetTableName("test1")

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

    response, err := client.MultiQuery(request)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(response)
}

Java (asynchronous)

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

    private AsyncClient client;

    @Before
    public void clientInit() {
        AsyncConfigInfoProvider provider = AsyncConfigInfoProvider.create("username", "password");
        client = AsyncClient.builder()
                .credentialsProvider(provider)
                .overrideConfiguration(
                        ClientOverrideConfiguration.create()
                                .setEndpointOverride("ha-cn-i7*****605.public.ha.aliyuncs.com")
                                .setProtocol("http")
                ).build();
    }

    @Test
    public void searchDoc() {
        try {
            QueryRequest queryRequest = QueryRequest.builder()
                    .indexName("content_vector")
                    .namespace("150086193")
                    .vector(Arrays.asList(0.0001575F, 0.00682848F))
                    .build();
            MultiQueryRequest multiQueryRequest = MultiQueryRequest.builder()
                    .tableName("hybrid")
                    .topK(10)
                    .outputFields(Arrays.asList("content", "source", "instance_id"))
                    .filter("type='TEXT'")
                    .order("DESC")
                    .queries(Arrays.asList(queryRequest))
                    .build();

            CompletableFuture<SearchResponse> future = client.multiQuery(multiQueryRequest);
            String responseBody = future.get().getBody();
            System.out.println("result: " + responseBody);
        } catch (ExecutionException | InterruptedException e) {
            System.out.println(e.getMessage());
        } catch (TeaException e) {
            System.out.println(e.getCode());
            System.out.println(e.getMessage());
            Map<String, Object> exceptionData = e.getData();
            System.out.println(com.aliyun.teautil.Common.toJSONString(exceptionData));
        }
    }
}

Consulta por lotes

Use BatchRequest para enviar varias consultas independientes en una sola solicitud HTTP. Cada consulta puede dirigirse a tablas e índices diferentes. Esto reduce los ciclos de red y permite que el planificador de consultas optimice aquellas que comparten el mismo filtro.

Java

import com.aliyun.ha3engine.vector.Client;
import com.aliyun.ha3engine.vector.models.BatchRequest;
import com.aliyun.ha3engine.vector.models.Config;
import com.aliyun.ha3engine.vector.models.QueryRequest;
import com.aliyun.ha3engine.vector.models.SearchResponse;
import com.aliyun.tea.TeaException;
import org.junit.Before;
import org.junit.Test;

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

public class BatchQuery {

    private Client client;

    @Before
    public void clientInit() throws Exception {
        Config config = new Config();
        config.setInstanceId("ha-cn-i7*****605");
        config.setAccessUserName("username");
        config.setAccessPassWord("password");
        config.setEndpoint("ha-cn-i7*****605.public.ha.aliyuncs.com");
        client = new Client(config);
    }

    @Test
    public void batch() throws Exception {
        try {
            BatchRequest request = new BatchRequest();

            QueryRequest queryRequest1 = new QueryRequest();
            queryRequest1.setTableName("test");
            queryRequest1.setIndexName("vector");
            queryRequest1.setOutputFields(Arrays.asList("id", "name"));
            queryRequest1.setVector(Arrays.asList(0.62498F, 0.886408F, 0.586114F, 0.043189F));

            QueryRequest queryRequest2 = new QueryRequest();
            queryRequest2.setTableName("test1");
            queryRequest2.setIndexName("vector");
            queryRequest2.setOutputFields(Arrays.asList("id", "title"));
            queryRequest2.setVector(Arrays.asList(0.62498F, 0.886408F, 0.586114F, 0.043189F));

            List<QueryRequest> queries = new ArrayList<>();
            queries.add(queryRequest1);
            queries.add(queryRequest2);
            request.setQueries(queries);

            SearchResponse searchResponse = client.batch(request);
            System.out.println("Result:\n" + searchResponse.getBody());
        } catch (TeaException e) {
            System.out.println(e.getCode());
            System.out.println(e.getMessage());
            Map<String, Object> exceptionData = e.getData();
            System.out.println(com.aliyun.teautil.Common.toJSONString(exceptionData));
        }
    }
}

Python

from alibabacloud_ha3engine_vector.client import Client
from alibabacloud_ha3engine_vector.models import Config, QueryRequest, BatchRequest

config = Config(
    endpoint="http://ha-cn-i7*****605.public.ha.aliyuncs.com",
    access_user_name="username",
    access_pass_word="password")
client = Client(config)

def batch_query():
    query_request1 = QueryRequest(
        table_name="test",
        index_name="vector",
        vector=[0.524355, 0.940892, 0.002874, 0.551031],
        include_vector=True,
        search_params="{\\\"qc.searcher.scan_ratio\\\":0.01}",
        top_k=10)
    query_request2 = QueryRequest(
        table_name="test1",
        index_name="vector",
        vector=[0.524355, 0.940892, 0.002874, 0.551031],
        include_vector=True,
        search_params="{\\\"qc.searcher.scan_ratio\\\":0.01}",
        top_k=10)
    request = BatchRequest(queries=[query_request1, query_request2])
    result = client.batch_query(request)
    print(result.headers)
    print(result.body)

if __name__ == "__main__":
    batch_query()

Go

package main

import (
    "fmt"
    "github.com/alibabacloud-go/tea-utils/v2/service"
    "github.com/alibabacloud-go/tea/tea"
    ha3engine "github.com/aliyun/alibabacloud-ha3-go-sdk/client"
)

func main() {
    config := &ha3engine.Config{
        Endpoint:       tea.String("ha-cn-i7*****605.public.ha.aliyuncs.com"),
        AccessUserName: tea.String("username"),
        AccessPassWord: tea.String("password"),
        RuntimeOptions: &service.RuntimeOptions{
            KeepAlive:    tea.Bool(true),
            MaxIdleConns: tea.Int(1000),
            ReadTimeout:  tea.Int(1000),
        },
    }

    client, err := ha3engine.NewClient(config)
    if err != nil {
        fmt.Println(err)
        return
    }
    batch(client)
}

func batch(client *ha3engine.Client) {
    queryRequest1 := &ha3engine.QueryRequest{}
    queryRequest1.SetTableName("test")
    ids1 := make([]*float32, 4)
    ids1[0] = tea.Float32(0.1)
    ids1[1] = tea.Float32(0.2)
    ids1[2] = tea.Float32(0.3)
    ids1[3] = tea.Float32(0.4)
    queryRequest1.SetVector(ids1)

    queryRequest2 := &ha3engine.QueryRequest{}
    queryRequest2.SetTableName("test1")
    ids2 := make([]*float32, 4)
    ids2[0] = tea.Float32(0.1)
    ids2[1] = tea.Float32(0.2)
    ids2[2] = tea.Float32(0.3)
    ids2[3] = tea.Float32(0.4)
    queryRequest2.SetVector(ids2)

    batchRequest := &ha3engine.BatchRequest{}
    batchRequest.SetQueries([]*ha3engine.QueryRequest{queryRequest1, queryRequest2})

    response, err := client.BatchQuery(batchRequest)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(response)
}

Java (asynchronous)

import com.aliyun.ha3engine.async.AsyncClient;
import com.aliyun.ha3engine.async.models.BatchRequest;
import com.aliyun.ha3engine.async.models.QueryRequest;
import com.aliyun.ha3engine.async.models.SearchResponse;
import com.aliyun.sdk.ha3engine.async.core.AsyncConfigInfoProvider;
import com.aliyun.tea.TeaException;
import darabonba.core.client.ClientOverrideConfiguration;
import org.junit.Before;
import org.junit.Test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;

public class BatchQuery {

    private AsyncClient client;

    @Before
    public void clientInit() {
        AsyncConfigInfoProvider provider = AsyncConfigInfoProvider.create("username", "password");
        client = AsyncClient.builder()
                .credentialsProvider(provider)
                .overrideConfiguration(
                        ClientOverrideConfiguration.create()
                                .setEndpointOverride("ha-cn-i7*****605.public.ha.aliyuncs.com")
                                .setProtocol("http")
                ).build();
    }

    @Test
    public void batch() {
        try {
            QueryRequest queryRequest1 = QueryRequest.builder()
                    .tableName("test")
                    .indexName("vector")
                    .vector(Arrays.asList(0.62498F, 0.886408F, 0.586114F, 0.043189F))
                    .outputFields(Arrays.asList("id", "name"))
                    .build();
            QueryRequest queryRequest2 = QueryRequest.builder()
                    .tableName("test1")
                    .indexName("vector")
                    .vector(Arrays.asList(0.62498F, 0.886408F, 0.586114F, 0.043189F))
                    .outputFields(Arrays.asList("id", "title"))
                    .build();
            List<QueryRequest> queries = new ArrayList<>();
            queries.add(queryRequest1);
            queries.add(queryRequest2);
            BatchRequest request = BatchRequest.builder()
                    .queries(queries)
                    .build();

            CompletableFuture<SearchResponse> future = client.batchQuery(request);
            String responseBody = future.get().getBody();
            System.out.println("batch result: " + responseBody);
        } catch (ExecutionException | InterruptedException e) {
            System.out.println(e.getMessage());
        } catch (TeaException e) {
            System.out.println(e.getCode());
            System.out.println(e.getMessage());
            Map<String, Object> exceptionData = e.getData();
            System.out.println(com.aliyun.teautil.Common.toJSONString(exceptionData));
        }
    }
}

Consulta híbrida con un solo vector

Combine un vector denso y un vector disperso en una sola QueryRequest para aprovechar ambas señales de puntuación simultáneamente.

Java

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

import java.util.Arrays;
import java.util.Map;

public class Demo {

    private Client client;

    @Before
    public void clientInit() throws Exception {
        Config config = new Config();
        config.setInstanceId("ha-cn-i7*****605");
        config.setAccessUserName("username");
        config.setAccessPassWord("password");
        config.setEndpoint("ha-cn-i7*****605.public.ha.aliyuncs.com");
        client = new Client(config);
    }

    @Test
    public void query() throws Exception {
        try {
            QueryRequest queryRequest = new QueryRequest();
            queryRequest.setIndexName("index");
            queryRequest.setNamespace("cate1");
            queryRequest.setVector(Arrays.asList(0.0001575F, 0.00682848F));

            SparseData sparseData = new SparseData();
            sparseData.setCount(Arrays.asList(2));                              // Number of elements per sparse vector.
            sparseData.setIndices(Arrays.asList(983589459L, 1261855554L));      // Element indexes in ascending order.
            sparseData.setValues(Arrays.asList(0.0001575F, 0.00682848F));       // Element values matching the index order.
            queryRequest.setSparseData(sparseData);

            SearchResponse searchResponse = client.query(queryRequest);
            System.out.println(searchResponse.getBody());
        } catch (TeaException e) {
            System.out.println(e.getCode());
            System.out.println(e.getMessage());
            Map<String, Object> exceptionData = e.getData();
            System.out.println(com.aliyun.teautil.Common.toJSONString(exceptionData));
        }
    }
}

Python

from alibabacloud_ha3engine_vector.client import Client
from alibabacloud_ha3engine_vector.models import Config, SparseData, QueryRequest

config = Config(
    endpoint="http://ha-cn-i7*****605.public.ha.aliyuncs.com",
    access_user_name="username",
    access_pass_word="password")
client = Client(config)

def mix_query():
    sparse_data = SparseData(indices=[101, 203], values=[0.1, 0.5])
    request = QueryRequest(
        table_name="test",
        index_name="embedding",
        vector=[0.1, 0.2, 0.3, 0.4],
        sparse_data=sparse_data,
        include_vector=True,
        top_k=10)
    result = client.query(request)
    print(result.body)

if __name__ == "__main__":
    mix_query()

Go

package main

import (
    "fmt"
    "github.com/alibabacloud-go/tea-utils/v2/service"
    "github.com/alibabacloud-go/tea/tea"
    ha3engine "github.com/aliyun/alibabacloud-ha3-go-sdk/client"
)

func main() {
    config := &ha3engine.Config{
        Endpoint:       tea.String("ha-cn-i7*****605.public.ha.aliyuncs.com"),
        AccessUserName: tea.String("username"),
        AccessPassWord: tea.String("password"),
        RuntimeOptions: &service.RuntimeOptions{
            KeepAlive:    tea.Bool(true),
            MaxIdleConns: tea.Int(1000),
            ReadTimeout:  tea.Int(1000),
        },
    }

    client, err := ha3engine.NewClient(config)
    if err != nil {
        fmt.Println(err)
        return
    }
    mixQuery(client)
}

func mixQuery(client *ha3engine.Client) {
    request := &ha3engine.QueryRequest{}
    request.SetTableName("test1")

    ids := make([]*float32, 4)
    ids[0] = tea.Float32(0.1)
    ids[1] = tea.Float32(0.2)
    ids[2] = tea.Float32(0.3)
    ids[3] = tea.Float32(0.4)
    request.SetVector(ids)

    count := make([]*int, 1)
    count[0] = tea.Int(2)
    indices := make([]*int64, 2)
    indices[0] = tea.Int64(1)
    indices[1] = tea.Int64(2)
    values := make([]*float32, 2)
    values[0] = tea.Float32(0.1)
    values[1] = tea.Float32(0.2)

    request.SetSparseData(&ha3engine.SparseData{
        Count:   count,
        Indices: indices,
        Values:  values,
    })

    response, err := client.Query(request)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(response)
}

Java (asynchronous)

import com.aliyun.ha3engine.async.AsyncClient;
import com.aliyun.ha3engine.async.models.QueryRequest;
import com.aliyun.ha3engine.async.models.SearchResponse;
import com.aliyun.ha3engine.async.models.SparseData;
import com.aliyun.sdk.ha3engine.async.core.AsyncConfigInfoProvider;
import com.aliyun.tea.TeaException;
import darabonba.core.client.ClientOverrideConfiguration;
import org.junit.Before;
import org.junit.Test;

import java.util.Arrays;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;

public class MixQuery {

    private AsyncClient client;

    @Before
    public void clientInit() {
        AsyncConfigInfoProvider provider = AsyncConfigInfoProvider.create("username", "password");
        client = AsyncClient.builder()
                .credentialsProvider(provider)
                .overrideConfiguration(
                        ClientOverrideConfiguration.create()
                                .setEndpointOverride("ha-cn-i7*****605.public.ha.aliyuncs.com")
                                .setProtocol("http")
                ).build();
    }

    @Test
    public void mixQuery() {
        try {
            QueryRequest queryRequest = QueryRequest.builder()
                    .tableName("test1")
                    .indexName("vector")
                    .vector(Arrays.asList(0.62498F, 0.886408F, 0.586114F, 0.043189F))
                    .sparseData(SparseData.builder()
                            .count(Arrays.asList(2))
                            .indices(Arrays.asList(1L, 2L))
                            .values(Arrays.asList(0.1F, 0.2F))
                            .build())
                    .topK(10)
                    .includeVector(false)
                    .build();

            CompletableFuture<SearchResponse> future = client.query(queryRequest);
            String responseBody = future.get().getBody();
            System.out.println("query result: " + responseBody);
        } catch (ExecutionException | InterruptedException e) {
            System.out.println(e.getMessage());
        } catch (TeaException e) {
            System.out.println(e.getCode());
            System.out.println(e.getMessage());
            Map<String, Object> exceptionData = e.getData();
            System.out.println(com.aliyun.teautil.Common.toJSONString(exceptionData));
        }
    }
}

Consulta híbrida con varios vectores

Use MultiQueryRequest para combinar vectores densos y dispersos en varias subconsultas dentro de una única solicitud. Cada subconsulta puede incluir sus propios datos dispersos, lo que permite una puntuación híbrida multivectorial simultánea.

Importante

Al realizar consultas híbridas basadas en varios vectores, todos los vectores de una misma consulta deben ser del mismo tipo; por ejemplo, varios vectores densos o pares de vectores densos y dispersos.

Java

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

import java.util.Arrays;
import java.util.Map;

public class Demo {

    private Client client;

    @Before
    public void clientInit() throws Exception {
        Config config = new Config();
        config.setInstanceId("ha-cn-i7*****605");
        config.setAccessUserName("username");
        config.setAccessPassWord("password");
        config.setEndpoint("ha-cn-i7*****605.public.ha.aliyuncs.com");
        client = new Client(config);
    }

    @Test
    public void query() throws Exception {
        try {
            MultiQueryRequest multiQueryRequest = new MultiQueryRequest();
            multiQueryRequest.setTableName("main");
            multiQueryRequest.setTopK(50);
            multiQueryRequest.setOutputFields(Arrays.asList("content", "source", "instance_id"));
            multiQueryRequest.setFilter("type='TEXT'");
            multiQueryRequest.setOrder("DESC");

            QueryRequest queryRequest = new QueryRequest();
            queryRequest.setIndexName("index");
            queryRequest.setNamespace("cate1");
            queryRequest.setVector(Arrays.asList(0.0001575F, 0.00682848F));

            SparseData sparseData = new SparseData();
            sparseData.setCount(Arrays.asList(2));
            sparseData.setIndices(Arrays.asList(983589459L, 1261855554L));
            sparseData.setValues(Arrays.asList(0.0001575F, 0.00682848F));
            queryRequest.setSparseData(sparseData);

            multiQueryRequest.setQueries(Arrays.asList(queryRequest));

            SearchResponse searchResponse = client.multiQuery(multiQueryRequest);
            System.out.println(searchResponse.getBody());
        } catch (TeaException e) {
            System.out.println(e.getCode());
            System.out.println(e.getMessage());
            Map<String, Object> exceptionData = e.getData();
            System.out.println(com.aliyun.teautil.Common.toJSONString(exceptionData));
        }
    }
}

Python

from alibabacloud_ha3engine_vector.client import Client
from alibabacloud_ha3engine_vector.models import Config, SparseData, MultiQueryRequest
from alibabacloud_ha3engine_vector.models import QueryRequest

config = Config(
    endpoint="http://ha-cn-i7*****605.public.ha.aliyuncs.com",
    access_user_name="username",
    access_pass_word="password")
client = Client(config)

def mix_multi_query():
    sd1 = SparseData(indices=[101, 203], values=[0.1, 0.5])
    sd2 = SparseData(indices=[200, 405, 502], values=[0.9, 0.5, 0.75])
    q1 = QueryRequest(vector=[0.1, 0.2, 0.3, 0.4], sparse_data=sd1)
    q2 = QueryRequest(vector=[0.4, 0.5, 0.6, 0.7], sparse_data=sd2)
    request = MultiQueryRequest(
        table_name="test",
        queries=[q1, q2],
        top_k=3,
        include_vector=True)
    result = client.multi_query(request)
    print(result.body)

if __name__ == "__main__":
    mix_multi_query()

Go

package main

import (
    "fmt"
    "github.com/alibabacloud-go/tea-utils/v2/service"
    "github.com/alibabacloud-go/tea/tea"
    ha3engine "github.com/aliyun/alibabacloud-ha3-go-sdk/client"
)

func main() {
    config := &ha3engine.Config{
        Endpoint:       tea.String("ha-cn-i7*****605.public.ha.aliyuncs.com"),
        AccessUserName: tea.String("username"),
        AccessPassWord: tea.String("password"),
        RuntimeOptions: &service.RuntimeOptions{
            KeepAlive:    tea.Bool(true),
            MaxIdleConns: tea.Int(1000),
            ReadTimeout:  tea.Int(1000),
        },
    }

    client, err := ha3engine.NewClient(config)
    if err != nil {
        fmt.Println(err)
        return
    }
    mixMultiVectorQuery(client)
}

func mixMultiVectorQuery(client *ha3engine.Client) {
    array := make([]*float32, 4)
    value1 := float32(1.23)
    value2 := float32(4.56)
    value3 := float32(7.89)
    value4 := float32(7.89)
    array[0] = &value1
    array[1] = &value2
    array[2] = &value3
    array[3] = &value4

    count := make([]*int, 1)
    count[0] = tea.Int(2)
    indices := make([]*int64, 2)
    indices[0] = tea.Int64(1)
    indices[1] = tea.Int64(2)
    values := make([]*float32, 2)
    values[0] = tea.Float32(0.1)
    values[1] = tea.Float32(0.2)
    sparseData := &ha3engine.SparseData{
        Count:   count,
        Indices: indices,
        Values:  values,
    }

    query1 := &ha3engine.QueryRequest{}
    query1.SetSparseData(sparseData)
    query1.SetVector(array)

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

    request := &ha3engine.MultiQueryRequest{}
    request.SetTableName("test1")

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

    response, err := client.MultiQuery(request)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(response)
}

Java (asynchronous)

import com.aliyun.ha3engine.async.AsyncClient;
import com.aliyun.ha3engine.async.models.MultiQueryRequest;
import com.aliyun.ha3engine.async.models.QueryRequest;
import com.aliyun.ha3engine.async.models.SearchResponse;
import com.aliyun.ha3engine.async.models.SparseData;
import com.aliyun.sdk.ha3engine.async.core.AsyncConfigInfoProvider;
import com.aliyun.tea.TeaException;
import darabonba.core.client.ClientOverrideConfiguration;
import org.junit.Before;
import org.junit.Test;

import java.util.Arrays;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;

public class MixMultiVectorQuery {

    private AsyncClient client;

    @Before
    public void clientInit() {
        AsyncConfigInfoProvider provider = AsyncConfigInfoProvider.create("username", "password");
        client = AsyncClient.builder()
                .credentialsProvider(provider)
                .overrideConfiguration(
                        ClientOverrideConfiguration.create()
                                .setEndpointOverride("ha-cn-i7*****605.public.ha.aliyuncs.com")
                                .setProtocol("http")
                ).build();
    }

    @Test
    public void mixMultiVectorQuery() {
        try {
            QueryRequest query1 = QueryRequest.builder()
                    .vector(Arrays.asList(0.62498F, 0.886408F, 0.586114F, 0.043189F))
                    .sparseData(SparseData.builder()
                            .count(Arrays.asList(2))
                            .indices(Arrays.asList(1L, 2L))
                            .values(Arrays.asList(0.1F, 0.2F))
                            .build())
                    .namespace("space_a")
                    .build();
            QueryRequest query2 = QueryRequest.builder()
                    .vector(Arrays.asList(0.62498F, 0.886408F, 0.586114F, 0.043189F))
                    .sparseData(SparseData.builder()
                            .count(Arrays.asList(2))
                            .indices(Arrays.asList(1L, 2L))
                            .values(Arrays.asList(0.1F, 0.2F))
                            .build())
                    .namespace("space_b")
                    .build();
            MultiQueryRequest request = MultiQueryRequest.builder()
                    .tableName("test2")
                    .topK(3)
                    .includeVector(false)
                    .queries(Arrays.asList(query1, query2))
                    .build();

            CompletableFuture<SearchResponse> future = client.multiQuery(request);
            String responseBody = future.get().getBody();
            System.out.println("query result: " + responseBody);
        } catch (ExecutionException | InterruptedException e) {
            System.out.println(e.getMessage());
        } catch (TeaException e) {
            System.out.println(e.getCode());
            System.out.println(e.getMessage());
            Map<String, Object> exceptionData = e.getData();
            System.out.println(com.aliyun.teautil.Common.toJSONString(exceptionData));
        }
    }
}

Consulta híbrida basada en vectores y texto

Combine la búsqueda vectorial de k vecinos más cercanos (k-NN) con la búsqueda de texto completo en una sola SearchRequest. El campo knn acepta una QueryRequest con parámetros vectoriales, mientras que el campo text acepta una TextQuery con una cadena de consulta.

Java

import java.util.Arrays;
import java.util.Map;

import com.alibaba.fastjson.JSONObject;
import com.aliyun.ha3engine.vector.Client;
import com.aliyun.ha3engine.vector.models.*;
import com.aliyun.tea.TeaException;

import org.junit.Before;
import org.junit.Test;

public class VectorSearchService {

    private Client client;

    @Before
    public void clientInit() throws Exception {
        Config config = new Config();
        config.setInstanceId("ha-cn-i7*****605");
        config.setAccessUserName("username");
        config.setAccessPassWord("password");
        config.setEndpoint("ha-cn-i7*****605.public.ha.aliyuncs.com");
        client = new Client(config);
    }

    @Test
    public void search() throws Exception {
        try {
            // Vector (k-NN) parameters.
            QueryRequest queryRequest = new QueryRequest();
            queryRequest.setIndexName("vector");
            queryRequest.setTopK(10);
            queryRequest.setVector(Arrays.asList(0.62498F, 0.886408F, 0.586114F, 0.043189F));
            SparseData sparseData = new SparseData();
            sparseData.setIndices(Arrays.asList(1L, 2L, 3L, 4L));
            sparseData.setValues(Arrays.asList(0.0001575F, 0.00682848F, 0.008745F, 0.4583474F));
            queryRequest.setSparseData(sparseData);

            // Text query parameters.
            TextQuery textQuery = new TextQuery();
            textQuery.setQueryString("content:'Publish'");

            SearchRequest request = new SearchRequest();
            request.setTableName("test1");
            request.setKnn(queryRequest);
            request.setText(textQuery);
            request.setSize(10);
            request.setOutputFields(Arrays.asList("id", "content", "name"));

            SearchResponse searchResponse = client.search(request);
            System.out.println("Result:\n" + searchResponse.getBody());
        } catch (TeaException e) {
            System.out.println(e.getCode());
            System.out.println(e.getMessage());
            Map<String, Object> exceptionData = e.getData();
            System.out.println(com.aliyun.teautil.Common.toJSONString(exceptionData));
        }
    }
}

Python

from alibabacloud_ha3engine_vector.client import Client
from alibabacloud_ha3engine_vector.models import Config, SearchRequest, TextQuery, QueryRequest, RankQuery

config = Config(
    endpoint="http://ha-cn-i7*****605.public.ha.aliyuncs.com",
    access_user_name="username",
    access_pass_word="password")
client = Client(config)

def search():
    knn = QueryRequest(
        index_name="vector",
        vector=[0.62498, 0.886408, 0.586114, 0.043189],
        include_vector=True,
        top_k=10)
    text = TextQuery(query_string="content:'Publish'")
    request = SearchRequest(
        table_name="test1",
        size=10,
        output_fields=["id", "content", "name"],
        knn=knn,
        text=text,
        rank=RankQuery(rrf={"rankConstant": 1000}))
    result = client.search(request)
    print(result.body)

if __name__ == "__main__":
    search()

Go

package main

import (
    "fmt"
    "github.com/alibabacloud-go/tea-utils/v2/service"
    "github.com/alibabacloud-go/tea/tea"
    ha3engine "github.com/aliyun/alibabacloud-ha3-go-sdk/client"
)

func main() {
    config := &ha3engine.Config{
        Endpoint:       tea.String("ha-cn-i7*****605.public.ha.aliyuncs.com"),
        AccessUserName: tea.String("username"),
        AccessPassWord: tea.String("password"),
        RuntimeOptions: &service.RuntimeOptions{
            KeepAlive:    tea.Bool(true),
            MaxIdleConns: tea.Int(1000),
            ReadTimeout:  tea.Int(1000),
        },
    }

    client, err := ha3engine.NewClient(config)
    if err != nil {
        fmt.Println(err)
        return
    }
    search(client)
}

func search(client *ha3engine.Client) {
    searchRequest := &ha3engine.SearchRequest{}
    searchRequest.SetTableName("test1")

    knn := &ha3engine.QueryRequest{}
    ids := make([]*float32, 4)
    ids[0] = tea.Float32(0.1)
    ids[1] = tea.Float32(0.2)
    ids[2] = tea.Float32(0.3)
    ids[3] = tea.Float32(0.4)
    knn.SetVector(ids)

    text := &ha3engine.TextQuery{}
    text.SetQueryString("content:'Publish'")

    searchRequest.SetText(text)
    searchRequest.SetKnn(knn)

    response, err := client.Search(searchRequest)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(response)
}

Java (asynchronous)

import com.aliyun.ha3engine.async.AsyncClient;
import com.aliyun.ha3engine.async.models.QueryRequest;
import com.aliyun.ha3engine.async.models.SearchRequest;
import com.aliyun.ha3engine.async.models.SearchResponse;
import com.aliyun.ha3engine.async.models.TextQuery;
import com.aliyun.sdk.ha3engine.async.core.AsyncConfigInfoProvider;
import com.aliyun.tea.TeaException;
import darabonba.core.client.ClientOverrideConfiguration;
import org.junit.Before;
import org.junit.Test;

import java.util.Arrays;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;

public class VectorTextMixSearch {

    private AsyncClient client;

    @Before
    public void clientInit() {
        AsyncConfigInfoProvider provider = AsyncConfigInfoProvider.create("username", "password");
        client = AsyncClient.builder()
                .credentialsProvider(provider)
                .overrideConfiguration(
                        ClientOverrideConfiguration.create()
                                .setEndpointOverride("ha-cn-i7*****605.public.ha.aliyuncs.com")
                                .setProtocol("http")
                ).build();
    }

    @Test
    public void search() {
        try {
            SearchRequest request = SearchRequest.builder()
                    .tableName("test1")
                    .size(10)
                    .knn(QueryRequest.builder()
                            .vector(Arrays.asList(0.1f, 0.2f, 0.3f, 0.4f))
                            .namespace("space_a")
                            .build())
                    .text(TextQuery.builder()
                            .queryString("content:'Content'")
                            .build())
                    .outputFields(Arrays.asList("name", "age", "content"))
                    .build();

            CompletableFuture<SearchResponse> future = client.search(request);
            String responseBody = future.get().getBody();
            System.out.println("search result: " + responseBody);
        } catch (ExecutionException | InterruptedException e) {
            System.out.println(e.getMessage());
        } catch (TeaException e) {
            System.out.println(e.getCode());
            System.out.println(e.getMessage());
            Map<String, Object> exceptionData = e.getData();
            System.out.println(com.aliyun.teautil.Common.toJSONString(exceptionData));
        }
    }
}

Notas de uso

  • Al ejecutar consultas híbridas basadas en varios vectores, todos los vectores de una misma consulta deben ser del mismo tipo (por ejemplo, varios vectores densos o pares de vectores densos y dispersos).

  • Para las dependencias de Go, especifique siempre la etiqueta correspondiente a la edición (@v1.1.17-vector) al ejecutar go get. No utilice el comando sin etiqueta go get github.com/aliyun/alibabacloud-ha3-go-sdk, ya que podría resolver el SDK de una edición diferente.

  • Para obtener más información sobre los parámetros de respuesta, consulte Response parameters.

Pasos siguientes