«Семантический поиск лучше, потому что понимает смысл» — фраза, которая звучит убедительно ровно до первого запроса «счёт 2024-0417». Она не ложная, она неполная: понимание смысла помогает там, где смысл вообще является тем, что вы ищете. В половине реальных запросов вы ищете не смысл, а конкретную строку.
Ниже — критерий, по которому можно решать заранее, а не по ощущению от выдачи.
#Что сравниваем
Поиск по ключевым словам сопоставляет слова запроса со словами документа и ранжирует результаты по редкости этих слов и длине документа. Он ничего не знает о значении — только о совпадениях. Формула ранжирования разобрана в справке про bm25.
Семантический поиск превращает и запрос, и документы в векторы и возвращает ближайших соседей. Он ничего не знает о словах — только о положении на карте смыслов. Как текст превращается в такую точку, разобрано в материале про эмбеддинги простыми словами.
Сравнимы они потому, что решают одну задачу — «покажи подходящее» — и ошибаются в противоположные стороны.
Факты о конкретных инструментах в этом тексте проверялись 26.08.2026.
#Что семантический поиск делает хорошо
Первым — про сильные стороны той стороны, которую я ниже буду ограничивать.
Формулировка своими словами. Вы помните суть, не помните формулировку. «Где я писал про то, что не стоит браться за два проекта сразу» найдёт запись, где написано «нельзя распыляться».
Синонимы и парафразы без словаря. Не нужно поддерживать список «отпуск = каникулы = отгул»: близость по вектору покрывает это сама.
Устойчивость к морфологии. Падежи, склонения и словоформы не мешают, потому что сравниваются не строки.
Кросс-язычность у многоязычных моделей. Запрос на русском может найти английский документ о том же.
Ни одно из четырёх не воспроизводится ключевыми словами без ручной работы — синонимических словарей, стеммеров, транслитерации. Это реальное преимущество, а не маркетинг.
#Восемь типов запросов и победитель в каждом
| # | Тип запроса | Пример | Победитель |
|---|---|---|---|
| 1 | Имя человека | «что говорил Олег» | ключевые слова |
| 2 | Идентификатор | «счёт 2024-0417» | ключевые слова |
| 3 | Точная цитата | «фраза про два проекта» | ключевые слова |
| 4 | Редкий термин | «квантизация Q4_K_M» | ключевые слова |
| 5 | Тема своими словами | «как я справлялся с перегрузкой» | семантика |
| 6 | Смысл без общих слов | «когда я решил не спешить» | семантика |
| 7 | Вопрос на другом языке | «burnout notes» к русским записям | семантика |
| 8 | Отрицание | «встреча, которая не состоялась» | никто |
Строки 1–4 объединяет одно свойство: в запросе есть строка, которая должна встретиться в документе дословно. Строки 5–7: в запросе есть тема, а слова могут быть любыми.
Отсюда правило, которое можно применять без размышлений:
Если вы можете назвать слово, которое обязано быть в найденном документе, — вам нужны ключевые слова. Если не можете — семантика.
Восьмая строка честно фиксирует общий провал. Отрицание почти не сдвигает вектор — «встреча состоялась» и «встреча не состоялась» лежат рядом, — а частица «не» отбрасывается как стоп-слово. Ни один из двух режимов эту задачу не решает, и обход тут ручной: искать по существительным и просматривать выдачу глазами.
#Почему для личной памяти по умолчанию берут ключевые слова
Посмотрите на верхнюю половину таблицы и на то, о чём люди спрашивают свой архив. Имена людей, названия проектов, номера договоров, коды ошибок, названия приложений. Это строки 1–4 целиком.
В Persona это решение зафиксировано в коде: функция отбора терминов из вопроса сначала вытаскивает имена собственные — слова с заглавной буквы, — и только потом значимые слова длиной от четырёх букв, отбрасывая стоп-слова и оставляя не больше шести терминов. Приоритет имён здесь прямое следствие статистики запросов к личной памяти.
Второй довод не про качество, а про условия работы. Ключевые слова требуют только индекса, встроенного в базу. Семантика требует расширения для векторов, запущенной модели-эмбеддера и разового прохода индексации по всему накопленному. Три условия против нуля — и если хоть одно не выполнено, поиск должен продолжать работать. В Persona он и продолжает: при отсутствии любого из условий происходит тихий откат на ключевые слова.
Третий довод специфичен для многопользовательской установки: эмбеддинги считаются по конфигурации владельца инстанса, поэтому у остальных участников семантический режим недоступен вовсе — их текст не должен уходить на чужое железо.
#Где ключевые слова объективно проигрывают
Симметрично: без семантики вы не закроете три ситуации, и никакой настройкой это не лечится.
Вы не помните слов. Запрос «то, что я записал после разговора с врачом» не содержит ни одного слова из искомой записи. Префиксный поиск, синонимы и стемминг тут не помогут — совпадать нечему.
В документах чужая лексика. Вы думаете «выгорание», в записях написано «не тяну». Ключевые слова требуют, чтобы вы угадали чужую формулировку.
Морфология без стемминга. В полнотекстовом поиске SQLite для русского нет стемминга: «лендинг» не найдёт «лендингом». Обходится префиксным поиском, но обход работает только вперёд — запрос «отпуска» не найдёт «отпуск». Подробности и проверка на трёх строках — в гайде по FTS5.
Третий пункт часто принимают за аргумент в пользу семантики целиком. На деле он аргумент за гибрид: морфология чинится дёшево, а вот первые два пункта — нет.
#Правило переключения режима
Практическая процедура, если у вас есть оба режима.
- По умолчанию — ключевые слова. Они дешевле, предсказуемее и покрывают большинство запросов к личному архиву.
- Переключайтесь на семантику, когда не можете назвать обязательное слово. Это единственный надёжный признак.
- Держите оба одновременно, если можете. Слияние двух списков закрывает обе половины таблицы; как это делать корректно, разобрано в материале про гибридный поиск.
- Проверяйте по половинам, а не по среднему. Включив семантику, прогоните двадцать вопросов: десять с именами и терминами, десять своими словами. Семантика обязана выиграть на второй половине и не проиграть на первой. Проигрыш на первой означает, что векторная выдача вытесняет точные попадания.
Четвёртый пункт — единственная защита от типичной ошибки: включить «умный поиск», обрадоваться паре удачных запросов и не заметить, что имена перестали находиться.
Какие сценарии поиска по своему архиву вообще осмысленны, разобрано в материале про поиск по своему дню.
#Частые вопросы
#Правда ли, что семантический поиск понимает смысл?
Он оперирует близостью представлений, обученных на больших корпусах, и на практике это выглядит как понимание темы. Но это близость, а не истина: похожее и правильное — разные вещи, и на отрицаниях, ролях и точных идентификаторах разница становится наглядной.
#Может ли семантический поиск заменить ключевые слова полностью?
Нет — из-за строк 1–4 таблицы. Идентификаторы, коды и имена он путает с похожими, потому что видит в них строки, а не уникальные ключи. Для архива, где такие запросы часты, замена ухудшит результат.
#Что выбрать, если ресурсов на оба режима нет?
Ключевые слова. Они работают без внешних зависимостей и закрывают ту половину запросов, которая для личного архива преобладает. Семантику добавляйте, когда у вас накопится конкретный список запросов, которые ключевые слова не берут.
#Как понять, что семантический режим реально включён?
Возьмите запись, которая точно есть в архиве, и спросите о ней другими словами. Находится — работает. Находится только при дословной формулировке — вы смотрите на результат ключевого поиска, чем бы ни было написано в настройках.
#Влияет ли язык записей на выбор?
Влияет. На русском ключевые слова страдают от отсутствия стемминга, а семантика — от качества многоязычной модели-эмбеддера. Проверять надо на своём корпусе: результаты, полученные на английских бенчмарках, на русский не переносятся.
#Что делать с запросами, где есть и имя, и тема?
«Что Олег говорил про выгорание» — это как раз случай для гибрида: имя ловится ключевыми словами, тема — семантикой. Если гибрида нет, разбейте на два запроса и пересеките результаты глазами. Место поиска в общей механике памяти разобрано в статье о том, как работает память у ИИ.
#Вывод
Пользуйтесь одним критерием: можете назвать слово, которое обязано быть в найденном документе, — берите ключевые слова; не можете — берите семантику. Для личного архива по умолчанию правильны ключевые слова, потому что там преобладают имена, названия и коды, а условия для векторного поиска сходятся не у всех. Семантику включайте осознанно и обязательно проверяйте, что она не сломала точные запросы: прирост на одной половине задач легко скрывает потерю на другой.