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

OpenSearch:データのクエリ

最終更新日:Nov 06, 2025

この Topic では、非同期モードの Java、Java、Python、および Go 用の OpenSearch Vector Search Edition SDK を使用して、ベクトルベースのクエリ、予測ベースのクエリ、およびフィルター条件を使用したクエリを実行する方法について説明します。

依存関係

Java

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

Python

# 要件: 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

非同期 Java

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

パラメーター

Java および Python 用の SDK では、endpoint、instance_id、access_user_name、access_pass_word の各パラメーターを設定する必要があります。

  • endpoint: 内部またはパブリックエンドポイント。

インスタンス詳細ページの [ネットワーク情報] および [API エンドポイント] セクションでエンドポイントを表示できます。

image.png

パブリックアクセスをオンにすると、オンプレミスマシン上のパブリックエンドポイントを使用して OpenSearch Vector Search Edition インスタンスにアクセスできます。パブリックエンドポイントには "public" という単語が含まれています。インスタンスへのアクセスのために IP アドレスホワイトリストを設定できます。詳細については、「インスタンスの詳細の表示」トピックの「ネットワーク情報セクション」をご参照ください。

Elastic Compute Service (ECS) インスタンスを使用して OpenSearch Vector Search Edition インスタンスにアクセスする場合、ECS インスタンスと同じ vSwitch を指定して、API エンドポイントを使用して OpenSearch Vector Search Edition インンスにアクセスできます。

  • instance_id: OpenSearch Vector Search Edition インスタンスの ID。

image.png

  • access_user_name: ユーザー名。

  • access_pass_word: パスワード。

ユーザー名とパスワードは、インスタンス詳細ページの [API エンドポイント] セクションで表示できます。パスワードはインスタンスの購入時に指定され、変更可能です。

image.png

ベクトルベースのクエリ

構文

  1. table_name: クエリ対象のテーブルの名前。

  2. vector: クエリのベクトルデータ。クエリベクトルのディメンションは、ベクターインデックスのディメンションと一致する必要があります。

  3. vector_count: ベクトルフィールド内のベクトルの数。たとえば、このパラメーターを 2 に設定すると、クエリには 2 つのベクトルが含まれます。

  4. include_vector: ドキュメント内のベクトル情報を返すかどうかを指定します。

  5. output_fields: 値を返すフィールドのリスト。

  6. top_k: 返す結果の数。

  7. filter: フィルター条件を指定するフィルター式。構文の詳細については、「フィルター式」をご参照ください。

  8. search_params: クエリパラメーター。詳細については、「QcSearcher」および「HNSW 設定」をご参照ください。

  9. queries: 実行するクエリ。複数のクエリを送信できます。

単純なクエリ

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 {

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

    @Before
    public void clientInit() throws Exception {
        /*
          エンジンクライアントを初期化します。
         */
        Config config = new Config();

        // インスタンスの名前。インスタンス名は、インスタンス詳細ページの左上隅で確認できます。例: ha-cn-i7*****605。
        config.setInstanceId("ha-cn-i7*****605");
        // ユーザー名。ユーザー名は、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
        config.setAccessUserName("username");
        // パスワード。パスワードは、インスタンス詳細ページの [API エンドポイント] セクションで変更できます。
        config.setAccessPassWord("password");
        // インスタンスの API エンドポイント。API エンドポイントは、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
        config.setEndpoint("ha-cn-i7*****605.public.ha.aliyuncs.com");

        client = new Client(config);
    }

    @Test
    public void 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); // オプション。ドキュメント内のベクトル情報を返すかどうかを指定します。
            
            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
from alibabacloud_ha3engine_vector.models import QueryRequest

config = Config(
    # インスタンスの API エンドポイント。API エンドポイントは、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
    endpoint="http://ha-cn-i7*****605.public.ha.aliyuncs.com",
    # ユーザー名。ユーザー名は、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
    access_user_name="username",
    # パスワード。パスワードは、インスタンス詳細ページの [API エンドポイント] セクションで変更できます。
    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{
        // インスタンスの API エンドポイント。API エンドポイントは、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
        Endpoint: tea.String("ha-cn-i7*****605.public.ha.aliyuncs.com"),
        // ユーザー名。ユーザー名は、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
        AccessUserName: tea.String("username"),
        // パスワード。パスワードは、インスタンス詳細ページの [API エンドポイント] セクションで変更できます。
        AccessPassWord: tea.String("password"),
        RuntimeOptions: &service.RuntimeOptions{
            KeepAlive:    tea.Bool(true),
            MaxIdleConns: tea.Int(1000),
            ReadTimeout:  tea.Int(1000),
        },
    }

    // リクエストを送信するためのクライアントを初期化します。
    client, _clientErr := ha3engine.NewClient(config)

    // システムがクライアントを作成するときにエラーが発生した場合、_clientErr とエラーメッセージが返されます。
    if _clientErr != nil {
        fmt.Println(_clientErr)
        return
    }

    query(client)
}

/**
 * 単純なクエリ
 */
func query(client *ha3engine.Client) {

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

    // 32 ビット浮動小数点数の配列を作成します。
    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)

    searchRequestModel.SetVector(ids)

    response, _requestErr := client.Query(searchRequestModel)

    // システムがリクエストを送信するときにエラーが発生した場合、_requestErr とエラーメッセージが返されます。
    if _requestErr != nil {
        fmt.Println(_requestErr)
        return
    }

    // エラーが発生しない場合は、応答を表示します。
    fmt.Println(response)
}

非同期モードの Java

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 {

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

    @Before
    public void clientInit() {
        // インスタンスへのアクセスに使用されるユーザー名とパスワード。ユーザー名とパスワードは、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
        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> 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));
        }
    }
}

複数ベクトルに基づくクエリ

