この 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.17Go
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 エンドポイント] セクションでエンドポイントを表示できます。

パブリックアクセスをオンにすると、オンプレミスマシン上のパブリックエンドポイントを使用して 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。

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

ベクトルベースのクエリ
構文
table_name: クエリ対象のテーブルの名前。
vector: クエリのベクトルデータ。クエリベクトルのディメンションは、ベクターインデックスのディメンションと一致する必要があります。
vector_count: ベクトルフィールド内のベクトルの数。たとえば、このパラメーターを 2 に設定すると、クエリには 2 つのベクトルが含まれます。
include_vector: ドキュメント内のベクトル情報を返すかどうかを指定します。
output_fields: 値を返すフィールドのリスト。
top_k: 返す結果の数。
filter: フィルター条件を指定するフィルター式。構文の詳細については、「フィルター式」をご参照ください。
search_params: クエリパラメーター。詳細については、「QcSearcher」および「HNSW 設定」をご参照ください。
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 で同じタグに分類されます。依存関係をプルするときは、インスタンスのエディションに基づいて対応するエディションを指定する必要があります。