960 字
5 分钟
Qdrant 快速入门
2025-04-09

Qdrant(发音为”quadrant”)是一个用Rust编写的向量相似度搜索引擎和向量数据库。它提供了一个生产级服务,带有便捷的API用于存储、搜索和管理点(带有额外payload的向量)。

核心特性#

  1. Qdrant专为扩展过滤支持而设计,使其适用于各种基于神经网络或语义的匹配、多面搜索等应用。
  2. 由于使用Rust编写,即使在高负载下也能保持快速和可靠。
  3. 支持向量附加任何JSON格式的payload,允许基于这些payload的值进行存储和过滤。
  4. payload支持多种数据类型和查询条件,包括关键词匹配、全文过滤、数值范围、地理位置等。

快速开始(Docker)#

1. 获取并运行Docker镜像#

# 拉取最新的预构建镜像
docker pull qdrant/qdrant

# 使用默认配置运行
docker run -p 6333:6333 qdrant/qdrant

运行后,Qdrant将在默认端口6333上可访问,并使用默认配置。数据将存储在docker容器内的默认路径中。如果要将数据持久化到本地目录,可以挂载卷。

2. 创建集合#

首先创建一个使用点积(Dot Product)相似度度量的集合:

curl -X PUT 'http://localhost:6333/collections/test_collection' \
-H 'Content-Type: application/json' \
--data-raw '{
  "vectors": {
    "size": 4,
    "distance": "Dot"
  }
}'

预期响应:

{
  "result": true,
  "status": "ok",
  "time": 0.031095451
}

3. 添加向量点#

向集合中添加包含向量和payload的点:

curl -L -X PUT 'http://localhost:6333/collections/test_collection/points?wait=true' \
-H 'Content-Type: application/json' \
--data-raw '{
  "points": [
    {"id": 1, "vector": [0.05, 0.61, 0.76, 0.74], "payload": {"city": "Berlin"}},
    {"id": 2, "vector": [0.19, 0.81, 0.75, 0.11], "payload": {"city": ["Berlin", "London"] }},
    {"id": 3, "vector": [0.36, 0.55, 0.47, 0.94], "payload": {"city": ["Berlin", "Moscow"] }},
    {"id": 4, "vector": [0.18, 0.01, 0.85, 0.80], "payload": {"city": ["London", "Moscow"] }},
    {"id": 5, "vector": [0.24, 0.18, 0.22, 0.44], "payload": {"count": [0] }},
    {"id": 6, "vector": [0.35, 0.08, 0.11, 0.44]}
  ]
}'

4. 基本向量搜索#

执行简单的向量相似度搜索,返回与查询向量最相似的3个点:

curl -L -X POST 'http://localhost:6333/collections/test_collection/points/search' \
-H 'Content-Type: application/json' \
--data-raw '{
  "vector": [0.2, 0.1, 0.9, 0.7],
  "limit": 3
}'

预期响应:

{
  "result": [
    {
      "id": 4,
      "score": 1.362
    },
    {
      "id": 1,
      "score": 1.273
    },
    {
      "id": 3,
      "score": 1.208
    }
  ],
  "status": "ok",
  "time": 0.000055785
}

5. 使用过滤条件的向量搜索#

通过添加过滤条件,可以限制搜索结果仅包含符合特定条件的点:

curl -L -X POST 'http://localhost:6333/collections/test_collection/points/search' \
-H 'Content-Type: application/json' \
--data-raw '{
  "filter": {
    "should": [
      {
        "key": "city",
        "match": {
          "value": "London"
        }
      }
    ]
  },
  "vector": [0.2, 0.1, 0.9, 0.7],
  "top": 3
}'

使用Python客户端#

Qdrant提供了多种客户端库,其中Python客户端提供了同步和异步请求的类型定义,以及一些便捷的辅助方法。

安装#

pip install qdrant-client

创建集合#

from qdrant_client import QdrantClient
from qdrant_client.http.models import Distance, VectorParams

client = QdrantClient("localhost", port=6333)
client.recreate_collection(
    collection_name="test_collection",
    vectors_config=VectorParams(size=4, distance=Distance.DOT),
)

添加点#

from qdrant_client.http.models import PointStruct

client.upsert(
    collection_name="test_collection",
    wait=True,
    points=[
        PointStruct(id=1, vector=[0.05, 0.61, 0.76, 0.74], payload={"city": "Berlin"}),
        PointStruct(id=2, vector=[0.19, 0.81, 0.75, 0.11], payload={"city": ["Berlin", "London"]}),
        PointStruct(id=3, vector=[0.36, 0.55, 0.47, 0.94], payload={"city": ["Berlin", "Moscow"]}),
        PointStruct(id=4, vector=[0.18, 0.01, 0.85, 0.80], payload={"city": ["London", "Moscow"]}),
        PointStruct(id=5, vector=[0.24, 0.18, 0.22, 0.44], payload={"count": [0]}),
        PointStruct(id=6, vector=[0.35, 0.08, 0.11, 0.44])
    ]
)

搜索#

search_result = client.search(
    collection_name="test_collection",
    query_vector=[0.2, 0.1, 0.9, 0.7],
    limit=3
)

内存模式(适用于开发和测试)#

Python客户端允许在不运行Qdrant服务器的情况下以本地模式运行相同的代码:

from qdrant_client import QdrantClient

# 使用内存模式,适用于开发和原型设计
client = QdrantClient(":memory:")

# 或者持久化到磁盘
# client = QdrantClient(path="path/to/db")

生产环境配置#

在生产环境中,可以通过配置文件覆盖默认设置。默认配置文件位于config/config.yaml,在生产环境中可以通过在docker容器内提供/qdrant/config/production.yaml来覆盖值。

在真正的生产环境中,应通过设置service.apiKey启用身份验证。对于生产环境,还应考虑设置--read-only--user=1000:2000以进一步保护Qdrant实例。或者使用Helm图表或Qdrant Cloud,它们默认设置这些值。

使用自定义配置运行Docker:

docker run -p 6333:6333 \
-v $(pwd)/path/to/data:/qdrant/storage \
-v $(pwd)/path/to/custom_config.yaml:/qdrant/config/production.yaml \
qdrant/qdrant
Qdrant 快速入门
https://blog.lpkt.cn/posts/qdrant-quickstart/
作者
lollipopkit
发布于
2025-04-09
许可协议
CC BY-NC-SA 4.0