檢索Doc
本文介紹如何通過Python SDK在Collection中進(jìn)行相似性檢索。
前提條件
已創(chuàng)建Cluster:創(chuàng)建Cluster。
已獲得API-KEY:API-KEY管理。
已安裝最新版SDK:安裝DashVector SDK。
接口定義
Collection.query(
vector: Optional[Union[List[Union[int, float]], np.ndarray, VectorQuery, Dict[str, VectorQuery]]] = None,
id: Optional[str] = None,
topk: int = 10,
filter: Optional[str] = None,
include_vector: bool = False,
partition: Optional[str] = None,
output_fields: Optional[List[str]] = None,
sparse_vector: Optional[Dict[int, float]] = None,
rerank: Optional[BaseRanker] = None,
async_req: False
) -> DashVectorResponse
使用示例
需要使用您的api-key替換示例中的YOUR_API_KEY、您的Cluster Endpoint替換示例中的YOUR_CLUSTER_ENDPOINT,代碼才能正常運(yùn)行。
本示例需要參考新建Collection-使用示例提前創(chuàng)建好名稱為
quickstart
的Collection,并參考插入Doc提前插入部分?jǐn)?shù)據(jù)。
import dashvector
import numpy as np
client = dashvector.Client(
api_key='YOUR_API_KEY',
endpoint='YOUR_CLUSTER_ENDPOINT'
)
collection = client.get(name='quickstart')
根據(jù)向量進(jìn)行相似性檢索
ret = collection.query(
vector=[0.1, 0.2, 0.3, 0.4]
)
# 判斷query接口是否成功
if ret:
print('query success')
print(len(ret))
for doc in ret:
print(doc)
print(doc.id)
print(doc.vector)
print(doc.fields)
ret = collection.query(
vector=[0.1, 0.2, 0.3, 0.4],
topk=100,
output_fields=['name', 'age'], # 僅返回name、age這2個(gè)Field
include_vector=True
)
根據(jù)主鍵(對(duì)應(yīng)的向量)進(jìn)行相似性檢索
ret = collection.query(
id='1'
)
# 判斷query接口是否成功
if ret:
print('query success')
print(len(ret))
for doc in ret:
print(doc)
print(doc.id)
print(doc.vector)
print(doc.fields)
ret = collection.query(
id='1',
topk=100,
output_fields=['name', 'age'], # 僅返回name、age這2個(gè)Field
include_vector=True
)
帶過濾條件的相似性檢索
# 根據(jù)向量或者主鍵進(jìn)行相似性檢索 + 條件過濾
ret = collection.query(
vector=[0.1, 0.2, 0.3, 0.4], # 向量檢索,也可設(shè)置主鍵檢索
topk=100,
filter='age > 18', # 條件過濾,僅對(duì)age > 18的Doc進(jìn)行相似性檢索
output_fields=['name', 'age'], # 僅返回name、age這2個(gè)Field
include_vector=True
)
帶有Sparse Vector的向量檢索
Sparse Vector(稀疏向量)可用于關(guān)鍵詞權(quán)重表示,實(shí)現(xiàn)帶關(guān)鍵詞感知能力的向量檢索。
# 根據(jù)向量進(jìn)行相似性檢索 + 稀疏向量
ret = collection.query(
vector=[0.1, 0.2, 0.3, 0.4], # 向量檢索
sparse_vector={1: 0.3, 20: 0.7}
)
通過過濾條件進(jìn)行匹配查詢
# 支持向量和主鍵都不傳入,那么只進(jìn)行條件過濾
ret = collection.query(
topk=100,
filter='age > 18', # 條件過濾,僅對(duì)age > 18的Doc進(jìn)行匹配查詢
output_fields=['name', 'age'], # 僅返回name、age這2個(gè)Field
include_vector=True
)
向量檢索高級(jí)參數(shù)
詳情可參考 向量檢索高級(jí)參數(shù)。
ret = collection.query(vector=VectorQuery(vector=[0.1,0.2,0.3,0.4], is_linear=False, ef=1000, radius=0.53))
多向量檢索
詳情可參考 多向量檢索
RrfRanker 示例
title_vector = [0.1, 0.2, 0.3, 0.4]
content_vector = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6]
vectors = {
"title": VectorQuery(vector=title_vector, num_candidates=10),
"content": VectorQuery(vector=content_vector),
}
ret = collection.query(
vector=vectors,
include_vector=False,
rerank=RrfRanker(rank_constant=100),
)
assert ret
print(ret.output)
WeightedRanker 示例
title_vector = [0.1, 0.2, 0.3, 0.4]
content_vector = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6]
vectors = {
"title": VectorQuery(vector=title_vector, num_candidates=10),
"content": VectorQuery(vector=content_vector),
}
ret = collection.query(
vector=vectors,
include_vector=False,
rerank=WeightedRanker(weights={"title": 1.0, "content": 1.0}),
)
assert ret
print(ret.output)
使用多向量的一個(gè)向量執(zhí)行檢索
title_vector = [0.1, 0.2, 0.3, 0.4]
ret = collection.query(vector={"title": VectorQuery(vector=title_vector, is_linear=False, ef=1000, radius=0.53)})
入?yún)⒚枋?/b>
vector
和id
兩個(gè)入?yún)⑿枰x一使用,如都不傳入,則僅完成條件過濾。
參數(shù) | 類型 | 默認(rèn)值 | 說明 |
vector(可選) | Optional[Union[List[Union[int, float]], np.ndarray, VectorQuery, Dict[str, VectorQuery]]] | None | 一個(gè)或多個(gè)向量數(shù)據(jù),或者使用VectorQuery執(zhí)行高級(jí)檢索,詳情參考向量檢索高級(jí)參數(shù) |
id(可選) | Optional[str] | None | 主鍵,表示根據(jù)主鍵對(duì)應(yīng)的向量進(jìn)行相似性檢索 |
topk(可選) | int | 10 | 返回topk相似性結(jié)果 |
filter(可選) | Optional[str] | None | 過濾條件,需滿足SQL where子句規(guī)范,詳見條件過濾檢索 |
include_vector(可選) | bool | False | 是否返回向量數(shù)據(jù) |
partition(可選) | Optional[str] | None | Partition名稱 |
output_fields(可選) | Optional[List[str]] | None | 默認(rèn)返回所有Fields |
sparse_vector(可選) | Optional[Dict[int, float]] | None | 稀疏向量 |
rerank | Optional[BaseRanker] | None | 融合排序參數(shù),詳見多向量檢索 |
async_req(可選) | bool | False | 是否異步 |
出參描述
返回結(jié)果為DashVectorResponse對(duì)象,DashVectorResponse對(duì)象中可獲取本次操作結(jié)果信息,如下表所示。
字段 | 類型 | 描述 | 示例 |
code | int | 返回值,參考返回狀態(tài)碼說明 | 0 |
message | str | 返回消息 | success |
request_id | str | 請(qǐng)求唯一id | 19215409-ea66-4db9-8764-26ce2eb5bb99 |
output | List[Doc] | 返回相似性檢索結(jié)果 | |
usage | 對(duì)Serverless實(shí)例(按量付費(fèi))集合的Doc檢索請(qǐng)求,成功后返回實(shí)際消耗的讀請(qǐng)求單元數(shù) |