向量檢索
KnnVectorQuery使用數(shù)值向量進(jìn)行近似最近鄰查詢,可以在大規(guī)模數(shù)據(jù)集中找到最相似的數(shù)據(jù)項(xiàng)。
前提條件
已初始化OTSClient。具體操作,請(qǐng)參見初始化OTSClient。
已創(chuàng)建數(shù)據(jù)表并寫入數(shù)據(jù)。具體操作,請(qǐng)參見創(chuàng)建數(shù)據(jù)表和寫入數(shù)據(jù)。
已在數(shù)據(jù)表上創(chuàng)建多元索引并配置向量字段。具體操作,請(qǐng)參見創(chuàng)建多元索引。
注意事項(xiàng)
表格存儲(chǔ)Python SDK從5.4.4版本開始支持向量檢索功能,請(qǐng)確保已安裝正確的表格存儲(chǔ)Python SDK版本。
說明關(guān)于Python SDK歷史迭代版本的更多信息,請(qǐng)參見Python SDK歷史迭代版本。
向量字段類型的個(gè)數(shù)、維度等存在限制。更多信息,請(qǐng)參見多元索引限制。
由于多元索引服務(wù)端是多分區(qū)的,多元索引服務(wù)端的每個(gè)分區(qū)均會(huì)返回自身最鄰近的TopK個(gè)值并在協(xié)調(diào)節(jié)點(diǎn)進(jìn)行匯總,因此如果要使用Token翻頁(yè)獲取所有數(shù)據(jù),則獲取到的總行數(shù)與多元索引服務(wù)端的分區(qū)數(shù)有關(guān)。
參數(shù)
參數(shù) | 是否必選 | 說明 |
field_name | 是 | 向量字段名稱。 |
top_k | 是 | 查詢最鄰近的topK個(gè)值。關(guān)于最大值的說明請(qǐng)參見多元索引限制。 重要
|
float32_query_vector | 是 | 要查詢相似度的向量。 |
filter | 否 | 查詢過濾器,支持組合使用任意的非向量檢索的查詢條件。 |
示例
以下示例用于查詢表中與指定向量最鄰近的10個(gè)向量數(shù)據(jù),并且最鄰近的向量需要滿足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)
# 按照分?jǐn)?shù)排序。
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)
相關(guān)文檔
多元索引查詢類型包括精確查詢、多詞精確查詢、全匹配查詢、匹配查詢、短語(yǔ)匹配查詢、前綴查詢、范圍查詢、通配符查詢、多條件組合查詢、地理位置查詢、嵌套類型查詢、向量檢索和列存在性查詢,您可以選擇合適的查詢類型進(jìn)行多維度數(shù)據(jù)查詢。
如果要對(duì)結(jié)果集進(jìn)行排序或者翻頁(yè),您可以使用排序和翻頁(yè)功能來實(shí)現(xiàn)。具體操作,請(qǐng)參見排序和翻頁(yè)。
如果要按照某一列對(duì)結(jié)果集做折疊,使對(duì)應(yīng)類型的數(shù)據(jù)在結(jié)果展示中只出現(xiàn)一次,您可以使用折疊(去重)功能來實(shí)現(xiàn)。具體操作,請(qǐng)參見折疊(去重)。
如果要進(jìn)行數(shù)據(jù)分析,例如求最值、求和、統(tǒng)計(jì)行數(shù)等,您可以使用Search接口的統(tǒng)計(jì)聚合功能或者SQL查詢來實(shí)現(xiàn)。具體操作,請(qǐng)參見統(tǒng)計(jì)聚合和SQL查詢。
如果要快速導(dǎo)出數(shù)據(jù),而不關(guān)心整個(gè)結(jié)果集的順序時(shí),您可以使用ParallelScan接口和ComputeSplits接口實(shí)現(xiàn)多并發(fā)導(dǎo)出數(shù)據(jù)。具體操作,請(qǐng)參見并發(fā)導(dǎo)出數(shù)據(jù)。