Qdrant 快速开始

Qdrant “是一个向量相似性搜索引擎,它提供了一个生产就绪的服务,具有方便的 API,可以通过额外的有效负载来存储、搜索和管理点(即向量)。”您可以将有效负载视为附加信息,可以帮助您深入搜索并接收可以提供给用户的有用信息。

官方文档:https://qdrant.tech/documentation/quick-start/

1. 安装 Qdrant 客户端

from qdrant_client import QdrantClient

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

2. 导入 Qdrant

import chromadb
chroma_client = chromadb.Client()

3. 创建 Collection

您将把所有矢量数据存储在 Qdrant 集合中。我们就这样称呼它吧test_collection。该集合将使用点积距离度量来比较向量。

from qdrant_client.models import Distance, VectorParams

client.create_collection(
    collection_name="test_collection",
    vectors_config=VectorParams(size=4, distance=Distance.DOT),
)

4. 添加向量

Qdrant 将存储您的文本,并自动处理标记化、嵌入和索引。

from qdrant_client.models import PointStruct

operation_info = 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": "London"}),
        PointStruct(id=3, vector=[0.36, 0.55, 0.47, 0.94], payload={"city": "Moscow"}),
        PointStruct(id=4, vector=[0.18, 0.01, 0.85, 0.80], payload={"city": "New York"}),
        PointStruct(id=5, vector=[0.24, 0.18, 0.22, 0.44], payload={"city": "Beijing"}),
        PointStruct(id=6, vector=[0.35, 0.08, 0.11, 0.44], payload={"city": "Mumbai"}),
    ],
)

print(operation_info)

打印结果:

operation_id=0 status=<UpdateStatus.COMPLETED: 'completed'>

5.查询

让我们问一个基本问题 - 我们存储的哪个向量与查询向量最相似[0.2, 0.1, 0.9, 0.7]?

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

print(search_result)

打印结果:

ScoredPoint(id=4, version=0, score=1.362, payload={"city": "New York"}, vector=None),
ScoredPoint(id=1, version=0, score=1.273, payload={"city": "Berlin"}, vector=None),
ScoredPoint(id=3, version=0, score=1.208, payload={"city": "Moscow"}, vector=None)

结果以相似度递减的顺序返回。请注意,默认情况下,这些结果中缺少有效负载和矢量数据。有关如何启用它的信息,请参阅结果中的有效负载和向量。

6.添加过滤器

我们可以通过按有效负载过滤来进一步缩小结果范围。让我们查找包含“London”的最接近的结果。

from qdrant_client.models import Filter, FieldCondition, MatchValue

search_result = client.search(
    collection_name="test_collection",
    query_vector=[0.2, 0.1, 0.9, 0.7],
    query_filter=Filter(
        must=[FieldCondition(key="city", match=MatchValue(value="London"))]
    ),
    with_payload=True,
    limit=3,
)

print(search_result)

您刚刚进行了矢量搜索。您将向量加载到数据库中并使用您自己的向量查询数据库。 Qdrant 找到最接近的结果并向您提供相似度分数。

作者:Ddd4j  创建时间:2024-04-16 12:09
最后编辑:Ddd4j  更新时间:2026-05-30 20:16