複数のベクトルを指定して、ベクトルベースのクエリを実行できます。システムは取得した結果をマージしてソートし、上位 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 {

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

    @Before
    public void clientInit() throws Exception {
        /*
          エンジンクライアントを初期化します。
         */
        Config config = new Config();

        // インスタンスの名前。インスタンス名は、インスタンス詳細ページの左上隅で確認できます。例: ha-cn-i7*****605。
        config.setInstanceId("ha-cn-i7*****605");
        // ユーザー名。ユーザー名は、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
        config.setAccessUserName("username");
        // パスワード。パスワードは、インスタンス詳細ページの [API エンドポイント] セクションで変更できます。
        config.setAccessPassWord("password");
        // インスタンスの API エンドポイント。API エンドポイントは、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
        config.setEndpoint("ha-cn-i7*****605.public.ha.aliyuncs.com");

        client = new Client(config);
    }

    @Test
    public void 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); // オプション。ベクトルフィールドに含まれるベクトルの数。
            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
from alibabacloud_ha3engine_vector.models import QueryRequest

config = Config(
    # インスタンスの API エンドポイント。API エンドポイントは、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
    endpoint="http://ha-cn-i7*****605.public.ha.aliyuncs.com",
    # ユーザー名。ユーザー名は、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
    access_user_name="username",
    # パスワード。パスワードは、インスタンス詳細ページの [API エンドポイント] セクションで変更できます。
    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() {

	// リクエストを送信するためのクライアントインスタンスを作成します。
	config := &ha3engine.Config{
		// インスタンスの API エンドポイント。API エンドポイントは、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
		Endpoint: tea.String("ha-cn-i7*****605.public.ha.aliyuncs.com"),
		// ユーザー名。ユーザー名は、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
		AccessUserName: tea.String("username"),
		// パスワード。パスワードは、インスタンス詳細ページの [API エンドポイント] セクションで変更できます。
		AccessPassWord: tea.String("password"),
		RuntimeOptions: &service.RuntimeOptions{
			KeepAlive:    tea.Bool(true),
			MaxIdleConns: tea.Int(1000),
			ReadTimeout:  tea.Int(1000),
		},
	}

	// リクエストを送信するためのクライアントを初期化します。
	client, _clientErr := ha3engine.NewClient(config)

	// システムがクライアントを作成するときにエラーが発生した場合、_clientErr とエラーメッセージが返されます。
	if _clientErr != nil {
		fmt.Println(_clientErr)
		return
	}

	multiVectorQuery(client)
}

func multiVectorQuery(client *ha3engine.Client) {

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

	// 32 ビット浮動小数点数の配列を作成します。
	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)

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

	response, _requestErr := client.Query(queryRequest)

	// システムがリクエストを送信するときにエラーが発生した場合、_requestErr とエラーメッセージが返されます。
	if _requestErr != nil {
		fmt.Println(_requestErr)
		return
	}

	// エラーが発生しない場合は、応答を表示します。
	fmt.Println(response)
}

非同期モードの Java

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 {

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

    @Before
    public void clientInit() {
        // インスタンスへのアクセスに使用されるユーザー名とパスワード。ユーザー名とパスワードは、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
        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> 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));
        }
    }
}

名前空間ベースのクエリ

OpenSearch Vector Search Edition では、名前空間を使用してインデックスをパーティション分割できます。ベクターインデックスに名前空間を設定した後、名前空間を指定してデータをクエリできます。これにより、異なるクエリリクエストを送信することで、インデックスの異なるサブセットをクエリできます。

: ベクターインデックスに名前空間を設定する場合、データをクエリするときに名前空間を指定する必要があります。

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 {

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

    @Before
    public void clientInit() throws Exception {
        /*
          エンジンクライアントを初期化します。
         */
        Config config = new Config();

        // インスタンスの名前。インスタンス名は、インスタンス詳細ページの左上隅で確認できます。例: ha-cn-i7*****605。
        config.setInstanceId("ha-cn-i7*****605");
        // ユーザー名。ユーザー名は、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
        config.setAccessUserName("username");
        // パスワード。パスワードは、インスタンス詳細ページの [API エンドポイント] セクションで変更できます。
        config.setAccessPassWord("password");
        // インスタンスの API エンドポイント。API エンドポイントは、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
        config.setEndpoint("ha-cn-i7*****605.public.ha.aliyuncs.com");

        client = new Client(config);
    }

    @Test
    public void 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
from alibabacloud_ha3engine_vector.models import QueryRequest

config = Config(
    # インスタンスの API エンドポイント。API エンドポイントは、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
    endpoint="http://ha-cn-i7*****605.public.ha.aliyuncs.com",
    # ユーザー名。ユーザー名は、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
    access_user_name="username",
    # パスワード。パスワードは、インスタンス詳細ページの [API エンドポイント] セクションで変更できます。
    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() {

	// リクエストを送信するためのクライアントインスタンスを作成します。
	config := &ha3engine.Config{
		// インスタンスの API エンドポイント。API エンドポイントは、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
		Endpoint: tea.String("ha-cn-i7*****605.public.ha.aliyuncs.com"),
		// ユーザー名。ユーザー名は、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
		AccessUserName: tea.String("username"),
		// パスワード。パスワードは、インスタンス詳細ページの [API エンドポイント] セクションで変更できます。
		AccessPassWord: tea.String("password"),
		RuntimeOptions: &service.RuntimeOptions{
			KeepAlive:    tea.Bool(true),
			MaxIdleConns: tea.Int(1000),
			ReadTimeout:  tea.Int(1000),
		},
	}

	// リクエストを送信するためのクライアントを初期化します。
	client, _clientErr := ha3engine.NewClient(config)

	// システムがクライアントを作成するときにエラーが発生した場合、_clientErr とエラーメッセージが返されます。
	if _clientErr != nil {
		fmt.Println(_clientErr)
		return
	}

	nameSpaceQuery(client)
}

func nameSpaceQuery(client *ha3engine.Client) {

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

	// 32 ビット浮動小数点数の配列を作成します。
	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)

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

	response, _requestErr := client.Query(searchRequestModel)

	// システムがリクエストを送信するときにエラーが発生した場合、_requestErr とエラーメッセージが返されます。
	if _requestErr != nil {
		fmt.Println(_requestErr)
		return
	}

	// エラーが発生しない場合は、応答を表示します。
	fmt.Println(response)
}

非同期モードの Java

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 {
    /**
     * OpenSearch Vector Search Edition インスタンスのエンジンクライアント。
     */
    private AsyncClient client;

    @Before
    public void clientInit() {
        // インスタンスへのアクセスに使用されるユーザー名とパスワード。ユーザー名とパスワードは、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
        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> 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));
        }
    }
}

