分享
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。
向量检索服务DashVector在设计上支持Schema Free,在插入Doc、更新Doc、插入或更新Doc时,可设置任意KeyValue结构的字段(Field),如下所示:
Python示例:
```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示例:
```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示例:
```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时设置。
有疑问加站长微信联系(非本文作者))
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
关注微信758 次点击
上一篇:向量检索服务-应用场景
下一篇:条件过滤检索
添加一条新回复
(您需要 后才能回复 没有账号 ?)
- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传