全部文档
当前文档

暂无内容

如果没有找到您期望的内容,请尝试其他搜索词

文档中心

管理向量

最近更新时间:2026-11-05 15:15:23

写入向量

/**
 * 写入向量(同 key 覆盖)
 *
 * <p>单批最多 500 条,QPS ≤ 5(调用方控速)。{@code metadata} 为可筛选元数据,值可为任意 JSON value。</p>
 */
public void putVectors() {
    Ks3VectorsClient client = initVectorsClient();
    String bucketName = "my-vector-bucket";
    String indexName = "my-index";
    try {
        List<InputVector> vectors = new ArrayList<>();
        Map<String, Object> meta1 = new HashMap<>();
        meta1.put("category", "faq");
        meta1.put("score", 0.9);
        InputVector v1 = new InputVector("doc-001", new VectorData(new float[]{1.0f, 2.0f, 3.0f}));
        v1.setMetadata(meta1);
        vectors.add(v1);
        vectors.add(new InputVector("doc-002", new VectorData(new float[]{4.0f, 5.0f, 6.0f})));

        Ks3Result result = client.putVectors(
                new PutVectorsRequest(bucketName, indexName, vectors));
        System.out.println("写入成功,requestId=" + result.getRequestId());
    } catch (Ks3ServiceException e) {
        System.out.println("Ks3ServiceException: " + e.getErrorMessage()
                + ", status=" + e.getStatusCode() + ", requestId=" + e.getRequestId());
    } catch (Ks3ClientException e) {
        System.out.println("Ks3ClientException: " + e.getMessage());
    } finally {
        client.shutdown();
    }
}

获取向量

/**
 * 获取向量(按 key 批量读,单次最多 100 条)
 *
 * <p>{@code returnData}/{@code returnMetadata} 不传则不出现该键,由服务端默认。</p>
 */
public void getVectors() {
    Ks3VectorsClient client = initVectorsClient();
    String bucketName = "my-vector-bucket";
    String indexName = "my-index";
    try {
        GetVectorsResult result = client.getVectors(
                new GetVectorsRequest(bucketName, indexName,
                        Arrays.asList("doc-001", "doc-002"))
                        .withReturnData(true)
                        .withReturnMetadata(true));
        List<OutputVector> vectors = result.getVectors();
        if (vectors != null) {
            for (OutputVector v : vectors) {
                System.out.println("key=" + v.getKey() + ", metadata=" + v.getMetadata());
            }
        }
    } catch (Ks3ServiceException e) {
        System.out.println("Ks3ServiceException: " + e.getErrorMessage()
                + ", status=" + e.getStatusCode() + ", requestId=" + e.getRequestId());
    } catch (Ks3ClientException e) {
        System.out.println("Ks3ClientException: " + e.getMessage());
    } finally {
        client.shutdown();
    }
}

列举向量

/**
 * 列举索引内向量——串行分页
 *
 * <p>单次最多 1000 条,{@code nextToken} 为空表示已到最后一页。</p>
 */
public void listVectorsByPage() {
    Ks3VectorsClient client = initVectorsClient();
    String bucketName = "my-vector-bucket";
    String indexName = "my-index";
    try {
        String nextToken = null;
        int total = 0;
        do {
            ListVectorsResult result = client.listVectors(
                    new ListVectorsRequest(bucketName, indexName)
                            .withMaxResults(100)
                            .withNextToken(nextToken)
                            .withReturnMetadata(true));
            List<OutputVector> vectors = result.getVectors();
            if (vectors != null) {
                total += vectors.size();
                for (OutputVector v : vectors) {
                    System.out.println("  key=" + v.getKey());
                }
            }
            nextToken = result.getNextToken();
        } while (nextToken != null && !nextToken.isEmpty());
        System.out.println("列举完成,共 " + total + " 条");
    } catch (Ks3ServiceException e) {
        System.out.println("Ks3ServiceException: " + e.getErrorMessage()
                + ", status=" + e.getStatusCode() + ", requestId=" + e.getRequestId());
    } catch (Ks3ClientException e) {
        System.out.println("Ks3ClientException: " + e.getMessage());
    } finally {
        client.shutdown();
    }
}

