向量檢索服務(wù)DashVector FAQ
1. Doc相關(guān)操作不指定Partition參數(shù)時(shí),具體行為是什么?
每個(gè)Collection創(chuàng)建時(shí),默認(rèn)創(chuàng)建一個(gè)名稱為default
的Partition,且該P(yáng)artition無(wú)法被刪除。當(dāng)Doc操作不指定Partition時(shí),實(shí)際相當(dāng)于使用default
Partition。例如:檢索Doc時(shí),若不指定Partition,則僅檢索default
Partition,不會(huì)檢索其他Partition的數(shù)據(jù)。
2. 插入Doc、更新Doc、插入或更新Doc 操作的區(qū)別是什嗎?
插入Doc:若插入Doc時(shí)若指定id已存在,已存在的Doc不會(huì)被覆蓋,本次插入Doc操作無(wú)效。
更新Doc:當(dāng)前行為是覆蓋已存在Doc,若更新Doc時(shí)若指定id不存在,則本次更新Doc操作無(wú)效。
插入或更新Doc:若插入Doc時(shí)若指定id已存在,則等同于更新Doc;指定id不存在,則等同于插入Doc。
3. 如何清空Collection?
當(dāng)前無(wú)清空Collection操作,可刪除Collection后再新建Collection。
4. Doc相關(guān)操作如何使用異步功能?
插入Doc、更新Doc、插入或更新Doc、檢索Doc、刪除Doc、獲取Doc操作皆可通過(guò)設(shè)置async_req=True
來(lái)使用異步的能力,如下所示:
# 異步寫(xiě)入1000次,dimension=20000,batch-size=8
batch_size = 8
loop = 1000
start = time.time()
async_results = [
collection.insert(
[(j + i * batch_size, np.random.rand(20000)) for j in range(batch_size)],
async_req=True
) for i in range(loop)
]
# 等待所有寫(xiě)入操作完成
print([async_result.get() for async_result in async_results])
print(f"async insert {loop} times with batch-size = {batch_size}, cost = {time.time() - start}")
# output:
# async insert 1000 times with batch-size = 8, cost = 31.13356590270996
# 對(duì)比同步寫(xiě)入(代碼略)
# sync insert 1000 times with batch-size = 8, cost = 408.63447427749634
異步操作易觸發(fā)約束與限制,請(qǐng)根據(jù)情況處理
5. Doc的Id是Collection級(jí)別唯一還是Partition級(jí)別唯一?
Partition級(jí)別唯一。同一個(gè)Collection下的不同Paritition,可以有Id相同的Doc存在。
6. 插入的向量數(shù)據(jù)為何有精度損失?
DashVector當(dāng)前支持單精度浮點(diǎn)數(shù)的向量數(shù)據(jù)類型,又稱FP32或float32。其精度范圍如下:
若傳入的向量數(shù)據(jù)精度超出上述表達(dá)范圍,將自動(dòng)近似到單精度表達(dá)范圍內(nèi)的最近值,也就發(fā)生了“精度損失”。
一個(gè)典型的場(chǎng)景:使用DashScope的ONE-PEACE多模態(tài)向量表征或通用文本向量的embedding能力生產(chǎn)向量時(shí),其Python SDK或Java SDK會(huì)將單精度(FP32)向量自動(dòng)轉(zhuǎn)換為雙精度(FP64)向量。若將該雙精度(FP64)向量插入至DashVector,就會(huì)產(chǎn)生偽精度損失(看起來(lái)小數(shù)部分變少,但實(shí)際精度沒(méi)有損失)。
7. 檢索Doc時(shí),是否支持指定多個(gè)Partition?
不支持。若需要查詢多個(gè)Partition,需進(jìn)行多次檢索Doc調(diào)用,每次調(diào)用僅可指定一個(gè)Partition。
8. Python安裝DashVector,命令執(zhí)行很慢,有什么辦法?
下載較慢是由于默認(rèn)從GitHub 下載,網(wǎng)絡(luò)速率較慢。在下載時(shí)可以臨時(shí)把下載源設(shè)置成國(guó)內(nèi)的。
例如設(shè)置成國(guó)內(nèi)阿里云的鏡像源:
打開(kāi)終端(對(duì)于Linux/macOS)或命令提示符/PowerShell(對(duì)于Windows)。
可以通過(guò)
-i
或--index-url
參數(shù)來(lái)指定源(即鏡像源),這樣可以加快下載速度。pip3 install dashvector -i https://mirrors.aliyun.com/pypi/simple/
9. Cluster是否支持SDK創(chuàng)建?
不支持。Cluster只能去管理控制臺(tái)購(gòu)買。可參考創(chuàng)建Cluster。
10. 在付費(fèi)的Cluster中創(chuàng)建Collection時(shí),是否有數(shù)量限制?
付費(fèi)Cluster最大可創(chuàng)建32個(gè)Collection,可創(chuàng)建的Partition數(shù)量隨規(guī)格遞增且與Collection數(shù)量無(wú)關(guān),可參考約束與限制。
11. 檢索Doc時(shí),過(guò)濾條件支持文本模糊檢索嗎?
向量檢索里面 filter 僅支持文本前綴匹配搜索。可以參考條件過(guò)濾檢索。
12. 向量檢索服務(wù)報(bào)錯(cuò):"Query qps exceeds limit 0 for collection ××××"
此報(bào)錯(cuò)是由于免費(fèi)的cluster使用http請(qǐng)求調(diào)用檢索服務(wù)時(shí),傳入的collectionName有誤造成。另外免費(fèi)的Cluster有QPS限制,付費(fèi)Cluster容量和QPS不做硬性限制。可參考約束與限制。
13. 使用SDK調(diào)用向量檢索服務(wù)時(shí)報(bào)錯(cuò):DashVectorSDK RPCHandler endpoint({××××}) is invalid and cannot contain protocol header
Client傳入的endpoint不對(duì),檢查參數(shù)是否正確。注意參數(shù)里不能帶"{}"。