複数の名前空間に基づくクエリ

ベクターインデックスに名前空間を設定した場合、複数の名前空間でデータをクエリできます。

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 {

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

    @Before
    public void clientInit() throws Exception {
        /*
          エンジンクライアントを初期化します。
         */
        Config config = new Config();

        // インスタンスの名前。インスタンス名は、インスタンス詳細ページの左上隅で確認できます。例: ha-cn-i7*****605。
        config.setInstanceId("ha-cn-i7*****605");
        // ユーザー名。ユーザー名は、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
        config.setAccessUserName("username");
        // パスワード。パスワードは、インスタンス詳細ページの [API エンドポイント] セクションで変更できます。
        config.setAccessPassWord("password");
        // インスタンスの API エンドポイント。API エンドポイントは、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
        config.setEndpoint("ha-cn-i7*****605.public.ha.aliyuncs.com");

        client = new Client(config);
    }

    @Test
    public void 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
from alibabacloud_ha3engine_vector.models import QueryRequest
from alibabacloud_ha3engine_vector.models import MultiQueryRequest

config = Config(
    # インスタンスの API エンドポイント。API エンドポイントは、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
    endpoint="http://ha-cn-i7*****605.public.ha.aliyuncs.com",
    # ユーザー名。ユーザー名は、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
    access_user_name="username",
    # パスワード。パスワードは、インスタンス詳細ページの [API エンドポイント] セクションで変更できます。
    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() {

	// リクエストを送信するためのクライアントインスタンスを作成します。
	config := &ha3engine.Config{
		// インスタンスの API エンドポイント。API エンドポイントは、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
		Endpoint: tea.String("ha-cn-i7*****605.public.ha.aliyuncs.com"),
		// ユーザー名。ユーザー名は、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
		AccessUserName: tea.String("username"),
		// パスワード。パスワードは、インスタンス詳細ページの [API エンドポイント] セクションで変更できます。
		AccessPassWord: tea.String("password"),
		RuntimeOptions: &service.RuntimeOptions{
			KeepAlive:    tea.Bool(true),
			MaxIdleConns: tea.Int(1000),
			ReadTimeout:  tea.Int(1000),
		},
	}

	// リクエストを送信するためのクライアントを初期化します。
	client, _clientErr := ha3engine.NewClient(config)

	// システムがクライアントを作成するときにエラーが発生した場合、_clientErr とエラーメッセージが返されます。
	if _clientErr != nil {
		fmt.Println(_clientErr)
		return
	}

	multiNameSpaceQuery(client)
}

func multiNameSpaceQuery(client *ha3engine.Client) {

	query1 := &ha3engine.QueryRequest{}
	// 32 ビット浮動小数点数の配列を作成します。
	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

	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)

	// システムがリクエストを送信するときにエラーが発生した場合、_requestErr とエラーメッセージが返されます。
	if _requestErr != nil {
		fmt.Println(_requestErr)
		return
	}

	// エラーが発生しない場合は、応答を表示します。
	fmt.Println(response)
}

非同期モードの Java

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 {
    /**
     * OpenSearch Vector Search Edition インスタンスのエンジンクライアント。
     */
    private AsyncClient client;

    @Before
    public void clientInit() {
        // インスタンスへのアクセスに使用されるユーザー名とパスワード。ユーザー名とパスワードは、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
        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> responseCompletableFuture = client.multiQuery(request);
            String responseBody = responseCompletableFuture.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));
        }
    }
}

フィルター条件を使用したクエリ

