向量檢索服務DashVector在設計上支持Schema Free,在插入Doc、更新Doc、插入或更新Doc時,可設置任意KeyValue結構的字段(Field),如下所示:
collection.insert(
Doc(
id='1',
vector=np.random.rand(4),
fields={
'name': 'zhangsan',
'weight':70.0,
'age':30,
'anykey1': 'anyvalue',
'anykey2': 1,
'anykey3': True,
'anykey4': 3.1415926
... ...
}
)
)
說明
更多的Fields將消耗更多的資源(如內存、磁盤)
Field支持的數據類型
當前DashVector支持Python的4種基礎數據類型:
str
float
int
bool
重要
Python的int類型可表達無限大小的整數,當前DashVector僅支持32位整數,范圍為-2,147,483,648~2,147,483,647,需要用戶自行保證數據未溢出。
檢索時通過Field進行條件過濾
插入Doc、更新Doc、插入或更新Doc時所設置的任意KeyValue結構的字段(Field),可在檢索Doc進行條件過濾,如下所示:
ret = collection.query(
vector=[0.1, 0.2, 0.3, 0.4],
filter='(age > 18 and anykey2 = 1) or (name like "zhang%" and anykey3 = false)'
)
說明
更多的Fields在檢索時將消耗更多的資源(如CPU),同時復雜的filter表達式也將消耗更多的時間開銷才能獲取到結果
提前定義Field Schema的優勢
在新建Collection的時候,可以預先定義Field Schema,如下所示:
ret = client.create(
name='complex',
dimension=4,
fields_schema={'name': str, 'weight': float, 'age': int}
)
這樣做的主要收益有如下3點:
通常而言,對于確定性的、大多數Doc都具有的Field,建議在新建Collection的時候預先進行定義;對于無法提前預知、僅少量Doc獨有的Field,可以在插入Doc時設置。
文檔內容是否對您有幫助?