向量检索

KnnVectorQuery使用数值向量进行近似最近邻查询,可以在大规模数据集中找到最相似的数据项。

目前向量检索功能处于邀测中,默认关闭。如果需要使用该功能,请提交工单进行申请或者加入钉钉群36165029092(表格存储技术交流群-3)进行咨询

前提条件

注意事项

  • 表格存储Python SDK5.4.4版本开始支持向量检索功能,请确保已安装正确的表格存储Python SDK版本。

    说明

    关于Python SDK历史迭代版本的更多信息,请参见Python SDK历史迭代版本

  • 向量字段类型的个数、维度等存在限制。更多信息,请参见多元索引限制

  • 由于多元索引服务端是多分区的,多元索引服务端的每个分区均会返回自身最邻近的TopK个值并在协调节点进行汇总,因此如果要使用Token翻页获取所有数据,则获取到的总行数与多元索引服务端的分区数有关。

参数

参数

是否必选

说明

field_name

向量字段名称。

top_k

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

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

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

float32_query_vector

要查询相似度的向量。

filter

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

示例

以下示例用于查询表中与指定向量最邻近的10个向量数据,并且最邻近的向量需要满足col_keyword列值等于"0"且col_long列值在050之间的条件。

def knn_vector_query(client):
    filter_query = BoolQuery(
        must_queries=[
            TermQuery(field_name='col_keyword', column_value="0"),
            RangeQuery(field_name='col_long', range_from=0, range_to=50),
        ]
    )
    query = KnnVectorQuery(field_name='col_vector', top_k=10, float32_query_vector=[1.0, 1.1, 1.2, -1.3], filter=filter_query)
    # 按照分数排序。
    sort = Sort(sorters=[ScoreSort(sort_order=SortOrder.DESC)])
    search_query = SearchQuery(query, limit=10, get_total_count=False, sort=sort)
    search_response = client.search(
        table_name='<TABLE_NAME>',
        index_name='<SEARCH_INDEX_NAME>',
        search_query=search_query,
        columns_to_get=ColumnsToGet(column_names=["col_keyword", "col_long"], return_type=ColumnReturnType.SPECIFIED)
    )
    print("requestId:", search_response.request_id)
    for row in search_response.rows:
        print(row)

相关文档