向量检索的3种方式

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

免费体验阿里云高性能向量检索服务https://www.aliyun.com/product/ai/dashvector


控制台方式

  1. 登录向量检索服务控制台
  2. 在左侧导航栏单击Cluster列表,选中需要检索向量的Collection,单击Collection详情
  3. 在左侧二级导航栏,单击相似向量搜索,填写相应内容后,单击搜索,即可返回相似向量结果。



SDK方式

Python SDK方式

前提条件


接口定义

Collection.query(
    vector: Optianal[Union[List[Union[int, float]], np.ndarray]] = None,
    id: Optional[str] = None,
    topk: int = 10,
    filter: Optional[str] = None,
    include_vector: bool = False,
    partition: Optional[str] = None,
    output_fields: Optional[List[str]] = None,
    sparse_vector: Optional[Dict[int, float]] = None,
    async_req: False
) -> DashVectorResponse


使用示例

说明

  1. 需要使用您的api-key替换示例中的YOUR_API_KEY、您的Cluster Endpoint替换示例中的YOUR_CLUSTER_ENDPOINT,代码才能正常运行。
  2. 本示例需要参考新建Collection-使用示例提前创建好名称为quickstart的Collection,并参考插入Doc提前插入部分数据。
import dashvector
import numpy as np
client = dashvector.Client(
    api_key='YOUR_API_KEY',
    endpoint='YOUR_CLUSTER_ENDPOINT'
)
collection = client.get(name='quickstart')


根据向量进行相似性检索

ret = collection.query(
    vector=[0.1, 0.2, 0.3, 0.4]
)
# 判断query接口是否成功
if ret:
    print('query success')
    print(len(ret))
    for doc in ret:
        print(doc)
        print(doc.id)
        print(doc.vector)
        print(doc.fields)
ret = collection.query(
    vector=[0.1, 0.2, 0.3, 0.4],
    topk=100,
    output_fields=['name', 'age'], # 仅返回name、age这2个Field
    include_vector=True
)


根据主键(对应的向量)进行相似性检索

ret = collection.query(
    id='1'
)
# 判断query接口是否成功
if ret:
    print('query success')
    print(len(ret))
    for doc in ret:
        print(doc)
        print(doc.id)
        print(doc.vector)
        print(doc.fields)
ret = collection.query(
    id='1',
    topk=100,
    output_fields=['name', 'age'], # 仅返回name、age这2个Field
    include_vector=True
)


带过滤条件的相似性检索

# 根据向量或者主键进行相似性检索 + 条件过滤
ret = collection.query(
    vector=[0.1, 0.2, 0.3, 0.4],   # 向量检索,也可设置主键检索
    topk=100,
    filter='age > 18',             # 条件过滤,仅对age > 18的Doc进行相似性检索
    output_fields=['name', 'age'], # 仅返回name、age这2个Field
    include_vector=True
)


带有Sparse Vector的向量检索

说明

Sparse Vector(稀疏向量)可用于关键词权重表示,实现带关键词感知能力的向量检索

# 根据向量进行相似性检索 + 稀疏向量
ret = collection.query(
    vector=[0.1, 0.2, 0.3, 0.4],   # 向量检索
    sparse_vector={1: 0.3, 20: 0.7}
)


通过过滤条件进行匹配查询

# 支持向量和主键都不传入,那么只进行条件过滤
ret = collection.query(
    topk=100,
    filter='age > 18',             # 条件过滤,仅对age > 18的Doc进行匹配查询
    output_fields=['name', 'age'], # 仅返回name、age这2个Field
    include_vector=True
)


Java SDK方式

前提条件


接口定义

// 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(稀疏向量)可用于关键词权重表示,实现带关键词感知能力的向量检索

Vectorvector=Vector.builder().value(Arrays.asList(0.1f, 0.2f, 0.3f, 0.4f)).build();
// 构建带有Sparse Vector的QueryDocRequestQueryDocRequestrequest=QueryDocRequest.builder()
  .vector(vector) // 向量检索  .sparseVector(
newMap<Integer, Float>() {
      {
put(1, 0.4f);
put(10000, 0.6f);
put(222222, 0.8f);
      }
    }) // 稀疏向量  .build();
// 根据向量进行相似性检索 + 稀疏向量Response<List<Doc>>response=collection.query(request);
// 判断检索是否成功assertresponse.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()


API方式

前提条件

Method与URL

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


使用示例

说明

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


根据向量进行相似性检索

curl -XPOST \
  -H 'dashvector-auth-token: YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "vector": [0.1, 0.2, 0.3, 0.4],
    "topk": 10,
    "include_vector": true
  }' https://YOUR_CLUSTER_ENDPOINT/v1/collections/quickstart/query
# example output:
# {
#   "code": 0,
#   "request_id": "2cd1cac7-f1ee-4d15-82a8-b65e75d8fd13",
#   "message": "Success",
#   "output": [
#     {
#       "id": "1",
#       "vector":[
#         0.10000000149011612,
#         0.20000000298023224,
#         0.30000001192092896,
#         0.4000000059604645
#       ],
#       "fields": {
#         "name": "zhangshan",
#         "weight": null,
#         "age": 20,
#         "anykey": "anyvalue"
#       },
#       "score": 0.3
#     }
#   ]
# }


根据主键(对应的向量)进行相似性检索