列举向量(分段)

/**
 * 列举索引内向量——并行分段(segmentIndex)
 *
 * <p>通过 {@code segmentCount}+{@code segmentIndex} 将索引数据划分为 N 段,
 * 多线程/多节点并行拉取各段,{@code 1 ≤ segmentIndex <= segmentCount} (1-based)。</p>
 */
public void listVectorsBySegment() {
    Ks3VectorsClient client = initVectorsClient();
    String bucketName = "my-vector-bucket";
    String indexName = "my-index";
    int segmentCount = 4;
    try {
        for (int segmentIndex = 1; segmentIndex <= segmentCount; segmentIndex++) {
            // 实际可改为多线程并行,这里串行演示分段参数用法
            ListVectorsResult result = client.listVectors(
                    new ListVectorsRequest(bucketName, indexName)
                            .withMaxResults(100)
                            .withSegmentCount(segmentCount)
                            .withSegmentIndex(segmentIndex));
            List<OutputVector> vectors = result.getVectors();
            System.out.println("段 " + segmentIndex + ": "
                    + (vectors == null ? 0 : vectors.size()) + " 条");
        }
    } catch (Ks3ServiceException e) {
        System.out.println("Ks3ServiceException: " + e.getErrorMessage()
                + ", status=" + e.getStatusCode() + ", requestId=" + e.getRequestId());
    } catch (Ks3ClientException e) {
        System.out.println("Ks3ClientException: " + e.getMessage());
    } finally {
        client.shutdown();
    }
}

相似性检索向量

/**
 * 向量相似性检索(QueryVectors)
 *
 * <p>{@code topK} 可选(传则 1-100),{@code filter} 为元数据预过滤(任意 JSON value,
 * 支持操作符)。结果含 {@code distance}(与查询向量的距离)。</p>
 */
public void queryVectors() {
    Ks3VectorsClient client = initVectorsClient();
    String bucketName = "my-vector-bucket";
    String indexName = "my-index";
    try {
        // 过滤条件:category == "faq",任意 JSON value,用 Map 承装
        Map<String, Object> filter = new HashMap<>();
        Map<String, Object> eq = new HashMap<>();
        eq.put("category", "faq");
        filter.put("eq", eq);

        QueryVectorsResult result = client.queryVectors(
                new QueryVectorsRequest(bucketName, indexName,
                        new VectorData(new float[]{1.0f, 2.0f, 3.0f}))
                        .withTopK(5)
                        .withFilter(filter)
                        .withReturnData(true)
                        .withReturnMetadata(true)
                        .withReturnDistance(true));
        List<OutputVector> vectors = result.getVectors();
        if (vectors != null) {
            for (OutputVector v : vectors) {
                System.out.println("key=" + v.getKey()
                        + ", distance=" + v.getDistance()
                        + ", metadata=" + v.getMetadata());
            }
        }
    } catch (Ks3ServiceException e) {
        System.out.println("Ks3ServiceException: " + e.getErrorMessage()
                + ", status=" + e.getStatusCode() + ", requestId=" + e.getRequestId());
    } catch (Ks3ClientException e) {
        System.out.println("Ks3ClientException: " + e.getMessage());
    } finally {
        client.shutdown();
    }
}

删除向量

/**
 * 删除向量
 */
public void deleteVectors() {
    Ks3VectorsClient client = initVectorsClient();
    String bucketName = "my-vector-bucket";
    String indexName = "my-index";
    try {
        Ks3Result result = client.deleteVectors(
                new DeleteVectorsRequest(bucketName, indexName,
                        Arrays.asList("doc-001", "doc-002")));
        System.out.println("删除成功,requestId=" + result.getRequestId());
    } catch (Ks3ServiceException e) {
        System.out.println("Ks3ServiceException: " + e.getErrorMessage()
                + ", status=" + e.getStatusCode() + ", requestId=" + e.getRequestId());
    } catch (Ks3ClientException e) {
        System.out.println("Ks3ClientException: " + e.getMessage());
    } finally {
        client.shutdown();
    }
}
文档导读
纯净模式常规模式

纯净模式

点击可全屏预览文档内容
文档反馈