本文由簡體中文內容自動轉碼而成。阿里雲不保證此自動轉碼的準確性、完整性及時效性。本文内容請以簡體中文版本為準。

插入或更新Doc

更新時間:2024-08-29 20:42

本文介紹如何通過Java SDK向Collection中插入或更新Doc。

說明
  1. 若調用本介面時Doc Id已存在,則等同於更新Doc;Doc Id不存在,則等同於插入Doc

  2. 若調用本介面時不指定Doc Id,則等同於插入Doc,DashVector會自動產生Doc Id,並在返回結果中攜帶id資訊。

前提條件

介面定義

Java
// class DashVectorCollection

// 同步介面
public Response<List<DocOpResult>> upsert(UpsertDocRequest upsertDocRequest);

// 非同步介面
public ListenableFuture<Response<List<DocOpResult>>> upsertAsync(UpsertDocRequest upsertDocRequest);

使用樣本

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

  2. 本樣本需要參考建立Collection-使用樣本提前建立好名稱為quickstart的Collection。

插入或更新Doc

Java
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.UpsertDocRequest;
import com.aliyun.dashvector.models.responses.Response;

import java.util.*;

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();
        
        // 構建Doc
      	Doc doc = Doc.builder().id("1").vector(vector).build();
        
        // 插入或更新Doc
        Response<List<DocOpResult>> response = collection.upsert(UpsertDocRequest.builder().doc(doc).build());
        
        // 判斷插入或更新Doc是否成功
      	// assert response.isSuccess() 
    }
}

插入或更新不帶有Id的Doc

Java
// 構建Vector
Vector vector = Vector.builder().value(Arrays.asList(0.1f, 0.2f, 0.3f, 0.4f)).build();
        
// 構建Doc
Doc doc = Doc.builder().vector(vector).build();
        
// 插入或更新Doc
Response<List<DocOpResult>> response = collection.upsert(UpsertDocRequest.builder().doc(doc).build());

插入或更新帶有Fields的Doc

Java
// 構建Vector
Vector vector = Vector.builder().value(Arrays.asList(0.2f, 0.2f, 0.3f, 0.4f)).build();

// 插入或更新單條資料,並設定Fields Value
Doc doc = Doc.builder()
  .id("2")
  .vector(vector)
  // 設定建立Collection時預定義的Fields Value
  .field("name", "zhangshan")
  .field("age", 20)
  .field("weight", 100f)
  // 設定Schema-Free的Field & Value
  .field("anykey1", "String")
  .field("anykey2", 1)
  .field("anykey3", true)
  .field("anykey4", 3.1415926f)
  .build();

// 插入或更新Doc
Response<List<DocOpResult>> response = collection.upsert(UpsertDocRequest.builder().doc(doc).build());

// 判斷插入或更新Doc是否成功
assert response.isSuccess()

批量插入或更新Doc

Java
// 通過UpsertDocRequest對象,批量插入或更新10條Doc
List<Doc> docs = new ArrayList<>();
for (int i = 0; i < 10; i++) {
  docs.add(
    Doc.builder()
    	.id(Integer.toString(i+3))
    	.vector(Vector.builder().value(Collections.nCopies(4, (float) i+3)).build())
    	.build()
  );
}

UpsertDocRequest request = UpsertDocRequest.builder().docs(docs).build();
Response<List<DocOpResult>> response = collection.upsert(request);

// 判斷插入或更新Doc是否成功
assert response.isSuccess();

非同步插入或更新Doc

Java
// 非同步批量插入或更新10條資料
List<Doc> docs = new ArrayList<>();
for (int i = 0; i < 10; i++) {
  docs.add(
    Doc.builder()
    	.id(Integer.toString(i+13))
    	.vector(Vector.builder().value(Collections.nCopies(4, (float) i+13)).build())
    	.build()
  );
}

UpsertDocRequest request = UpsertDocRequest.builder().docs(docs).build();
ListenableFuture<Response<List<DocOpResult>>> response = collection.upsertAsync(request);

// 等待並擷取非同步upsert結果
Response<List<DocOpResult>> ret = response.get();

插入或更新帶有Sparse Vector的Doc

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

// 構建帶有Sparse Vector的Doc
Doc doc = Doc.builder()
  .id("28")
  .sparseVector(
  new Map<Integer, Float>() {
    {
      put(1, 0.4f);
      put(10000, 0.6f);
      put(222222, 0.8f);
    }
  })
  .vector(vector)
  .build();

// 插入或更新帶有Sparse Vector的Doc
Response<List<DocOpResult>> response = collection.upsert(UpsertDocRequest.builder().doc(doc).build());

入參描述

使用UpsertDocRequestBuilder構造UpsertDocRequest對象,其可用方法如下:

方法

必填

預設值

描述

docs(List<Doc> docs)

-

設定Doc列表

doc(Doc doc)

追加Doc至Doc列表,可多次調用

partition(String partition)

default

分區名稱

build()

-

-

構造UpsertDocRequest對象

使用DocBuilder構造Doc對象,其可用方法如下:

方法

選項

預設值

描述

id(String id)

-

主鍵

vector(Vector vector)

-

向量資料

sparseVector(Map(Integer, Float))

-

稀疏向量

fields(Map<String, Object>)

-

設定Fields

field(String key, Object value)

追加Field至Fields,可多次調用

build()

-

-

構造Doc對象

說明
  1. Doc對象的fields參數,可自由設定“任意”的KeyValue資料,Key必須為String類型,Value必須為String, Integer, Boolean or Float

    1. 當Key在建立Collection時預先定義過,則Value的類型必須為預定義時的類型

    2. 當Key未在建立Collection時預先定義過,則Value的類型可為String, Integer, Boolean or Float

  2. 是否預先定義Fields,可參考Schema Free

出參描述

說明

返回結果為Response<List<DocOpResult>>對象,Response<List<DocOpResult>>對象中可擷取本次操作結果資訊,如下表所示。

方法

類型

描述

樣本

getCode()

int

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

0

getMessage()

String

返回訊息

success

getRequestId()

String

請求唯一id

19215409-ea66-4db9-8764-26ce2eb5bb99

getOutput()

List<DocOpResult>

返回插入或更新Doc的結果

isSuccess()

Boolean

判斷請求是否成功

true

  • 本頁導讀 (1, M)
  • 前提條件
  • 介面定義
  • 使用樣本
  • 插入或更新Doc
  • 插入或更新不帶有Id的Doc
  • 插入或更新帶有Fields的Doc
  • 批量插入或更新Doc
  • 非同步插入或更新Doc
  • 插入或更新帶有Sparse Vector的Doc
  • 入參描述
  • 出參描述
文檔反饋
phone 聯絡我們

立即和Alibaba Cloud在線服務人員進行交談,獲取您想了解的產品信息以及最新折扣。

alicare alicarealicarealicare