向量新增的3种方式

简介: 本文介绍向量检索服务如何通过控制台、SDK、API三种不同的方式新增向量。

向量检索服务 DashVector免费试用进行中,玩转大模型搜索,快来试试吧~

了解更多信息,请点击:https://www.aliyun.com/product/ai/dashvector


控制台方式


前提条件


步骤

  1. 登录向量检索服务控制台
  2. 在左侧导航栏单击Cluster列表,选中需要新增向量的Collection,单击Collection详情

  1. 在左侧二级导航栏,单击向量新增
  2. 填写相应内容后,单击确认,完成向量新增。


新增向量参数设置如下所示:


参数

对应API参数名称

说明

是否必选

向量

vector

向量数据,例如[1.00,2.00,3.00,4.00]。

说明

新增向量的向量维度和数据类型必须与创建的Collection一致。

主键ID

id

  • 必须由大写字母、小写字母、数字和_-!@#$%+=.字符组成。
  • 大小不超过64个字符。

属性

fileds

json字段参数,例如{"price":100,"type":"dress"}

Partition

partition

partition名称,默认是default。

说明

新增向量时,可以选择不同的Partition,如只有默认的Partition,可以新建Partition后再新增向量,新增Partition的操作请参见创建Partition


SDK方式

Python SDK方式


说明

插入Doc时若指定id已存在,已存在的Doc不会被覆盖,本次插入Doc操作无效。

前提条件


接口定义

Collection.insert(
    docs: Union[Doc, List[Doc], Tuple, List[Tuple]],
    partition: Optional[str] = None,
    async_req: False
) -> DashVectorResponse


使用示例

说明

  1. 需要使用您的api-key替换示例中的YOUR_API_KEY、您的Cluster Endpoint替换示例中的YOUR_CLUSTER_ENDPOINT,代码才能正常运行。
  2. 本示例需要参考新建Collection-使用示例提前创建好名称为quickstart的Collection。


import dashvector
from dashvector import Doc
import numpy as np
client = dashvector.Client(
    api_key='YOUR_API_KEY',
    endpoint='YOUR_CLUSTER_ENDPOINT'
)
collection = client.get(name='quickstart')


插入Doc

# 通过Doc对象insert
ret = collection.insert(
    Doc(
        id='1',
        vector=[0.1, 0.2, 0.3, 0.4]
    )
)
# 判断insert是否成功
assert ret
# 简化形式:通过Tuple insert
ret = collection.insert(
    ('2', [0.1, 0.1, 0.1, 0.1])               # (id, vector)
)


插入带有Fields的Doc

# insert单条数据,并设置Fields Value
ret = collection.insert(
    Doc(
        id='3',
        vector=np.random.rand(4),
        fields={
            # 设置创建Collection时预定义的Fileds Value
            'name': 'zhangsan', 'weight':70.0, 'age':30, 
            # 设置Schema-Free的Field & Value
            'anykey1': 'str-value', 'anykey2': 1,
            'anykey3': True, 'anykey4': 3.1415926
        }
    )
)
# insert单条数据,并设置Fields Value
ret = collection.insert(
    ('4', np.random.rand(4), {'foo': 'bar'})  # (id, vector, fields)
)


批量插入Doc

# 通过Doc对象,批量insert 10条数据
ret = collection.insert(
    [
        Doc(id=str(i+5), vector=np.random.rand(4)) for i in range(10)
    ]
)
# 简化形式:通过Tuple,批量insert 3条数据
ret = collection.insert(
    [
        ('15', [0.2,0.7,0.8,1.3], {'age': 20}),
        ('16', [0.3,0.6,0.9,1.2], {'age': 30}),
        ('17', [0.4,0.5,1.0,1.1], {'age': 40})
    ]                                         # List[(id, vector, fields)]
)
# 判断批量insert是否成功
assert ret


异步插入Doc

# 异步批量insert 10条数据
ret_funture = collection.insert(
    [
        Doc(id=str(i+18), vector=np.random.rand(4), fields={'name': 'foo' + str(i)}) for i in range(10)
    ],
    async_req=True
)
# 等待并获取异步insert结果
ret = ret_funture.get()


插入带有Sparse Vector的Doc

ret = collection.insert(
    Doc(
        id='28',
        vector=[0.1, 0.2, 0.3, 0.4],
        sparse_vector={1:0.4, 10000:0.6, 222222:0.8}
    )
)



Java SDK方式


说明

插入Doc时若指定id已存在,已存在的Doc不会被覆盖,本次插入Doc操作无效。

前提条件


接口定义

// class DashVectorCollection
// 同步接口
public Response<Void> insert(InsertDocRequest insertDocRequest);
// 异步接口
public ListenableFuture<Response<Void>> insertAsync(InsertDocRequest insertDocRequest);


使用示例

说明

  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.DashVectorClientConfig;
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.InsertDocRequest;
import com.aliyun.dashvector.models.responses.Response;
import com.google.common.util.concurrent.ListenableFuture;
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<Void> response = collection.insert(InsertDocRequest.builder().doc(doc).build());
        // 判断插入是否成功
        // assert response.isSuccess() 
    }
}


插入带有Fields的Doc

// 构建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时预定义的Fileds 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<Void> response = collection.insert(InsertDocRequest.builder().doc(doc).build());
// 判断插入Doc是否成功
assert response.isSuccess()


批量插入Doc

// 通过InsertDocRequest对象,批量插入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()
  );
}
InsertDocRequest request = InsertDocRequest.builder().docs(docs).build();
Response<Void> response = collection.insert(request);
// 判断插入是否成功
assert response.isSuccess();


异步插入Doc