curl -XPOST \
  -H 'dashvector-auth-token: YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "id": "1",
    "topk": 1,
    "include_vector": true
  }' https://YOUR_CLUSTER_ENDPOINT/v1/collections/quickstart/query
# example output:
# {
#   "code":0,
#   "request_id":"fab4e8a2-15e4-4b55-816f-3b66b7a44962",
#   "message":"Success",
#   "output":[
#     {
#       "id":"1",
#       "vector":[
#         0.10000000149011612,
#         0.20000000298023224,
#         0.30000001192092896,
#         0.4000000059604645
#       ],
#        "fields": {
#         "name": "zhangshan",
#         "weight": null,
#         "age": 20,
#         "anykey": "anyvalue"
#       },
#       "score": 0.3
#     }
#   ]
# }


带过滤条件的相似性检索

curl -XPOST \
  -H 'dashvector-auth-token: YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "filter": "age > 18",
    "topk": 1,
    "include_vector": true
  }' https://YOUR_CLUSTER_ENDPOINT/v1/collections/quickstart/query
# example output:
# {
#   "code":0,
#   "request_id":"4c7331d8-fba1-4c3a-8673-124568670de7",
#   "message":"Success",
#   "output":[
#     {
#       "id":"1",
#       "vector":[
#         0.10000000149011612,
#         0.20000000298023224,
#         0.30000001192092896,
#         0.4000000059604645
#       ],
#        "fields": {
#         "name": "zhangshan",
#         "weight": null,
#         "age": 20,
#         "anykey": "anyvalue"
#       },
#       "score": 0.0
#     }
#   ]
# }


带有Sparse Vector的向量检索

curl -XPOST \
  -H 'dashvector-auth-token: YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "vector": [0.1, 0.2, 0.3, 0.4],
    "sparse_vector":{"1":0.4, "10000":0.6, "222222":0.8},
    "topk": 1,
    "include_vector": true
  }' https://YOUR_CLUSTER_ENDPOINT/v1/collections/quickstart/query
# example output:
# {
#   "code":0,
#   "request_id":"ad84f7a0-b4b2-4023-ae80-b6f092609a53",
#   "message":"Success",
#   "output":[
#     {
#       "id":"2",
#       "vector":[
#         0.10000000149011612,
#         0.20000000298023224,
#         0.30000001192092896,
#         0.4000000059604645
#       ],
#       "fields":{"name":null,"weight":null,"age":null},
#       "score":1.46,
#       "sparse_vector":{
#         "10000":0.6,
#         "1":0.4,
#         "222222":0.8
#       }
#     }
#   ]
# }



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

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

相关文章
|
20天前
|
机器学习/深度学习 搜索推荐 机器人
为什么应用里需要向量检索?
向量检索在推荐系统、图片搜索等领域广泛应用,通过神经网络提取非结构化数据的语义信息,实现高效检索,提升非结构化数据处理能力。
|
5月前
|
存储 自然语言处理 算法
高维向量压缩方法IVFPQ :通过创建索引加速矢量搜索
向量相似性搜索是从特定嵌入空间中的给定向量列表中找到相似的向量。它能有效地从大型数据集中检索相关信息,在各个领域和应用中发挥着至关重要的作用。
107 0
|
13天前
|
人工智能 算法 数据挖掘
向量近邻检索方法总结
本文详细介绍向量近邻检索方法。
|
12天前
|
存储 人工智能 自然语言处理
基于阿里云向量检索 Milvus 版与 PAI 搭建高效的检索增强生成(RAG)系统
阿里云向量检索 Milvus 版现已无缝集成于阿里云 PAI 平台,一站式赋能用户构建高性能的检索增强生成(RAG)系统。您可以利用 Milvus 作为向量数据的实时存储与检索核心,高效结合 PAI 和 LangChain 技术栈,实现从理论到实践的快速转化,搭建起功能强大的 RAG 解决方案。
基于阿里云向量检索 Milvus 版与 PAI 搭建高效的检索增强生成(RAG)系统
|
2月前
|
人工智能 开发工具 索引
分组向量检索
本文介绍如何在向量检索时将结果按照字段值进行分组返回。
|
2月前
|
人工智能 算法 数据处理
大模型长上下文与向量检索的关系
AI应用的开发者一直在追求查询质量和成本之间的完美平衡,当大型企业将生成式人工智能投入生产时,需要控制成本,同时保持最佳的响应质量,RAG技术和向量数据库依然是实现这一目标的重要工具。
|
4月前
|
人工智能 JSON Java
向量新增的3种方式
本文介绍向量检索服务如何通过控制台、SDK、API三种不同的方式新增向量。
向量新增的3种方式
|
4月前
|
机器学习/深度学习 人工智能 算法
大规模向量检索
更加形象化的讲述向量检索
|
4月前
|
自然语言处理 分布式计算 算法
通过OpenSearch向量检索版进行混合检索的最佳实践
本文介绍如何通过OpenSearch向量检索版,使用稀疏-稠密向量进行混合检索,获得更好的搜索效果。
1186 0
|
4月前
|
自然语言处理 开发工具 索引
向量检索服务——关键词感知检索详解
向量检索服务DashVector同时支持Dense Vector(稠密向量)和Sparse Vector(稀疏向量),前者用于模型的高维特征(Embedding)表达,后者用于关键词和词频信息表达。DashVector可以进行关键词感知的向量检索,即Dense Vector和Sparse Vector结合的混合检索。