目 录CONTENT

文章目录

Qdrant向量数据库的介绍(三)

Administrator
2025-06-23 / 0 评论 / 0 点赞 / 0 阅读 / 0 字

Qdrant部分概念

Colletion

集合是点的命名集合(带有有效载荷的向量),可以在其中进行搜索。同一集合中每个点的向量必须具有相同的维度,并使用单一指标进行比较。命名向量可用于在单个点中包含多个向量,每个向量可以有自己的维度和指标要求。

距离指标用于衡量向量之间的相似性。指标的选择取决于获取向量的方式,特别是神经网络编码器训练的方法。

Qdrant 支持以下最常见的指标类型

点积:Dot - [维基]
余弦相似度:Cosine - [维基]
欧几里得距离:Euclid - [维基]
曼哈顿距离:Manhattan - [维基]
每个集合还使用自己的参数集,用于控制集合优化、索引构建和空间清理。这些设置可以通过相应的请求随时更改

Pont

// This is a simple point
{
    "id": 129,
    "vector": [0.1, 0.2, 0.3, 0.4],
    "payload": {"color": "red"},
}

分别在向量搜索和向量过滤阶段使用
支持使用64位无符号整数和UUID作为点ID

向量

Qdrant 中的每个点可以有一个或多个vector


将不止一种类型的向量附加到单个点

密集向量


// A piece of a real-world dense vector
[
    -0.013052909,
    0.020387933,
    -0.007869,
    -0.11111383,
    -0.030188112,
    -0.0053388323,
    0.0010654867,
    0.072027855,
    -0.04167721,
    0.014839341,
    -0.032948174,
    -0.062975034,
    -0.024837125,
    ....
]

稀疏向量

多向量

from qdrant_client import QdrantClient, models

client = QdrantClient(url="http://localhost:6333")

client.upsert(
    collection_name="{collection_name}",
    points=[
        models.PointStruct(
            id=1,
            vector=[
                [-0.013,  0.020, -0.007, -0.111],
                [-0.030, -0.055,  0.001,  0.072],
                [-0.041,  0.014, -0.032, -0.062]
            ],
        )
    ],
)

命名向量

支持插入多个向量到一个点

from qdrant_client import QdrantClient, models

client = QdrantClient(url="http://localhost:6333")

client.create_collection(
    collection_name="{collection_name}",
    vectors_config={
        "image": models.VectorParams(size=4, distance=models.Distance.DOT),
        "text": models.VectorParams(size=5, distance=models.Distance.COSINE),
    },
    sparse_vectors_config={"text-sparse": models.SparseVectorParams()},
)
client.upsert(
    collection_name="{collection_name}",
    points=[
        models.PointStruct(
            id=1,
            vector={
                "image": [0.9, 0.1, 0.1, 0.2],
                "text": [0.4, 0.7, 0.1, 0.8, 0.1],
                "text-sparse": {
                    "indices": [1, 3, 5, 7],
                    "values": [0.1, 0.2, 0.3, 0.4],
                },
            },
        ),
    ],
)
from qdrant_client import QdrantClient

client = QdrantClient(url="http://localhost:6333")

client.query_points(
    collection_name="{collection_name}",
    query=[0.2, 0.1, 0.9, 0.7],
    using="image",
    limit=3,
)

payload

和向量有关的附加信息

{
    "name": "jacket",
    "colors": ["red", "blue"],
    "count": 10,
    "price": 11.99,
    "locations": [
        {
            "lon": 52.5200, 
            "lat": 13.4050
        }
    ],
    "reviews": [
        {
            "user": "alice",
            "score": 4
        },
        {
            "user": "bob",
            "score": 5
        }
    ]
}
from qdrant_client import QdrantClient, models

client = QdrantClient(url="http://localhost:6333")

client.upsert(
    collection_name="{collection_name}",
    points=[
        models.PointStruct(
            id=1,
            vector=[0.05, 0.61, 0.76, 0.74],
            payload={
                "city": "Berlin",
                "price": 1.99,
            },
        ),
        models.PointStruct(
            id=2,
            vector=[0.19, 0.81, 0.75, 0.11],
            payload={
                "city": ["Berlin", "London"],
                "price": 1.99,
            },
        ),
        models.PointStruct(
            id=3,
            vector=[0.36, 0.55, 0.47, 0.94],
            payload={
                "city": ["Berlin", "Moscow"],
                "price": [1.99, 2.99],
            },
        ),
    ],
)

搜索


有点复杂:还没有细看
https://qdrant.org.cn/documentation/concepts/search/

过滤

使用 Qdrant,您可以在搜索或检索点时设置条件。例如,可以对点的 payload 和 id 都施加条件。

当无法在嵌入中表达对象的所有特征时,设置附加条件非常重要。例如各种业务需求:库存可用性、用户位置或期望的价格范围

优化器

没细看
Qdrant的优化器(Optimizer)是其核心组件之一,主要负责管理和优化向量索引的构建与维护,以提高搜索效率、减少资源消耗并保持系统高性能

存储

Qdrant 支持两种类型的载荷存储:内存存储 (InMemory) 和磁盘存储 (OnDisk)。

内存载荷存储的组织方式与内存向量相同。载荷数据在服务启动时加载到 RAM 中,而磁盘和 Gridstore 仅用于持久化。这种类型的存储速度相当快,但可能需要大量空间来将所有数据保存在 RAM 中,特别是当载荷附带大值时 - 例如文本摘要甚至图像。

对于大型载荷值,使用磁盘载荷存储可能更好。

一个集合内的所有数据被分成段(segments)。每个段都有独立的向量和载荷存储以及索引。

存储在段中的数据通常不重叠。但是,将同一点存储在不同的段中不会引起问题,因为搜索机制包含去重功能。

段由向量和载荷存储、向量和载荷索引以及 ID 映射器组成,ID 映射器存储内部 ID 和外部 ID 之间的关系。

根据使用的存储和索引类型,一个段可以是可附加的(appendable)或不可附加的(non-appendable)。你可以在可附加的段中自由添加、删除和查询数据。不可附加的段只能读取和删除数据。

集合中段的配置可以不同且相互独立,但一个集合中必须至少存在一个“可附加的”段

索引

载荷索引

HNSW向量索引

优化Qdrant性能的3种场景

https://qdrant.org.cn/documentation/guides/optimize/
高速搜索和低内存使用
高精度和低内存使用
高精度和高速搜索

0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区