KnnVectorQuery使用数值向量进行近似最近邻查询,可以在大规模数据集中找到最相似的数据项。
前提条件
在数据表上创建多元索引并配置向量字段。
注意事项
表格存储Python SDK从5.4.4版本开始支持向量检索功能,推荐您使用最新版本的表格存储Python SDK。
Python SDK的历史迭代版本信息请参见Python SDK历史迭代版本。
向量字段类型的个数、维度等存在限制。更多信息,请参见多元索引使用限制。
由于多元索引服务端是多分区的,多元索引服务端的每个分区均会返回自身最邻近的TopK个值并在协调节点进行汇总,因此如果要使用Token翻页获取所有数据,则获取到的总行数与多元索引服务端的分区数有关。
参数
参数 | 是否必选 | 说明 |
参数 | 是否必选 | 说明 |
field_name | 是 | 向量字段名称。 |
top_k | 是 | 查询最邻近的topK个值。关于最大值的说明请参见多元索引使用限制。
|
float32_query_vector | 是 | 要查询相似度的向量。 |
filter | 否 | 查询过滤器,支持组合使用任意的非向量检索的查询条件。 |
示例
以下示例用于查询表中与指定向量最邻近的10个向量数据,并且最邻近的向量需要满足col_keyword列值等于"0"且col_long列值在0到50之间的条件。
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)
# 如果您当前使用的SDK版本无法获取search_hits,请将SDK版本提升到6.1.0及以上。
for hit in search_response.search_hits:
# 获取行数据。
row = hit.row
print(row)
# 获取分数。
score = hit.score
print(score)
常见问题
相关文档
该文章对您有帮助吗?
- 本页导读 (1)
- 前提条件
- 注意事项
- 参数
- 示例
- 常见问题
- 相关文档