一架梯子,一头程序猿,仰望星空!
Qdrant向量数据库教程 > 内容正文

Qdrant关联数据(Payload)


Payload(负载)

Qdrant的一个重要特性之一是能够在向量之外存储附加信息(存储管理业务属性)。在Qdrant术语中,这些附加信息被称为“负载”。

Qdrant允许您存储任何可以使用JSON表示的信息。

以下是一个典型负载的示例:

{
    "name": "夹克",
    "颜色": ["红色", "蓝色"],
    "数量": 10,
    "价格": 11.99,
    "地点": [
        {
            "经度": 52.5200, 
            "纬度": 13.4050
        }
    ],
    "评价": [
        {
            "用户": "爱丽丝",
            "分数": 4
        },
        {
            "用户": "鲍勃",
            "分数": 5
        }
    ]
}

Payload类型

除了存储负载外,Qdrant还允许您基于某些特定类型的值进行搜索。这个特性实现为搜索过程中的附加过滤器,并且可以让您在语义相似性之上嵌入自定义逻辑。

在过滤过程中,Qdrant将检查那些符合过滤条件的值的条件。如果存储的值类型不符合过滤条件,则被认为是未满足条件的。

例如,如果对字符串数据应用范围条件,将得到空输出。

然而,数组(相同类型的多个值)的处理稍有不同。当我们对数组应用过滤器时,如果数组内至少有一个值满足条件,则过滤器会成功。

过滤过程的详细讨论在过滤部分进行。

我们来看看Qdrant支持的数据类型:

整数

integer - 64位整数,范围从-92233720368547758089223372036854775807

单个和多个integer值的示例:

{
    "数量": 10,
    "尺码": [35, 36, 38]
}

浮点数

float - 64位浮点数。

单个和多个float值的示例:

{
    "价格": 11.99,
    "评分": [9.1, 9.2, 9.4]
}

布尔值

bool - 二进制值。等于truefalse

单个和多个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"
        }
    }
}


关联主题