使用向量检索

更新时间:2025-02-07 05:42:43

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

接口

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

参数

参数

是否必选

说明

参数

是否必选

说明

fieldName

向量字段名称。

topK

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

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

  • topK的值小于SearchQuerylimit的值时,服务端会自动把topK的值放大到limit的值。

float32QueryVector

要查询相似度的向量。

filter

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

使用方式

说明

如果使用向量检索功能时遇到问题,请提交工单或者加入钉钉群36165029092(表格存储技术交流群-3)联系我们。

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

使用控制台

  1. 进入索引管理页签。

    1. 登录表格存储控制台

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

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

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

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

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

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

      说明

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

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

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

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

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

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

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

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

  4. 单击确定

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

使用SDK

重要

表格存储Java SDK5.17.0版本开始支持向量检索,Go SDK请使用最新SDK版本,Python SDK5.4.4版本开始支持向量检索,Node.js SDK5.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());
    }
}

常见问题

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

相关文档

  • 本页导读 (1)
  • 接口
  • 参数
  • 使用方式
  • 常见问题
  • 相关文档
AI助理

点击开启售前

在线咨询服务

你好,我是AI助理

可以解答问题、推荐解决方案等