## Что такое семантический поиск
Семантический поиск находит документы по ==смысловой близости== к запросу, а не по совпадению ключевых слов. Текст преобразуется в числовой вектор ([[Embeddings|embedding]]), и поиск сводится к нахождению ближайших векторов в многомерном пространстве.
```mermaid
flowchart LR
Q[Запрос] --> E1[Encoder]
E1 --> V1[Вектор запроса]
D[Документы] --> E2[Encoder]
E2 --> V2[Векторы документов]
V1 --> S[Similarity Search]
V2 --> S
S --> R[Результаты]
```
---
## Способы семантического поиска
### 1. [[Dense Retrieval]] (Embedding-based Search)
Текст → плотный вектор → поиск ближайших. Работает с синонимами и перефразировками, но плохо ищет редкие термины.
### 2. [[Sparse Retrieval]] (BM25, SPLADE)
Разреженные векторы на основе частоты слов. BM25 — классический лексический поиск, SPLADE — нейросетевое расширение с семантикой.
### 3. [[Hybrid Search]]
==Лучший выбор для production==. Комбинация dense + sparse покрывает слабости обоих методов.
### 4. [[Re-ranking]]
Двухэтапный поиск: быстрый retrieval → точный cross-encoder. Значительно повышает качество top-K результатов.
### 5. [[Knowledge Graph Search]]
Сущности и связи в графе. Лучше для сложных вопросов о связях между объектами.
### 6. [[ColBERT]] (Late Interaction)
Сравнение на уровне токенов. Баланс между качеством cross-encoder и скоростью bi-encoder.
### 7. [[Generative Retrieval]]
> [!WARNING] Экспериментальный
> LLM напрямую генерирует ID документа. Пока не готово для production.
---
## Сравнение подходов ^comparison
Какой способ выбрать — зависит от задачи:
| Метод | Семантика | Точные термины | Скорость | Качество |
|-------|-----------|----------------|----------|----------|
| [[Dense Retrieval]] | +++ | - | ++ | ++ |
| [[Sparse Retrieval\|BM25]] | - | +++ | +++ | + |
| [[Hybrid Search]] | +++ | ++ | + | +++ |
| + [[Re-ranking]] | +++ | ++ | - | ++++ |
| [[ColBERT]] | +++ | + | ++ | +++ |
| [[Knowledge Graph Search]] | ++ | + | + | ++ |
---
## Рекомендации по выбору ^recommendations
> [!TIP] Для RAG-системы
> См. [[RAG#Компоненты RAG|рекомендации в RAG]]
> [!TIP] Для поиска по документации
> 1. [[Sparse Retrieval|BM25]] если термины технические и уникальные
> 2. [[Dense Retrieval]] если пользователи формулируют вопросы по-разному
> 3. [[Hybrid Search]] — универсальный выбор
---
## Векторные базы данных ^vector-databases
Где хранить векторы для поиска:
| База | Тип | Гибридный поиск | Особенности |
|------|-----|-----------------|-------------|
| **Qdrant** | Self-hosted / Cloud | + | Rust, быстрый, богатая фильтрация |
| **Pinecone** | Managed | + | Serverless, простой старт |
| **Weaviate** | Self-hosted / Cloud | + | GraphQL API, модули ML |
| **Milvus** | Self-hosted | + | Масштабируемый, GPU |
| **ChromaDB** | Embedded | - | Для прототипов, Python-native |
| **pgvector** | PostgreSQL extension | - | Если уже есть Postgres |
| **FAISS** | Library | - | Facebook, только in-memory |
---
## Связанные страницы
- [[RAG]] — Retrieval-Augmented Generation
- [[Embeddings]] — Векторные представления
- [[LLM]] — Языковые модели