釋放 AI 的強大力量

100 萬免費代幣

88% 價格優惠

立即啟用
本文由簡體中文內容自動轉碼而成。阿里雲不保證此自動轉碼的準確性、完整性及時效性。本文内容請以簡體中文版本為準。

Schema Free

更新時間:2024-07-13 00:20

向量檢索服務DashVector在設計上支援Schema Free,在插入Doc更新Doc插入或更新Doc時,可設定任意KeyValue結構的欄位(Field),如下所示:

Python
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進行條件過濾,如下所示:

Python
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,如下所示:

Python
ret = client.create(
    name='complex', 
    dimension=4, 
    fields_schema={'name': str, 'weight': float, 'age': int}
)

這樣做的主要收益有如下3點:

  • 更快的檢索速度條件過濾時,用預先定義的Field將會有更短的時間開銷和更少的CPU算力開銷

  • 更少的記憶體、磁碟佔用:未預先定義的Field,需要儲存Field名稱和Field值,而預先定義的Field僅儲存Field值即可

  • filter預校正條件過濾時,預先定義的Field會校正filter的文法,當遇到類型不符時,會快速失敗、立即返回;而未預先定義的Field,無法知道“正確”資料類型,無法進行預校正

通常而言,對於確定性、大多數Doc都具有的Field,建議在建立Collection的時候預先進行定義;對於無法提前預知、僅少量Doc專屬的Field,可以在插入Doc時設定。

    文檔反饋
    phone 聯絡我們

    立即和Alibaba Cloud在線服務人員進行交談,獲取您想了解的產品信息以及最新折扣。

    alicare alicarealicarealicare