フィルター式を使用して、データクエリのフィルター条件を指定できます。

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 {

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

    @Before
    public void clientInit() throws Exception {
        /*
          エンジンクライアントを初期化します。
         */
        Config config = new Config();

        // インスタンスの名前。インスタンス名は、インスタンス詳細ページの左上隅で確認できます。例: ha-cn-i7*****605。
        config.setInstanceId("ha-cn-i7*****605");
        // ユーザー名。ユーザー名は、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
        config.setAccessUserName("username");
        // パスワード。パスワードは、インスタンス詳細ページの [API エンドポイント] セクションで変更できます。
        config.setAccessPassWord("password");
        // インスタンスの API エンドポイント。API エンドポイントは、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
        config.setEndpoint("ha-cn-i7*****605.public.ha.aliyuncs.com");

        client = new Client(config);
    }

    @Test
    public void 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
from alibabacloud_ha3engine_vector.models import QueryRequest

config = Config(
    # インスタンスの API エンドポイント。API エンドポイントは、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
    endpoint="http://ha-cn-i7*****605.public.ha.aliyuncs.com",
    # ユーザー名。ユーザー名は、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
    access_user_name="username",
    # パスワード。パスワードは、インスタンス詳細ページの [API エンドポイント] セクションで変更できます。
    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() {

	// リクエストを送信するためのクライアントインスタンスを作成します。
	config := &ha3engine.Config{
		// インスタンスの API エンドポイント。API エンドポイントは、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
		Endpoint: tea.String("ha-cn-i7*****605.public.ha.aliyuncs.com"),
		// ユーザー名。ユーザー名は、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
		AccessUserName: tea.String("username"),
		// パスワード。パスワードは、インスタンス詳細ページの [API エンドポイント] セクションで変更できます。
		AccessPassWord: tea.String("password"),
		RuntimeOptions: &service.RuntimeOptions{
			KeepAlive:    tea.Bool(true),
			MaxIdleConns: tea.Int(1000),
			ReadTimeout:  tea.Int(1000),
		},
	}

	// リクエストを送信するためのクライアントを初期化します。
	client, _clientErr := ha3engine.NewClient(config)

	// システムがクライアントを作成するときにエラーが発生した場合、_clientErr とエラーメッセージが返されます。
	if _clientErr != nil {
		fmt.Println(_clientErr)
		return
	}

	filterQuery(client)
}

func filterQuery(client *ha3engine.Client) {

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

	// 32 ビット浮動小数点数の配列を作成します。
	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)

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

	response, _requestErr := client.Query(searchRequestModel)

	// システムがリクエストを送信するときにエラーが発生した場合、_requestErr とエラーメッセージが返されます。
	if _requestErr != nil {
		fmt.Println(_requestErr)
		return
	}

	// エラーが発生しない場合は、応答を表示します。
	fmt.Println(response)
}

非同期モードの Java

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 {
    /**
     * OpenSearch Vector Search Edition インスタンスのエンジンクライアント。
     */
    private AsyncClient client;

    @Before
    public void clientInit() {
        // インスタンスへのアクセスに使用されるユーザー名とパスワード。ユーザー名とパスワードは、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
        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> responseCompletableFuture = client.query(queryRequest);
            String responseBody = responseCompletableFuture.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));
        }
    }
}

フィルター式の使用方法の詳細については、「フィルター式」をご参照ください。

主キーベースのクエリ

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 {

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

    @Before
    public void clientInit() throws Exception {
        /*
          エンジンクライアントを初期化します。
         */
        Config config = new Config();

        // インスタンスの名前。インスタンス名は、インスタンス詳細ページの左上隅で確認できます。例: ha-cn-i7*****605。
        config.setInstanceId("ha-cn-i7*****605");
        // ユーザー名。ユーザー名は、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
        config.setAccessUserName("username");
        // パスワード。パスワードは、インスタンス詳細ページの [API エンドポイント] セクションで変更できます。
        config.setAccessPassWord("password");
        // インスタンスの API エンドポイント。API エンドポイントは、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
        config.setEndpoint("ha-cn-i7*****605.public.ha.aliyuncs.com");

        client = new Client(config);
    }

    @Test
    public void 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
from alibabacloud_ha3engine_vector.models import FetchRequest

config = Config(
    # インスタンスの API エンドポイント。API エンドポイントは、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
    endpoint="http://ha-cn-i7*****605.public.ha.aliyuncs.com",
    # ユーザー名。ユーザー名は、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
    access_user_name="username",
    # パスワード。パスワードは、インスタンス詳細ページの [API エンドポイント] セクションで変更できます。
    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{
		// インスタンスの API エンドポイント。 インスタンス詳細ページの API エンドポイントセクションで API エンドポイントを表示できます。
		Endpoint: tea.String("ha-cn-i7*****605.public.ha.aliyuncs.com"),
		// ユーザー名。 インスタンス詳細ページの API エンドポイントセクションでユーザー名を表示できます。
		AccessUserName: tea.String("username"),
		// パスワード。 インスタンス詳細ページの API エンドポイントセクションでパスワードを変更できます。
		AccessPassWord: tea.String("password"),
		RuntimeOptions: &service.RuntimeOptions{
			KeepAlive:    tea.Bool(true),
			MaxIdleConns: tea.Int(1000),
			ReadTimeout:  tea.Int(1000),
		},
	}

	// リクエストを送信するためのクライアントを初期化します。
	client, _clientErr := ha3engine.NewClient(config)

	// クライアントの作成時にエラーが発生した場合、_clientErr とエラーメッセージが返されます。
	if _clientErr != nil {
		fmt.Println(_clientErr)
		return
	}

	fetch(client)
}

/**
 * プライマリキーベースのクエリ
 */
func fetch(client *ha3engine.Client) {

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

	// 配列の要素に値を割り当てます。
	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)

	// リクエストの送信時にエラーが発生した場合、_requestErr とエラーメッセージが返されます。
	if _requestErr != nil {
		fmt.Println(_requestErr)
		return
	}

	// エラーが発生しない場合は、応答を表示します。
	fmt.Println(response)
}

非同期モードの Java

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 {
    
    /**
     * OpenSearch Vector Search Edition インスタンスのエンジンクライアント。
     */
    private AsyncClient client;

    @Before
    public void clientInit() {
        // インスタンスへのアクセスに使用されるユーザー名とパスワード。ユーザー名とパスワードは、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
        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> searchResponseCompletableFuture = client.fetch(fetchRequest);
            String responseBody = searchResponseCompletableFuture.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));
        }
    }
}

予測ベースのクエリ

