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

DashVector:ドキュメントの検索

最終更新日:Jan 08, 2025

このトピックでは、Java 用 SDK を使用してコレクション内で類似検索を実行する方法について説明します。

前提条件

API 定義

// DashVectorCollection クラス。

// 同期モードで動作するメソッド。
public Response<List<Doc>> query(QueryDocRequest queryDocRequest);

// 非同期モードで動作するメソッド。
public ListenableFuture<Response<List<Doc>>> queryAsync(QueryDocRequest queryDocRequest);

説明
  1. コードを正しく実行するには、サンプルコード内の YOUR_API_KEY を実際の API キーに、YOUR_CLUSTER_ENDPOINT をクラスターのエンドポイントに置き換える必要があります。

  2. quickstart という名前のコレクションを事前に作成する必要があります。詳細については、コレクションの作成トピックの「例」セクションをご参照ください。また、事前にいくつかのドキュメントを挿入する必要があります。詳細については、ドキュメントの挿入をご参照ください。

ベクトルを使用して類似検索を実行する

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 フィールドのいずれかを指定する必要があります。どちらも指定しない場合、システムは条件フィルターのみを使用して一致クエリを実行します。

outputField(String field)

メソッド

必須

デフォルト値

説明

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

-

-

QueryDocRequest オブジェクトを構築します。

レスポンスパラメーター

説明

Response<List<Doc>> オブジェクトが返されます。これには、次の表に示すように、操作結果が含まれています。

メソッド

タイプ

説明

getCode()

int

返されたステータスコード。詳細については、ステータスコードをご参照ください。

0

getMessage()

String

返されたメッセージ。

success

getRequestId()

String

リクエストの一意の ID。

19215409-ea66-4db9-8764-26ce2eb5bb99

getOutput()

List<Doc>

類似検索結果。詳細については、Docをご参照ください。

[
  {
    "id":"9",
    "vector":{"value":[0.9,0.9,0.9,0.9]},
    "fields":{"name":"java_9","age":9},
    "score":90
    }
]

isSuccess()

Boolean

操作が成功したかどうかを指定します。

true