// 异步批量插入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()
  );
}
InsertDocRequest request = InsertDocRequest.builder().docs(docs).build();
ListenableFuture<Response<Void>> response = collection.insertAsync(request);
// 等待并获取异步insert结果
Response<Void> ret = response.get();


插入带有Sparse Vector的Doc

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<Void> response = collection.insert(InsertDocRequest.builder().doc(doc).build());



API方式


说明

插入Doc时若指定id已存在,已存在的Doc不会被覆盖,本次插入Doc操作无效。

前提条件


Method与URL

POST https://{Endpoint}/v1/collections/{CollectionName}/docs


使用示例

说明

  1. 需要使用您的api-key替换示例中的YOUR_API_KEY、您的Cluster Endpoint替换示例中的YOUR_CLUSTER_ENDPOINT,代码才能正常运行。
  2. 本示例需要参考新建Collection-使用示例提前创建好名称为quickstart的Collection。


插入Doc

curl -XPOST \
  -H 'dashvector-auth-token: YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
  "docs": [{"id": "1", "vector": [0.1, 0.2, 0.3, 0.4]}]
  }' https://YOUR_CLUSTER_ENDPOINT/v1/collections/quickstart/docs
# example output:
# {"request_id":"3fc2acfa-48cb-4924-8ef7-f94388ecb07d","code":0,"message":"Success"}


插入带有Fields的Doc

curl -XPOST \
  -H 'dashvector-auth-token: YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "docs": [
      {
        "id": "2", 
        "vector": [0.2, 0.3, 0.4, 0.5], 
        "fields": 
          {
            "age": 70, 
            "name": "zhangshan",
            "anykey1": "str-value",
            "anykey2": 1,
            "anykey3": true,
            "anykey4": 3.1415926
          }
      }
    ]
   }' https://YOUR_CLUSTER_ENDPOINT/v1/collections/quickstart/docs
# example output:
# {"request_id":"4abd0c5e-78a6-488b-976f-16f0d2e628c5","code":0,"message":"Success"}


批量插入Doc

curl -XPOST \
  -H 'dashvector-auth-token: YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{ 
    "docs": [ 
      {"id": "3", "vector": [0.3, 0.4, 0.5, 0.6]},
      {"id": "4", "vector": [0.4, 0.5, 0.6, 0.7], "fields": {"age": 20, "name": "zhangsan"}},
      {"id": "5", "vector": [0.5, 0.6, 0.7, 0.8], "fields": {"anykey": "anyvalue"}}
    ]
   }' https://YOUR_CLUSTER_ENDPOINT/v1/collections/quickstart/docs
# example output:
# {"request_id":"19215409-ea66-4db9-8764-26ce2eb5bb99","code":0,"message":""}


插入带有Sparse Vector的Doc

curl -XPOST \
  -H 'dashvector-auth-token: YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "docs": [
      {"id": "6", "vector": [0.1, 0.2, 0.3, 0.4], "sparse_vector":{"1":0.4, "10000":0.6, "222222":0.8}}
    ]
   }' https://YOUR_CLUSTER_ENDPOINT/v1/collections/quickstart/docs
# example output:
# {"request_id":"4fefe855-ae39-48b3-9aa8-f45a77a3cd29","code":0,"message":"Success"}



了解更多阿里云向量检索服务DashVector的使用方法,请点击:

https://help.aliyun.com/product/2510217.html?spm=a2c4g.2510217.0.0.54fe155eLs1wkT

相关文章
|
8月前
|
机器学习/深度学习 并行计算 Java
JDK21更新内容:向量计算
JDK21更新内容:向量计算
|
6天前
|
人工智能 自然语言处理 算法
向量检索基础方法总结
介绍大规模向量检索算法,包括基于空间划分和基于图的方法。文章提到了LSH、PQ和HNSW等技术,并详细解释了PQ的乘积量化和倒排乘积量化(IVFPQ)原理,以及NSW和HNSW(Hierarchical Navigable Small World)的图构造和查询优化策略。
|
6天前
|
人工智能 Java API
向量检索的3种方式
本文介绍向量检索服务如何通过控制台、SDK、API三种不同的方式检索向量。
向量检索的3种方式
|
6天前
|
SQL 前端开发 Java
三级分类的数据表设计和构造API数据
三级分类的数据表设计和构造API数据
40 0
|
10月前
|
PHP
php清洗数据实战案例(4):按照关联数组相同值名称进行筛选后对不同的指标予以合并计算的解决方案
php清洗数据实战案例(4):按照关联数组相同值名称进行筛选后对不同的指标予以合并计算的解决方案
41 0
|
11月前
|
数据采集 移动开发 数据可视化
空间转录组|Load10X_Spatial函数修改适配多形式数据 + 空转标准流程
空间转录组|Load10X_Spatial函数修改适配多形式数据 + 空转标准流程
392 0
|
11月前
|
算法 数据挖掘 API
终于让我找到支持任意经纬度生活指数查询API 了
终于让我找到支持任意经纬度生活指数查询API 了
92 0
终于让我找到支持任意经纬度生活指数查询API 了
|
数据采集 NoSQL 大数据
数据预处理-航线类型操作类型-更新规则|学习笔记
快速学习数据预处理-航线类型操作类型-更新规则
317 0
|
存储 机器学习/深度学习 自然语言处理
【算法的特性,标准,时间维度空间维度计算方式】
【算法的特性,标准,时间维度空间维度计算方式】
230 0
【算法的特性,标准,时间维度空间维度计算方式】
|
Serverless 开发者
函数计算中的限制项|学习笔记
快速学习函数计算中的限制项
100 0
函数计算中的限制项|学习笔记