OpenSearch Vector Search Edition を使用してテキストや画像をベクトル化し、ベクトルベースのクエリを行う際に、予測ベースのクエリを実行できます。以下のコードは、SDK を使用して予測ベースのクエリを実行する方法の例を示しています。

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 {

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

    @Before
    public void clientInit() throws Exception {
        /*
          エンジンクライアントを初期化します。
         */
        Config config = new Config();

        // インスタンスの名前。インスタンス名は、インスタンス詳細ページの左上隅で確認できます。例: ha-cn-i7*****605。
        config.setInstanceId("ha-cn-i7*****605");
        // ユーザー名。ユーザー名は、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
        config.setAccessUserName("username");
        // パスワード。パスワードは、インスタンス詳細ページの [API エンドポイント] セクションで変更できます。
        config.setAccessPassWord("password");
        // インスタンスの API エンドポイント。API エンドポイントは、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
        config.setEndpoint("ha-cn-i7*****605.public.ha.aliyuncs.com");

        client = new Client(config);
    }

    @Test
    public void inferenceQuery() throws Exception {
        try {
            QueryRequest request = new QueryRequest();
            request.setTableName("test"); // 必須。クエリ対象のテーブルの名前。
            request.setContent("Child"); // 必須。クエリするコンテンツ。
            request.setModal("text"); // 必須。このパラメーターは、クエリする term をベクトル化するために使用されます。
            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
from alibabacloud_ha3engine_vector.models import QueryRequest

config = Config(
    # インスタンスの API エンドポイント。API エンドポイントは、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
    endpoint="http://ha-cn-i7*****605.public.ha.aliyuncs.com",
    # ユーザー名。ユーザー名は、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
    access_user_name="username",
    # パスワード。パスワードは、インスタンス詳細ページの [API エンドポイント] セクションで変更できます。
    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{
		// インスタンスの API エンドポイント。API エンドポイントは、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
		Endpoint: tea.String("ha-cn-i7*****605.public.ha.aliyuncs.com"),
		// ユーザー名。ユーザー名は、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
		AccessUserName: tea.String("username"),
		// パスワード。パスワードは、インスタンス詳細ページの [API エンドポイント] セクションで変更できます。
		AccessPassWord: tea.String("password"),
		RuntimeOptions: &service.RuntimeOptions{
			KeepAlive:    tea.Bool(true),
			MaxIdleConns: tea.Int(1000),
			ReadTimeout:  tea.Int(1000),
		},
	}

	// リクエストを送信するためのクライアントを初期化します。
	client, _clientErr := ha3engine.NewClient(config)

	// システムがクライアントを作成するときにエラーが発生した場合、_clientErr とエラーメッセージが返されます。
	if _clientErr != nil {
		fmt.Println(_clientErr)
		return
	}

	inferenceQuery(client)
}

/**
 * 予測ベースのクエリ
 */
func inferenceQuery(client *ha3engine.Client) {

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

	// 32 ビット浮動小数点数の配列を作成します。
	array := make([]*float32, 3)

	// 配列の各値にメモリ アドレスを割り当て、値を初期化します。
	value1 := float32(1.23)
	value2 := float32(4.56)
	value3 := float32(7.89)

	// 配列の要素に値を割り当てます。
	array[0] = &value1
	array[1] = &value2
	array[2] = &value3

	//searchRequestModel.SetVector(array)
	searchRequestModel.SetContent("Puppy")
	searchRequestModel.SetNamespace("123")
	searchRequestModel.SetModal("text") // 必須。このパラメーターは、クエリする term をベクトル化するために使用されます。

	response, _requestErr := client.InferenceQuery(searchRequestModel)

	// システムがリクエストを送信するときにエラーが発生した場合、_requestErr とエラーメッセージが返されます。
	if _requestErr != nil {
		fmt.Println(_requestErr)
		return
	}

	// エラーが発生しない場合は、応答を表示します。
	fmt.Println(response)
}

非同期モードの Java

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 {
    /**
     * OpenSearch Vector Search Edition インスタンスのエンジンクライアント。
     */
    private AsyncClient client;

    @Before
    public void clientInit() {
        // インスタンスへのアクセスに使用されるユーザー名とパスワード。ユーザー名とパスワードは、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
        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> responseCompletableFuture = client.inferenceQuery(queryRequest);
            String responseBody = responseCompletableFuture.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));
        }
    }
}

パラメーター:

  • QueryRequest の content パラメーターは、クエリに指定するコンテンツを示します。テキストベクトル化シナリオでは、クエリ対象のコンテンツとしてテキストを指定できます。画像ベクトル化シナリオでは、クエリ対象のコンテンツとして Base64 でエンコードされたテキストまたは画像を指定できます。

  • QueryRequest の modal パラメーターはクエリモードを示します。パラメーターを text に設定すると、システムはテキストベクトル化シナリオでは指定されたテキストに基づいてテキストをクエリし、画像ベクトル化シナリオでは指定されたテキストに基づいて画像をクエリします。

