Перейти к основному контенту
Tech Path Finder
КурсыИнтервьюКод-ревьюБлог
Tech Path Finder

Персонализированный путеводитель в IT. Квизы, мок-интервью, код ревью и аналитика прогресса.

@potapov_me

Платформа

  • Курсы
  • Прогресс
  • Мок-интервью
  • Код ревью
  • Живое ревью с ИИ
  • Тренажёр переговоров
  • Закладки

Контент

  • Блог
  • Главная
  • Обратная связь

Компания

  • О проекте
  • Тарифы
  • Условия использования
  • Конфиденциальность
  • Согласие на обработку данных
  • Cookie
  • Реквизиты

Аккаунт

  • Войти
  • Зарегистрироваться
  • Профиль

© 2026 Tech Path Finder. Все права защищены.

·ИП Потапов К.С.·Политика конфиденциальности·
Сделано с ❤️ в России
  1. Qdrant: полноценная векторная БД
qdrant

Qdrant: полноценная векторная БД

Qdrant для production-систем: REST API, сложные фильтры, асинхронный клиент, масштабирование. Развёртывание в Docker.

Qdrant: полноценная векторная БД

Qdrant для production-систем: REST API, сложные фильтры, асинхронный клиент, масштабирование. Развёртывание в Docker.

#Что вы сделаете в этой теме

За 60 минут вы:

  1. Развернёте Qdrant в Docker
  2. Научитесь создавать коллекции
  3. Освоите загрузку точек (векторы + метаданные)
  4. Используете сложные фильтры
  5. Попробуете асинхронный клиент

#Установка и запуск

#Docker (рекомендуется)

docker run -p 6333:6333 -p 6334:6334 \ -v $(pwd)/qdrant_storage:/qdrant/storage \ qdrant/qdrant
  • Порт 6333 — REST API
  • Порт 6334 — gRPC (быстрее)

#Python клиент

pip install qdrant-client

#Подключение

from 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())

#Фильтры Qdrant

ФильтрОписаниеПример
mustИВсе условия должны выполняться
must_notНЕУсловия не должны выполняться
shouldИЛИХотя бы одно условие
MatchValueТочное совпадение{"category": "web"}
MatchTextПолнотекстовый поискПоиск по тексту
RangeДиапазон{"price": {"gt": 100}}

#Чеклист

  • Развернули Qdrant в Docker
  • Создали коллекцию
  • Загрузили точки с метаданными
  • Выполнили поиск с фильтром
  • Попробовали асинхронный клиент

#Что дальше

Следующая тема — Гибридный поиск.

Далее: Гибридный поиск: векторный + BM25