如何通过Java SDK检索Doc

前提条件

接口定义

Java示例:

swift 复制代码
// 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提前插入部分数据。

根据向量进行相似性检索

Java示例:

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.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
        //     }
        //   ]
        // }
    }
}

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

Java示例:

scss 复制代码
// 构建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()

带过滤条件的相似性检索

Java示例:

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

Java示例:

scss 复制代码
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()

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

Java示例:

scss 复制代码
// 构建只携带过滤条件,不包含主键或向量的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()

向量检索高级参数

**说明

详情可参考 向量检索高级参数

Java示例:

scss 复制代码
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();
}

多向量检索

**说明

详情可参考 多向量检索

scss 复制代码
SparseVector abstruct_vector = SparseVector.builder()
            .value(0L, 0.4f)
            .value(1L, 0.6f)
            .value(2L, 0.8f)
            .build();
QueryDocRequest request = QueryDocRequest.builder()
        .vectors("title", VectorQuery.builder().vector(Vector.builder().value(Arrays.asList(0.1f, 0.2f, 0.3f, 0.4f)).build()).numCandidates(3).build())
        .vectors("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())
        .sparseVectors("abstruct", SparseVectorQuery.builder().vector(abstruct_vector).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);

使用多向量的一个向量执行检索

scss 复制代码
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();
}

具体方法: 检索Doc_向量检索服务 DashVector(DashVector)-阿里云帮助中心

相关推荐
Frostnova丶29 分钟前
(13)LeetCode 53. 最大子数组和
算法·leetcode·职场和发展
什巳31 分钟前
JAVA练习277- 找到字符串中所有字母异位
java·开发语言·算法·leetcode
机器学习之心32 分钟前
基于遗传粒子群混合算法的无人机三维路径规划:Matlab 实现与多算法对比分析
算法·matlab·无人机·无人机三维路径规划·遗传粒子群混合算法
程序员爱钓鱼34 分钟前
Rust 项目目录结构详解:从 Hello World 到企业级项目
后端·rust
岁月宁静37 分钟前
DeepSeek Harness 团队 招聘 :JD反推:新手如何系统掌握AI Agent开发技术?
前端·人工智能·后端
本王是暴君44 分钟前
AutoMem:把 Agent Memory 变成可训练的记忆管理技能
人工智能·算法·数据挖掘
zmzb01031 小时前
C++课后习题训练记录Day154
数据结构·c++·算法
禅思院1 小时前
AI对话前端从入门到崩溃:一个长对话引发的五层优化战争【三】
前端·架构·前端框架
编程(变成)小辣鸡2 小时前
如何防止接口被恶意刷?
java·后端·网络安全
木木子226 小时前
# 密码强度检测深度解析:正则表达式实时分析、多维度评分算法与可视化反馈
mysql·算法·华为·正则表达式·harmonyos