日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

檢索Doc

本文介紹如何通過Java SDK在Collection中進行相似性檢索。

前提條件

接口定義

// class DashVectorCollection

// 同步接口
public Response<List<Doc>> query(QueryDocRequest queryDocRequest);

// 異步接口
public ListenableFuture<Response<List<Doc>>> queryAsync(QueryDocRequest queryDocRequest);

使用示例

說明
  1. 需要使用您的api-key替換示例中的YOUR_API_KEY、您的Cluster Endpoint替換示例中的YOUR_CLUSTER_ENDPOINT,代碼才能正常運行。

  2. 本示例需要參考新建Collection-使用示例提前創建好名稱為quickstart的Collection,并參考插入Doc提前插入部分數據。

根據向量進行相似性檢索

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 = 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();
        
        // 進行Doc檢索
        Response<List<Doc>> response = collection.query(request);
      
      	// 判斷請求是否成功
      	// assert response.isSuccess() 

        System.out.println(response);
        // example output:
        // {
        //   "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這2個Field
  .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的Doc進行相似性檢索
  .outputFields(Arrays.asList("name", "age")) // 僅返回name、age這2個Field
  .includeVector(true)
  .build();

// 根據向量或者主鍵進行相似性檢索 + 條件過濾
Response<List<Doc>> response = collection.query(request);

// 判斷檢索是否成功
assert response.isSuccess()

帶有Sparse Vector的向量檢索

說明

Sparse Vector(稀疏向量)可用于關鍵詞權重表示,實現帶關鍵詞感知能力的向量檢索

Vector vector = Vector.builder().value(Arrays.asList(0.1f, 0.2f, 0.3f, 0.4f)).build();

// 構建帶有Sparse Vector的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的Doc進行相似性檢索
  .outputFields(Arrays.asList("name", "age")) // 僅返回name、age這2個Field
  .includeVector(true)
  .build();

// 支持向量和主鍵都不傳入,那么只進行條件過濾
Response<List<Doc>> response = collection.query(request);

// 判斷檢索是否成功
assert response.isSuccess()

向量檢索高級參數

說明

詳情可參考 向量檢索高級參數

public void queryParameter() {
    assert collection.isSuccess();
    // 構建Vector
    Vector queryVector = Vector.builder().value(Arrays.asList(0.1f, 0.2f, 0.3f, 0.4f)).build();
    VectorQuery vectorQuery = VectorQuery.builder().vector(queryVector).ef(1000).linear(false).radius(100.0F).build();
    QueryDocRequest request = QueryDocRequest.builder().vectorQuery(vectorQuery).build();
    Response<List<Doc>> response = collection.query(request);
    System.out.println(response);
    assert response.isSuccess();
}

多向量檢索

說明

詳情可參考 多向量檢索

QueryDocRequest request = QueryDocRequest.builder()
        .vector("title", VectorQuery.builder().vector(Vector.builder().value(Arrays.asList(0.1f, 0.2f, 0.3f, 0.4f)).build()).numCandidates(3).build())
        .vector("content", VectorQuery.builder().vector(Vector.builder().value(Arrays.asList(0.1f, 0.2f, 0.3f, 0.4f, 0.5f, 0.6f)).build()).numCandidates(3).build())
        // 加權融合排序
        .ranker(WeightedRanker.builder().weights(new HashMap<String, Float>() {{
            put("title", 10000.0F);
            put("content", 2.0F);
                }})
                .build())
        // 倒數秩融合排序
        // .ranker(RrfRanker.builder().rankConstant(100).build())
        .topk(1)
        .build();
Response<List<Doc>> response = collection.query(request);

使用多向量的一個向量執行檢索

public  void querySingleVector() {
    VectorQuery vectorQuery = VectorQuery.builder().vector(Vector.builder().value(Arrays.asList(0.1f, 0.2f, 0.3f, 0.4f)).build())
            .ef(1000)
            .radius(100.0F)
            .linear(false)
            .build();
    QueryDocRequest request = QueryDocRequest.builder()
            .vector("title", vectorQuery)
            .topk(10)
            .build();
    Response<List<Doc>> response = collection.query(request);
    System.out.println(response);
    assert response.isSuccess();
}

入參描述

可通過QueryDocRequestBuilder構造QueryDocRequest對象,其可用方法如下表所示:

說明

vectorid兩個入參需要二選一使用,如都不傳入,則僅完成條件過濾。

方法

必填

默認值

描述

vector(Vector vector)

-

向量數據

sparseVector(Map(Integer, Float))

-

稀疏向量

id(String id)

-

主鍵,表示根據主鍵對應的向量進行相似性檢索

topk(int topk)

10

返回topk相似性結果

filter(String filter)

-

過濾條件,需滿足SQL where子句規范,詳見條件過濾檢索

includeVector(bool includeVector)

false

是否返回向量數據

partition(String partition)

default

分區名稱

outputFields(List<String> outputFields)

-

返回文檔字段列表,默認返回所有文檔字段

outputField(String field)

-

vectors(Map<String, VectorQuery>)

-

多向量檢索,詳情參考多向量檢索

ranker(Ranker)

-

融合排序參數,詳情參考多向量檢索

vectorQuery(VectorQuery)

-

使用VectorQuery執行高級檢索,詳情參考向量檢索高級參數

build()

-

-

構造QueryDocRequest對象

出參描述

說明

返回結果為Response<List<Doc>>對象,Response<List<Doc>>對象中可獲取本次操作結果信息,如下表所示。

方法

返回類型

描述

示例

getCode()

int

返回值,參考返回狀態碼說明

0

getMessage()

String

返回消息

success

getRequestId()

String

請求唯一id

19215409-ea66-4db9-8764-26ce2eb5bb99

getOutput()

List<Doc>

返回相似性檢索結果, Doc 參見Doc

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

getUsage()

RequestUsage

對Serverless實例(按量付費)集合的Doc檢索請求,成功后返回實際消耗的讀請求單元數

isSuccess()

Boolean

判斷請求是否成功

true