Payload(负载)
Qdrant的一个重要特性之一是能够在向量之外存储附加信息(存储管理业务属性)。在Qdrant术语中,这些附加信息被称为“负载”。
Qdrant允许您存储任何可以使用JSON表示的信息。
以下是一个典型负载的示例:
{
"name": "夹克",
"颜色": ["红色", "蓝色"],
"数量": 10,
"价格": 11.99,
"地点": [
{
"经度": 52.5200,
"纬度": 13.4050
}
],
"评价": [
{
"用户": "爱丽丝",
"分数": 4
},
{
"用户": "鲍勃",
"分数": 5
}
]
}
Payload类型
除了存储负载外,Qdrant还允许您基于某些特定类型的值进行搜索。这个特性实现为搜索过程中的附加过滤器,并且可以让您在语义相似性之上嵌入自定义逻辑。
在过滤过程中,Qdrant将检查那些符合过滤条件的值的条件。如果存储的值类型不符合过滤条件,则被认为是未满足条件的。
例如,如果对字符串数据应用范围条件,将得到空输出。
然而,数组(相同类型的多个值)的处理稍有不同。当我们对数组应用过滤器时,如果数组内至少有一个值满足条件,则过滤器会成功。
过滤过程的详细讨论在过滤部分进行。
我们来看看Qdrant支持的数据类型:
整数
integer
- 64位整数,范围从-9223372036854775808
到9223372036854775807
。
单个和多个integer
值的示例:
{
"数量": 10,
"尺码": [35, 36, 38]
}
浮点数
float
- 64位浮点数。
单个和多个float
值的示例:
{
"价格": 11.99,
"评分": [9.1, 9.2, 9.4]
}
布尔值
bool
- 二进制值。等于true
或false
。
单个和多个bool
值的示例:
{
"已送达": true,
"回复": [false, false, true, false]
}
关键字
keyword
- 字符串值。
单个和多个keyword
值的示例:
{
"名字": "爱丽丝",
"朋友们": [
"鲍勃",
"伊娃",
"杰克"
]
}
地理坐标
geo
用于表示地理坐标。
单个和多个geo
值的示例:
{
"地点": {
"经度": 52.5200,
"纬度": 13.4050
},
"城市": [
{
"经度": 51.5072,
"纬度": 0.1276
},
{
"经度": 40.7128,
"纬度": 74.0060
}
]
}
坐标应该被描述为一个包含两个字段的对象: 经度
- 表示经度,纬度
- 表示纬度。
创建带有负载的点
REST API (架构)
PUT /collections/{collection_name}/points
{
"points": [
{
"id": 1,
"vector": [0.05, 0.61, 0.76, 0.74],
"payload": {"城市": "柏林", "价格": 1.99}
},
{
"id": 2,
"vector": [0.19, 0.81, 0.75, 0.11],
"payload": {"城市": ["柏林", "伦敦"], "价格": 1.99}
},
{
"id": 3,
"vector": [0.36, 0.55, 0.47, 0.94],
"payload": {"城市": ["柏林", "莫斯科"], "价格": [1.99, 2.99]}
}
]
}
更新负载
设置负载
REST API(Schema):
POST /collections/{collection_name}/points/payload
{
"payload": {
"property1": "字符串",
"property2": "字符串"
},
"points": [
0, 3, 100
]
}
删除负载
此方法从指定的点中删除指定的负载键
REST API(Schema):
POST /collections/{collection_name}/points/payload/delete
{
"keys": ["颜色", "价格"],
"points": [0, 3, 100]
}
清除负载
此方法从指定的点中删除所有负载键
REST API(Schema):
POST /collections/{collection_name}/points/payload/clear
{
"points": [0, 3, 100]
}
您还可以使用
models.FilterSelector
来删除与给定过滤条件匹配的点,而不是提供ID。
负载索引
为了更有效地进行过滤搜索,Qdrant允许您通过指定字段的名称和类型来为负载字段创建索引。
索引字段也会影响向量索引。
在实践中,我们建议在那些可能最多限制结果的字段上创建索引。例如,使用对象ID的索引将比使用颜色的索引更高效,因为对象ID对于每个记录是唯一的,而颜色只有几个可能的值。
在涉及多个字段的复合查询中,Qdrant将尝试首先使用最具限制性的索引。
要为字段创建索引,可以使用以下内容:
REST API(Schema)
PUT /collections/{collection_name}/index
{
"field_name": "要创建索引的字段名称",
"field_schema": "keyword"
}
索引使用标志在负载模式中与 collection info API 一起显示。
负载模式示例:
{
"payload_schema": {
"property1": {
"data_type": "keyword"
},
"property2": {
"data_type": "integer"
}
}
}