このトピックでは、Java 用 SDK を使用してコレクション内で類似検索を実行する方法について説明します。
前提条件
クラスターが作成されます。詳細については、「」をご参照ください。クラスターを作成する
APIキーが取得されます。詳細については、「」をご参照ください。APIキーの管理
最新バージョンの SDK がインストールされていること。詳細については、DashVector SDK のインストールをご参照ください。
API 定義
// DashVectorCollection クラス。
// 同期モードで動作するメソッド。
public Response<List<Doc>> query(QueryDocRequest queryDocRequest);
// 非同期モードで動作するメソッド。
public ListenableFuture<Response<List<Doc>>> queryAsync(QueryDocRequest queryDocRequest);例
ベクトルを使用して類似検索を実行する
import com.aliyun.dashvector.DashVectorClient;
import com.aliyun.dashvector.DashVectorCollection;
import com.aliyun.dashvector.common.DashVectorException;
import com.aliyun.dashvector.models.Doc;
import com.aliyun.dashvector.models.Vector;
import com.aliyun.dashvector.models.requests.QueryDocRequest;
import com.aliyun.dashvector.models.responses.Response;
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) throws DashVectorException {
DashVectorClient client = new DashVectorClient("YOUR_API_KEY", "YOUR_CLUSTER_ENDPOINT");
DashVectorCollection collection = client.get("quickstart");
// ベクトルを構築します。
Vector vector = Vector.builder().value(Arrays.asList(0.1f, 0.2f, 0.3f, 0.4f)).build();
// QueryDocRequest オブジェクトを構築します。
QueryDocRequest request = QueryDocRequest.builder()
.vector(vector)
.topk(100)
.includeVector(true)
.build();
// ドキュメントを検索します。
Response<List<Doc>> response = collection.query(request);
// 操作が成功したかどうかを確認します。
assert response.isSuccess()
System.out.println(response);
// 出力例:
// {
// "code":0,
// "message":"Success",
// "requestId":"b26ce0b8-0caf-4836-8136-df889d79ae91",
// "output":[
// {
// "id":"1",
// "vector":{
// "value":[
// 0.10000000149011612,
// 0.20000000298023224,
// 0.30000001192092896,
// 0.4000000059604645
// ]
// },
// "fields":{
// "name":"zhangsan",
// "age":20,
// "weight":100.0,
// "anykey1":"String",
// "anykey2":1,
// "anykey3":true,
// "anykey4":3.1415926
// },
// "score":1.1920929E-7
// }
// ]
// }
}
}
プライマリキーに関連付けられたベクトルを使用して類似検索を実行する
// QueryDocRequest オブジェクトを構築します。
QueryDocRequest request = QueryDocRequest.builder()
.id("1")
.topk(100)
.outputFields(Arrays.asList("name", "age")) // name フィールドと age フィールドのみを返す必要があります。
.includeVector(true)
.build();
// プライマリキーに関連付けられたベクトルに基づいて類似検索を実行します。
Response<List<Doc>> response = collection.query(request);
// 検索が成功したかどうかを確認します。
assert response.isSuccess()ベクトルまたはプライマリキーと条件フィルターを使用して類似検索を実行する
Vector vector = Vector.builder().value(Arrays.asList(0.1f, 0.2f, 0.3f, 0.4f)).build();
// QueryDocRequest オブジェクトを構築します。
QueryDocRequest request = QueryDocRequest.builder()
.vector(vector) // 検索するベクトルを指定します。または、検索するプライマリキーを指定することもできます。
.topk(100)
.filter("age > 18") // age フィールドの値が 18 より大きいドキュメントに対して一致クエリを実行するための条件フィルターを指定します。
.outputFields(Arrays.asList("name", "age")) // name フィールドと age フィールドのみを返す必要があります。
.includeVector(true)
.build();
// 条件フィルターと指定されたベクトルまたはプライマリキーを使用して類似検索を実行します。
Response<List<Doc>> response = collection.query(request);
// 検索が成功したかどうかを確認します。
assert response.isSuccess()密ベクトルと疎ベクトルの両方を使用して類似検索を実行する
疎ベクトルを使用してキーワードの重みを表し、キーワード対応セマンティックベクトル検索を実装できます。
Vector vector = Vector.builder().value(Arrays.asList(0.1f, 0.2f, 0.3f, 0.4f)).build();
// 疎ベクトルを含む QueryDocRequest オブジェクトを構築します。
QueryDocRequest request = QueryDocRequest.builder()
.vector(vector) // 検索するベクトルを指定します。
.sparseVector(
new Map<Integer, Float>() {
{
put(1, 0.4f);
put(10000, 0.6f);
put(222222, 0.8f);
}
}) // 疎ベクトルを指定します。
.build();
// 密ベクトルと疎ベクトルの両方を使用して類似検索を実行します。
Response<List<Doc>> response = collection.query(request);
// 検索が成功したかどうかを確認します。
assert response.isSuccess()条件フィルターを使用して一致クエリを実行する
// 条件フィルターを含むが、プライマリキーまたはベクトルを含まない QueryDocRequest オブジェクトを構築します。
QueryDocRequest request = QueryDocRequest.builder()
.topk(100)
.filter("age > 18") // age フィールドの値が 18 より大きいドキュメントに対して一致クエリを実行するための条件フィルターを指定します。
.outputFields(Arrays.asList("name", "age")) // name フィールドと age フィールドのみを返す必要があります。
.includeVector(true)
.build();
// ベクトルもプライマリキーも指定されていないため、条件フィルターのみに基づいて検索を実行します。
Response<List<Doc>> response = collection.query(request);
// 検索が成功したかどうかを確認します。
assert response.isSuccess()リクエストパラメーター
QueryDocRequestBuilder インスタンスを使用して、QueryDocRequest オブジェクトを構築できます。次の表に、インスタンスによって呼び出すことができるメソッドを示します。
類似検索を実行するには、vector フィールドまたは id フィールドのいずれかを指定する必要があります。どちらも指定しない場合、システムは条件フィルターのみを使用して一致クエリを実行します。
メソッド | 必須 | デフォルト値 | 説明 |
vector(Vector vector) | いいえ | - | ベクトルを設定します。 |
sparseVector(Map(Integer, Float)) | いいえ | - | 疎ベクトルを設定します。 |
id(String id) | いいえ | - | プライマリキーを設定します。プライマリキーに関連付けられたベクトルに基づいて類似検索が実行されます。 |
topk(int topk) | いいえ | 10 | 類似度で上位 k 件の結果を返します。 |
filter(String filter) | いいえ | - | 条件フィルターを設定します。これは、SQL WHERE 句の構文に準拠している必要があります。詳細については、条件付きフィルタリングをご参照ください。 |
includeVector(bool includeVector) | いいえ | false | ベクトルデータを返すかどうかを指定します。 |
partition(String partition) | いいえ | default | パーティションの名前を設定します。 |
outputFields(List<String> outputFields) | いいえ | - | 返すドキュメントフィールドのリストを設定します。デフォルトでは、すべてのフィールドが返されます。 |
いいえ | - | 返すドキュメントフィールドを設定します。デフォルトでは、すべてのフィールドが返されます。 | |
build() | - | - |
|
レスポンスパラメーター
Response<List<Doc>> オブジェクトが返されます。これには、次の表に示すように、操作結果が含まれています。
メソッド | タイプ | 説明 | 例 |
getCode() | int | 返されたステータスコード。詳細については、ステータスコードをご参照ください。 | 0 |
getMessage() | String | 返されたメッセージ。 | success |
getRequestId() | String | リクエストの一意の ID。 | 19215409-ea66-4db9-8764-26ce2eb5bb99 |
getOutput() | List<Doc> | 類似検索結果。詳細については、Docをご参照ください。 | |
isSuccess() | Boolean | 操作が成功したかどうかを指定します。 | true |