複数クエリ

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 {

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

    @Before
    public void clientInit() throws Exception {
        /*
          エンジンクライアントを初期化します。
         */
        Config config = new Config();

        // インスタンスの名前。インスタンス名は、インスタンス詳細ページの左上隅で確認できます。例: ha-cn-i7*****605。
        config.setInstanceId("ha-cn-i7*****605");
        // ユーザー名。ユーザー名は、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
        config.setAccessUserName("username");
        // パスワード。パスワードは、インスタンス詳細ページの [API エンドポイント] セクションで変更できます。
        config.setAccessPassWord("password");
        // インスタンスの API エンドポイント。API エンドポイントは、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
        config.setEndpoint("ha-cn-i7*****605.public.ha.aliyuncs.com");

        client = new Client(config);
    }

    @Test
    public void 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"); // クエリ対象のインデックスの名前。このパラメーターは SearchRequest または各クエリで指定します。
            queryRequest.setNamespace("space_a"); // クエリ対象のベクトルデータの名前空間。
            queryRequest.setVector(Arrays.asList(0.62498F, 0.886408F, 0.586114F, 0.043189F)); // クエリ対象のベクトルデータ。データは 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(
    # インスタンスの API エンドポイント。API エンドポイントは、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
    endpoint="http://ha-cn-i7*****605.public.ha.aliyuncs.com",
    # ユーザー名。ユーザー名は、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
    access_user_name="username",
    # パスワード。パスワードは、インスタンス詳細ページの [API エンドポイント] セクションで変更できます。
    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() {

	// リクエストを送信するためのクライアントインスタンスを作成します。
	config := &ha3engine.Config{
		// インスタンスの API エンドポイント。API エンドポイントは、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
		Endpoint: tea.String("ha-cn-i7*****605.public.ha.aliyuncs.com"),
		// ユーザー名。ユーザー名は、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
		AccessUserName: tea.String("username"),
		// パスワード。パスワードは、インスタンス詳細ページの [API エンドポイント] セクションで変更できます。
		AccessPassWord: tea.String("password"),
		RuntimeOptions: &service.RuntimeOptions{
			KeepAlive:    tea.Bool(true),
			MaxIdleConns: tea.Int(1000),
			ReadTimeout:  tea.Int(1000),
		},
	}

	// リクエストを送信するためのクライアントを初期化します。
	client, _clientErr := ha3engine.NewClient(config)

	// システムがクライアントを作成するときにエラーが発生した場合、_clientErr とエラーメッセージが返されます。
	if _clientErr != nil {
		fmt.Println(_clientErr)
		return
	}
	multiQuery(client)
}


/**
 * 複数クエリ
 */
func multiQuery(client *ha3engine.Client) {

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

	// 32 ビット浮動小数点数の配列を作成します。
	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

	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)

	// システムがリクエストを送信するときにエラーが発生した場合、_requestErr とエラーメッセージが返されます。
	if _requestErr != nil {
		fmt.Println(_requestErr)
		return
	}

	// エラーが発生しない場合は、応答を表示します。
	fmt.Println(response)
}

非同期モードの Java

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 {

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

    @Before
    public void clientInit() {
        // インスタンスへのアクセスに使用するユーザー名とパスワードです。インスタンス詳細ページの API エンドポイントセクションでユーザー名とパスワードを確認できます。
        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> searchResponseCompletableFuture = client.multiQuery(multiQueryRequest);
            String responseBody = searchResponseCompletableFuture.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));
        }
    }
}

バッチクエリ

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;

/**
 * バッチクエリ
 */
public class BatchQuery {

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

    @Before
    public void clientInit() throws Exception {
        /*
          エンジンクライアントを初期化します。
         */
        Config config = new Config();

        // インスタンスの名前。インスタンス名は、インスタンス詳細ページの左上隅で確認できます。例: ha-cn-i7*****605。
        config.setInstanceId("ha-cn-i7*****605");
        // ユーザー名。ユーザー名は、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
        config.setAccessUserName("username");
        // パスワード。パスワードは、インスタンス詳細ページの [API エンドポイント] セクションで変更できます。
        config.setAccessPassWord("password");
        // インスタンスの API エンドポイント。API エンドポイントは、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
        config.setEndpoint("ha-cn-i7*****605.public.ha.aliyuncs.com");

        client = new Client(config);
    }

    @Test
    public void 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
from alibabacloud_ha3engine_vector.models import BatchRequest

config = Config(
    # インスタンスの API エンドポイント。API エンドポイントは、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
    endpoint="http://ha-cn-i7*****605.public.ha.aliyuncs.com",
    # ユーザー名。ユーザー名は、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
    access_user_name="username",
    # パスワード。パスワードは、インスタンス詳細ページの [API エンドポイント] セクションで変更できます。
    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{
        // インスタンスの API エンドポイント。API エンドポイントは、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
        Endpoint: tea.String("ha-cn-i7*****605.public.ha.aliyuncs.com"),
        // ユーザー名。ユーザー名は、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
        AccessUserName: tea.String("username"),
        // パスワード。パスワードは、インスタンス詳細ページの [API エンドポイント] セクションで変更できます。
        AccessPassWord: tea.String("password"),
        RuntimeOptions: &service.RuntimeOptions{
            KeepAlive:    tea.Bool(true),
            MaxIdleConns: tea.Int(1000),
            ReadTimeout:  tea.Int(1000),
        },
    }

    // リクエストを送信するためのクライアントを初期化します。
    client, _clientErr := ha3engine.NewClient(config)

    // システムがクライアントを作成するときにエラーが発生した場合、_clientErr とエラーメッセージが返されます。
    if _clientErr != nil {
        fmt.Println(_clientErr)
        return
    }

    batch(client)
}

func batch(client *ha3engine.Client) {

    queryRequestModel1 := &ha3engine.QueryRequest{}
    queryRequestModel1.SetTableName("test")
    // 32 ビット浮動小数点数の配列を作成します。
    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)
    queryRequestModel1.SetVector(ids1)

    queryRequestModel2 := &ha3engine.QueryRequest{}
    queryRequestModel2.SetTableName("test1")
    // 32 ビット浮動小数点数の配列を作成します。
    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)
    queryRequestModel2.SetVector(ids2)

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

    response, _requestErr := client.BatchQuery(batchRequestModel)

    // システムがリクエストを送信するときにエラーが発生した場合、_requestErr とエラーメッセージが返されます。
    if _requestErr != nil {
        fmt.Println(_requestErr)
        return
    }

    // エラーが発生しない場合は、応答を表示します。
    fmt.Println(response)
}

非同期モードの Java

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;

/**
 * バッチクエリ
 */
public class BatchQuery {
    
    /**
     * OpenSearch Vector Search Edition インスタンスのエンジンクライアント。
     */
    private AsyncClient client;

    @Before
    public void clientInit() {
        // インスタンスへのアクセスに使用されるユーザー名とパスワード。ユーザー名とパスワードは、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
        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> responseCompletableFuture = client.batchQuery(request);
            String responseBody = responseCompletableFuture.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));
        }
    }
}

単一ベクトルを使用したハイブリッドクエリ

