Система поиска
Режимы поиска (SearchMode)
- fts5Only — полнотекстовый поиск с BM25
- vectorOnly — семантический (cosine similarity по эмбеддингам)
- sqliteRegex — LIKE/GLOB по извлечённому тексту
- hybrid — комбинация FTS5 + Vector с настраиваемыми весами
- legalEntity — по статьям, пунктам, номерам дел
- grepFiles — grep по файлам на диске
- spotlight — macOS Spotlight
- everywhere — SQLite + grep + Spotlight
Область поиска (SearchScope)
Где искать документы:
| Scope | Описание |
|---|---|
| allDatabase | Вся база |
| singleFolder | Одна папка (с опцией recursive) |
| multipleFolders | Несколько папок |
| fileTypes | По расширениям (PDF, DOCX и т.д.) |
| dateRange | По датам изменения |
| combined | Комбинация фильтров (AND) |
Планируются: теги, тип документа, избранное, коллекции.
Алгоритм гибридного поиска
- Парсинг запроса — ключевые слова, номера статей/пунктов, тип (юридический/общий)
- Параллельный запуск — FTS5, векторный поиск, при необходимости поиск по legal_entities
- Объединение — нормализация scores, веса, дедупликация
- Ранжирование — приоритет точного совпадения статьи, затем семантика и ключевые слова
- Возврат — результаты с метаданными и ссылками на источники
Формула ранжирования
finalScore =
(articleExactMatch ? 0.95 : 0)
+ (1 - vectorDistance) * vectorWeight
+ normalizedBM25 * ftsWeight
+ entityMatchBonus
- recencyPenalty
FTS5 vs LIKE/GLOB
| Критерий | FTS5 | LIKE/GLOB |
|---|---|---|
| Скорость | Очень быстро (индекс) | Медленно (full scan) |
| Ранжирование | BM25 | Нет |
| Стемминг | Да | Нет |
| Regex | Нет | GLOB wildcards |
Рекомендация: FTS5 как основной режим, SQLite Regex — для точного regex при необходимости.