全部產品
Search
文件中心

Vector Retrieval Service:檢索Doc

更新時間:Sep 05, 2024

本文介紹如何通過Python SDK在Collection中進行相似性檢索。

前提條件

介面定義

Collection.query(
    vector: Optional[Union[List[Union[int, float]], np.ndarray]] = 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,
    async_req: False
) -> DashVectorResponse

使用樣本

說明
  1. 需要使用您的api-key替換樣本中的YOUR_API_KEY、您的Cluster Endpoint替換樣本中的YOUR_CLUSTER_ENDPOINT,代碼才能正常運行。

  2. 本樣本需要參考建立Collection-使用樣本提前建立好名稱為quickstart的Collection,並參考插入Doc提前插入部分資料。

import dashvector
import numpy as np

client = dashvector.Client(
    api_key='YOUR_API_KEY',
    endpoint='YOUR_CLUSTER_ENDPOINT'
)
collection = client.get(name='quickstart')

根據向量進行相似性檢索

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個Field
    include_vector=True
)

根據主鍵(對應的向量)進行相似性檢索

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個Field
    include_vector=True
)

帶過濾條件的相似性檢索

# 根據向量或者主鍵進行相似性檢索 + 條件過濾
ret = collection.query(
    vector=[0.1, 0.2, 0.3, 0.4],   # 向量檢索,也可設定主鍵檢索
    topk=100,
    filter='age > 18',             # 條件過濾,僅對age > 18的Doc進行相似性檢索
    output_fields=['name', 'age'], # 僅返回name、age這2個Field
    include_vector=True
)

帶有Sparse Vector的向量檢索

說明

Sparse Vector(稀疏向量)可用於關鍵詞權重表示,實現帶關鍵詞感知能力的向量檢索

# 根據向量進行相似性檢索 + 稀疏向量
ret = collection.query(
    vector=[0.1, 0.2, 0.3, 0.4],   # 向量檢索
    sparse_vector={1: 0.3, 20: 0.7}
)

通過過濾條件進行匹配查詢

# 支援向量和主鍵都不傳入,那麼只進行條件過濾
ret = collection.query(
    topk=100,
    filter='age > 18',             # 條件過濾,僅對age > 18的Doc進行匹配查詢
    output_fields=['name', 'age'], # 僅返回name、age這2個Field
    include_vector=True
)

入參描述

說明

vectorid兩個入參需要二選一使用,如都不傳入,則僅完成條件過濾。

參數

類型

預設值

說明

vector(可選)

Optional[Union[List[Union[int, float]], np.ndarray]]

None

向量資料

id(可選)

Optional[str]

None

主鍵,表示根據主鍵對應的向量進行相似性檢索

topk(可選)

int

10

返回topk相似性結果

filter(可選)

Optional[str]

None

過濾條件,需滿足SQL where子句規範,詳見條件過濾檢索

include_vector(可選)

bool

False

是否返迴向量資料

partition(可選)

Optional[str]

None

Partition名稱

output_fields(可選)

Optional[List[str]]

None

預設返回所有Fields

sparse_vector(可選)

Optional[Dict[int, float]]

None

稀疏向量

async_req(可選)

bool

False

是否非同步

出參描述

說明

返回結果為DashVectorResponse對象,DashVectorResponse對象中可擷取本次操作結果資訊,如下表所示。

欄位

類型

描述

樣本

code

int

傳回值,參考返回狀態代碼說明

0

message

str

返回訊息

success

request_id

str

請求唯一id

19215409-ea66-4db9-8764-26ce2eb5bb99

output

List[Doc]

返回相似性檢索結果