Qdrant для production-систем: REST API, сложные фильтры, асинхронный клиент, масштабирование. Развёртывание в Docker.
Qdrant для production-систем: REST API, сложные фильтры, асинхронный клиент, масштабирование. Развёртывание в Docker.
За 60 минут вы:
docker run -p 6333:6333 -p 6334:6334 \
-v $(pwd)/qdrant_storage:/qdrant/storage \
qdrant/qdrantpip install qdrant-clientfrom qdrant_client import QdrantClient
# Подключение к серверу
client = QdrantClient(host="localhost", port=6333)
# Или локальный режим (без сервера)
# client = QdrantClient(":memory:")from qdrant_client.models import Distance, VectorParams
client.create_collection(
collection_name="documents",
vectors_config=VectorParams(
size=384, # Размерность векторов
distance=Distance.COSINE # Метрика
)
)from qdrant_client.models import PointStruct
from sentence_transformers import SentenceTransformer
model = SentenceTransformer('all-MiniLM-L6-v2')
documents = [
"Python — язык программирования",
"Django — веб-фреймворк",
"Flask — микрофреймворк"
]
embeddings = model.encode(documents)
# Создание точек
points = [
PointStruct(
id=i,
vector=embedding.tolist(),
payload={
"text": doc,
"category": "web" if "Flask" in doc or "Django" in doc else "programming"
}
)
for i, (doc, embedding) in enumerate(zip(documents, embeddings))
]
# Загрузка
client.upsert(
collection_name="documents",
points=points
)from qdrant_client.models import Filter, FieldCondition, MatchValue
# Поиск с фильтром
results = client.search(
collection_name="documents",
query_vector=model.encode(["веб-разработка"]).tolist(),
query_filter=Filter(
must=[
FieldCondition(
key="category",
match=MatchValue(value="web")
)
]
),
limit=2
)
for hit in results:
print(f"Score: {hit.score:.3f}, Text: {hit.payload['text']}")from qdrant_client import AsyncQdrantClient
import asyncio
async def main():
client = AsyncQdrantClient(host="localhost", port=6333)
results = await client.search(
collection_name="documents",
query_vector=model.encode(["запрос"]).tolist(),
limit=5
)
await client.close()
return results
results = asyncio.run(main())| Фильтр | Описание | Пример |
|---|---|---|
must | И | Все условия должны выполняться |
must_not | НЕ | Условия не должны выполняться |
should | ИЛИ | Хотя бы одно условие |
MatchValue | Точное совпадение | {"category": "web"} |
MatchText | Полнотекстовый поиск | Поиск по тексту |
Range | Диапазон | {"price": {"gt": 100}} |
Следующая тема — Гибридный поиск.
Вопросы ещё не добавлены
Вопросы для этой подтемы ещё не добавлены.