Schema Free

简介: 用预先定义的Field将会有更短的时间开销和更少的CPU算力开销。

免费体验阿里云高性能向量检索服务https://www.aliyun.com/product/ai/dashvector


向量检索服务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点:

  • 更快的检索速度条件过滤时,用预先定义的Field将会有更短的时间开销和更少的CPU算力开销。
  • 更少的内存、磁盘占用:未预先定义的Field,需要存储Field名称和Field值,而预先定义的Field仅存储Field值即可。
  • filter预校验条件过滤时,预先定义的Field会校验filter的语法,当遇到类型不匹配时,会快速失败、立即返回;而未预先定义的Field,无法知道“正确”数据类型,无法进行预校验。


通常而言,对于确定性的、大多数Doc都具有的Field,建议在新建Collection的时候预先进行定义;对于无法提前预知、仅少量Doc独有的Field,可以在插入Doc时设置。


向量检索服务 DashVector 免费试用进行中,玩转大模型搜索,快来试试吧~

了解更多信息,请点击:https://www.aliyun.com/product/ai/dashvector

相关文章
|
索引
Truncate Table的时候不管是用drop storage 或reuse storage都会将HWM重新设置到第一
A, B 为两个Table . A, B 的数据分别放在 erp_data  表空间下  A, B 的索引分别放在 erp_indx  表空间下   那么我们使用下面的两个语句删除两个表中的数据 Truncate table A  drop    storage  ;...
803 0
|
机器学习/深度学习 C++ Go
|
SQL Oracle 关系型数据库