密ベクトルと疎ベクトルを使用してハイブリッドクエリを実行できます。以下のサンプルコードは、SDK を使用してハイブリッドクエリを実行する方法の例を示しています:

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 {

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

    @Before
    public void clientInit() throws Exception {
        /*
          エンジンクライアントを初期化します。
         */
        Config config = new Config();

        // インスタンスの名前。インスタンス名は、インスタンス詳細ページの左上隅で確認できます。例: ha-cn-i7*****605。
        config.setInstanceId("ha-cn-i7*****605");
        // ユーザー名。ユーザー名は、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
        config.setAccessUserName("username");
        // パスワード。パスワードは、インスタンス詳細ページの [API エンドポイント] セクションで変更できます。
        config.setAccessPassWord("password");
        // インスタンスの API エンドポイント。API エンドポイントは、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
        config.setEndpoint("ha-cn-i7*****605.public.ha.aliyuncs.com");

        client = new Client(config);
    }

    @Test
    public void query() throws Exception {
        try {
            QueryRequest queryRequest = new QueryRequest();
            queryRequest.setIndexName("index"); // クエリ対象のインデックスの名前。このパラメーターは SearchRequest または各クエリで指定します。
            queryRequest.setNamespace("cate1"); // クエリ対象のベクトルデータの名前空間。
            queryRequest.setVector(Arrays.asList(0.0001575F, 0.00682848F)); // クエリ対象のベクトルデータ。データは ARRAY 型です。

            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);

            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(
    # インスタンスの API エンドポイント。API エンドポイントは、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
    endpoint="http://ha-cn-i7*****605.public.ha.aliyuncs.com",
    # ユーザー名。ユーザー名は、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
    access_user_name="username",
    # パスワード。パスワードは、インスタンス詳細ページの [API エンドポイント] セクションで変更できます。
    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() {

	// リクエストを送信するためのクライアントインスタンスを作成します。
	config := &ha3engine.Config{
		// インスタンスの API エンドポイント。API エンドポイントは、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
		Endpoint: tea.String("ha-cn-i7*****605.public.ha.aliyuncs.com"),
		// ユーザー名。ユーザー名は、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
		AccessUserName: tea.String("username"),
		// パスワード。パスワードは、インスタンス詳細ページの [API エンドポイント] セクションで変更できます。
		AccessPassWord: tea.String("password"),
		RuntimeOptions: &service.RuntimeOptions{
			KeepAlive:    tea.Bool(true),
			MaxIdleConns: tea.Int(1000),
			ReadTimeout:  tea.Int(1000),
		},
	}

	// リクエストを送信するためのクライアントを初期化します。
	client, _clientErr := ha3engine.NewClient(config)

	// システムがクライアントを作成するときにエラーが発生した場合、_clientErr とエラーメッセージが返されます。
	if _clientErr != nil {
		fmt.Println(_clientErr)
		return
	}

	mixQuery(client)
}

func mixQuery(client *ha3engine.Client) {

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

	// 32 ビット浮動小数点数の配列を作成します。
	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)

	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)

	// システムがリクエストを送信するときにエラーが発生した場合、_requestErr とエラーメッセージが返されます。
	if _requestErr != nil {
		fmt.Println(_requestErr)
		return
	}

	// エラーが発生しない場合は、応答を表示します。
	fmt.Println(response)
}

非同期モードの Java

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 {
    /**
     * OpenSearch Vector Search Edition インスタンスのエンジンクライアント。
     */
    private AsyncClient client;

    @Before
    public void clientInit() {
        // インスタンスへのアクセスに使用されるユーザー名とパスワード。ユーザー名とパスワードは、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
        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> 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));
        }
    }
}

複数ベクトルを使用したハイブリッドクエリ

密ベクトルと疎ベクトルを使用してハイブリッドクエリを実行できます。以下のサンプルコードは、SDK を使用してハイブリッドクエリを実行する方法の例を示しています:

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 {

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

    @Before
    public void clientInit() throws Exception {
        /*
          エンジンクライアントを初期化します。
         */
        Config config = new Config();

        // インスタンスの名前。インスタンス名は、インスタンス詳細ページの左上隅で確認できます。例: ha-cn-i7*****605。
        config.setInstanceId("ha-cn-i7*****605");
        // ユーザー名。ユーザー名は、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
        config.setAccessUserName("username");
        // パスワード。パスワードは、インスタンス詳細ページの [API エンドポイント] セクションで変更できます。
        config.setAccessPassWord("password");
        // インスタンスの API エンドポイント。API エンドポイントは、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
        config.setEndpoint("ha-cn-i7*****605.public.ha.aliyuncs.com");

        client = new Client(config);
    }

    @Test
    public void 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"); // クエリ対象のインデックスの名前。このパラメーターは SearchRequest または各クエリで指定します。
            queryRequest.setNamespace("cate1"); // クエリ対象のベクトルデータの名前空間。
            queryRequest.setVector(Arrays.asList(0.0001575F, 0.00682848F)); // クエリ対象のベクトルデータ。データは ARRAY 型です。

            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(
    # インスタンスの API エンドポイント。API エンドポイントは、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
    endpoint="http://ha-cn-i7*****605.public.ha.aliyuncs.com",
    # ユーザー名。ユーザー名は、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
    access_user_name="username",
    # パスワード。パスワードは、インスタンス詳細ページの [API エンドポイント] セクションで変更できます。
    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() {

	// リクエストを送信するためのクライアントインスタンスを作成します。
	config := &ha3engine.Config{
		// インスタンスの API エンドポイント。API エンドポイントは、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
		Endpoint: tea.String("ha-cn-i7*****605.public.ha.aliyuncs.com"),
		// ユーザー名。ユーザー名は、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
		AccessUserName: tea.String("username"),
		// パスワード。パスワードは、インスタンス詳細ページの [API エンドポイント] セクションで変更できます。
		AccessPassWord: tea.String("password"),
		RuntimeOptions: &service.RuntimeOptions{
			KeepAlive:    tea.Bool(true),
			MaxIdleConns: tea.Int(1000),
			ReadTimeout:  tea.Int(1000),
		},
	}

	// リクエストを送信するためのクライアントを初期化します。
	client, _clientErr := ha3engine.NewClient(config)

	// システムがクライアントを作成するときにエラーが発生した場合、_clientErr とエラーメッセージが返されます。
	if _clientErr != nil {
		fmt.Println(_clientErr)
		return
	}

	mixMultiVectorQuery(client)
}

func mixMultiVectorQuery(client *ha3engine.Client) {

	query1 := &ha3engine.QueryRequest{}
	// 32 ビット浮動小数点数の配列を作成します。
	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.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)

	// システムがリクエストを送信するときにエラーが発生した場合、_requestErr とエラーメッセージが返されます。
	if _requestErr != nil {
		fmt.Println(_requestErr)
		return
	}

	// エラーが発生しない場合は、応答を表示します。
	fmt.Println(response)
}

非同期モードの Java

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 {

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

    @Before
    public void clientInit() {
        // インスタンスへのアクセスに使用されるユーザー名とパスワード。ユーザー名とパスワードは、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
        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> responseCompletableFuture = client.multiQuery(request);
            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));
        }
    }
}
重要

