全部产品
Search
文档中心

表格存储:使用向量检索

更新时间:Jul 11, 2025

本文介绍如何通过控制台或SDK使用向量检索功能查询数据。

接口

向量检索的接口为Search,具体的Query类型为KnnVectorQuery

参数

参数

是否必选

说明

fieldName

向量字段名称。

topK

查询最邻近的topK个值。关于最大值的说明请参见多元索引使用限制

重要

K值越大,召回率越好,但是查询延迟和费用越高。

float32QueryVector

要查询相似度的向量。

filter

查询过滤器,支持组合使用任意的非向量检索的查询条件。

使用方式

说明

如果使用向量检索功能时遇到问题,请提交工单联系我们。

您可以使用控制台或者SDK进行向量检索。进行向量检索之前,您需要完成如下准备工作。

使用控制台

  1. 进入索引管理页签。

    1. 登录表格存储控制台

    2. 在页面上方,选择资源组和地域。

    3. 概览页面,单击实例名称或在操作列单击实例管理

    4. 实例详情页签下的数据表列表页签,单击数据表名称或在操作列单击索引管理

  2. 索引管理页签,单击目标多元索引操作列的搜索

  3. 查询数据对话框,查询数据。

    1. 系统默认返回所有列,如需显示指定属性列,关闭获取所有列并输入需要返回的属性列,多个属性列之间用半角逗号(,)隔开。

      说明

      系统默认会返回数据表的主键列。

    2. 根据需要选择逻辑操作符为 AndOr 或者 Not

      当选择逻辑操作符为 And 时,返回满足指定条件的数据。当选择逻辑操作符为 Or 时,如果配置了单个条件,则返回满足指定条件的数据;如果配置了多个条件,则返回满足任意一个条件的数据。当选择逻辑操作符为 Not 时,返回不满足指定条件的数据。

    3. 选择向量字段,单击添加

    4. 设置向量字段的查询类型为向量检索(KnnVectorQuery)以及输入要查询的向量和topK值。

      请按照界面提示输入符合格式的向量。

    5. 系统默认关闭排序功能,如需根据指定字段对返回结果进行排序,打开是否排序开关后,根据需要添加要进行排序的字段并配置排序方式。

    6. 系统默认关闭统计功能,如需对指定字段进行数据统计,打开是否统计开关后,根据需要添加要进行统计的字段和配置统计信息。

  4. 单击确定

    符合查询条件的数据会显示在索引管理页签中。

使用SDK

重要

表格存储Java SDK从5.17.0版本开始支持向量检索,Go SDK请使用最新SDK版本,Python SDK从5.4.4版本开始支持向量检索,Node.js SDK从5.5.0版本开始支持向量检索。

您可以通过Java SDKGo SDKPython SDKNode.js SDK使用向量检索功能。此处以Java SDK为例介绍使用向量检索的操作。

重要

使用Java SDK进行向量检索前,您需要初始化Client。具体操作,请参见初始化Client

以下示例用于查询表中与指定向量最邻近的10个向量数据,并且最邻近的向量需要满足Col_Keyword列值等于"hangzhou"且Col_Long列值小于4的条件。

private static void knnVectorQuery(SyncClient client) {
    SearchQuery searchQuery = new SearchQuery();
    KnnVectorQuery query = new KnnVectorQuery();
    query.setFieldName("Col_Vector");
    query.setTopK(10); // 返回最邻近的topK。
    query.setFloat32QueryVector(new float[]{0.1f, 0.2f, 0.3f, 0.4f});
    // 最邻近的向量需要满足Col_Keyword=hangzhou && Col_Long<4条件。
    query.setFilter(QueryBuilders.bool()
            .must(QueryBuilders.term("Col_Keyword", "hangzhou"))
            .must(QueryBuilders.range("Col_Long").lessThan(4))
    );
    searchQuery.setQuery(query);
    searchQuery.setLimit(10);
    // 按照分数排序。
    searchQuery.setSort(new Sort(Collections.singletonList(new ScoreSort())));
    SearchRequest searchRequest = new SearchRequest("<TABLE_NAME>", "<SEARCH_INDEX_NAME>", searchQuery);
    SearchRequest.ColumnsToGet columnsToGet = new SearchRequest.ColumnsToGet();
    columnsToGet.setColumns(Arrays.asList("Col_Keyword", "Col_Long"));
    searchRequest.setColumnsToGet(columnsToGet);
    // 访问Search接口。
    SearchResponse resp = client.search(searchRequest);
    for (SearchHit hit : resp.getSearchHits()) {
        // 打印分数。
        System.out.println(hit.getScore());
        // 打印数据。
        System.out.println(hit.getRow());
    }
}

常见问题

如何优化表格存储的向量检索效果

相关文档