複数のベクトルに基づいてクエリを実行するには、ベクトルが同じタイプであることを確認してください。たとえば、複数の密ベクトルまたは密疎ベクトルに基づいてクエリを実行できます。

ベクトルとテキストに基づくハイブリッドクエリ

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 {

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


    @Before
    public void clientInit() throws Exception {
        /*
          エンジンクライアントを初期化します。
         */
        Config config = new Config();

        // インスタンスの名前。インスタンス名は、インスタンス詳細ページの左上隅で確認できます。例: ha-cn-i7*****605。
        config.setInstanceId("ha-cn-i7*****605");
        // ユーザー名。ユーザー名は、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
        config.setAccessUserName("username");
        // パスワード。パスワードは、インスタンス詳細ページの [API エンドポイント] セクションで変更できます。
        config.setAccessPassWord("password");
        // インスタンスの API エンドポイント。API エンドポイントは、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
        config.setEndpoint("ha-cn-i7*****605.public.ha.aliyuncs.com");

        client = new Client(config);
    }

    @Test
    public void search() throws Exception {
        try {
            // クエリリクエストオブジェクトを構築します。
            SearchRequest request = new SearchRequest();
            request.setTableName("test1");// 必須。クエリ対象のテーブルの名前。
            // k-NN (k-nearest neighbors) クエリのパラメーター。
            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);
            request.setKnn(queryRequest);
            // テキストクエリパラメーターを構築します。
            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("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
from alibabacloud_ha3engine_vector.models import QueryRequest

config = Config(
    # インスタンスの API エンドポイント。API エンドポイントは、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
    endpoint="http://ha-cn-i7*****605.public.ha.aliyuncs.com",
    # ユーザー名。ユーザー名は、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
    access_user_name="username",
    # パスワード。パスワードは、インスタンス詳細ページの [API エンドポイント] セクションで変更できます。
    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() {

	// リクエストを送信するためのクライアントインスタンスを作成します。
	config := &ha3engine.Config{
		// インスタンスの API エンドポイント。API エンドポイントは、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
		Endpoint: tea.String("ha-cn-i7*****605.public.ha.aliyuncs.com"),
		// ユーザー名。ユーザー名は、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
		AccessUserName: tea.String("username"),
		// パスワード。パスワードは、インスタンス詳細ページの [API エンドポイント] セクションで変更できます。
		AccessPassWord: tea.String("password"),
		RuntimeOptions: &service.RuntimeOptions{
			KeepAlive:    tea.Bool(true),
			MaxIdleConns: tea.Int(1000),
			ReadTimeout:  tea.Int(1000),
		},
	}

	// リクエストを送信するためのクライアントを初期化します。
	client, _clientErr := ha3engine.NewClient(config)

	// システムがクライアントを作成するときにエラーが発生した場合、_clientErr とエラーメッセージが返されます。
	if _clientErr != nil {
		fmt.Println(_clientErr)
		return
	}

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

	searchRequestModel := &ha3engine.SearchRequest{}
	searchRequestModel.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'")

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

	response, _requestErr := client.Search(searchRequestModel)

	// システムがリクエストを送信するときにエラーが発生した場合、_requestErr とエラーメッセージが返されます。
	if _requestErr != nil {
		fmt.Println(_requestErr)
		return
	}

	// エラーが発生しない場合は、応答を表示します。
	fmt.Println(response)
}

非同期モードの Java

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 {

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

    @Before
    public void clientInit() {
        // インスタンスへのアクセスに使用されるユーザー名とパスワード。ユーザー名とパスワードは、インスタンス詳細ページの [API エンドポイント] セクションで確認できます。
        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())// k-NN クエリのパラメーター。
                    .text(TextQuery.builder()
                            .queryString("content:'Content'")// クエリ条件。
                            .build())
                    .outputFields(Arrays.asList("name", "age", "content"))// 返すフィールド。
                    .build();

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

追加情報

  • リクエストへの応答に関する情報については、「応答パラメーター」をご参照ください。

  • go get github.com/aliyun/alibabacloud-ha3-go-sdk コマンドを実行して依存関係をプルしないでください。OpenSearch Vector Search Edition と OpenSearch Retrieval Engine Edition の SDK 依存関係は、GitHub で同じタグに分類されます。依存関係をプルするときは、インスタンスのエディションに基づいて対応するエディションを指定する必要があります。