Перейти к содержимому

Поиск

Engram индексирует содержимое заметок для семантического поиска, который находит заметки, близкие по смыслу к вашему запросу, даже когда формулировки различаются. Поиск по точному совпадению тоже поддерживается, но где он выполняется, зависит от области поиска.

  • Семантический поиск по всему хранилищу. Векторное сходство по эмбеддингам каждой заметки. Находит родственные идеи, а не только буквальный текст. Именно он сегодня работает из панели поиска веб-приложения.
  • Поиск по ключевым словам и гибридный поиск. Сервер также индексирует заметки для безопасного при шифровании поиска по ключевым словам (лексического) и гибридного режима, объединяющего лексические и векторные результаты (см. ниже). Они есть на сервере; панель поиска веб-приложения пока не предлагает переключатель режимов, поэтому сейчас она выполняет семантические запросы.
  • Точное совпадение внутри открытой заметки. Ctrl/Cmd+F и «Найти и заменить» в редакторе работают с расшифрованной заметкой в вашем текущем сеансе, как в любом текстовом редакторе.

А как же буквальный поиск и регулярные выражения?

Заголовок раздела «А как же буквальный поиск и регулярные выражения?»

Engram поддерживает поиск по ключевым словам (лексический) по всему вашему хранилищу, причём делает это без нарушения шифрования при хранении. Вместо сканирования открытого текста бэкенд индексирует разреженный вектор для каждого фрагмента, ключом которого служит HMAC(your vault key, token), поэтому сервер может сопоставлять слова запроса с индексом, никогда не располагая читаемым текстом заметок. Режимы поиска по ключевым словам, семантического (векторного) и гибридного (лексический + векторный, объединяются на сервере через reciprocal-rank fusion) уже работают в бэкенде.

Это значит, что настоящий поиск подстроки или регулярного выражения по исходному тексту на сервере по-прежнему невозможен (индекс построен по токенам, а не по символам), поэтому для регулярных выражений, поиска с учётом регистра или буквального поиска с фильтром по пути остаётся локальная панель поиска Obsidian (работающая по файлам .md на вашем диске). Для поиска внутри открытой заметки также работает Ctrl/Cmd+F в редакторе.

Поиск Engram и поиск Obsidian дополняют друг друга: семантический, по ключевым словам и гибридный в облаке; полный поиск с регулярными выражениями, учётом регистра и фильтром по пути на диске. Локальная панель поиска Obsidian работает с тем же хранилищем, которое синхронизирует Engram.

  • Панель поиска веб-приложения (боковая панель поиска): сегодня семантические запросы
  • Плагин для Obsidian выполняет поиск на том же сервере, что и веб-приложение
  • Панель поиска Obsidian для локального поиска с регулярными выражениями, с учётом регистра и по пути по хранилищу на диске

Для шаблона с регулярным выражением или буквального совпадения в пределах пути переключитесь на локальный поиск Obsidian.

  1. Ваш запрос преобразуется в эмбеддинг (модель запросов асимметрична модели документов и настроена на извлечение, а не на индексирование)
  2. Qdrant возвращает top-K векторных совпадений с бинарным квантованием и повторной оценкой
  3. Если настроен реранкер (RERANKER_BACKEND=jina + JINA_URL на сервере), кандидаты переупорядочиваются по смеси оценок 40/60 из векторной и реранкера; если нет, используется исходное векторное ранжирование

Стандартное облачное развёртывание сегодня работает без реранкера; адаптер Jina готов и может быть включён.

Ограничение поиска папкой поддерживается через API. Передайте параметр запроса folder=<path>. Синтаксис запроса в строке поиска вроде folder:work/ есть в планах, но в интерфейсе пока не подключён.

  • Хранилище очень маленькое (< 20 заметок). Сравнивать почти не с чем; результаты шумные, пока хранилище не вырастет
  • Недавно импортированные заметки. Эмбеддинги вычисляются асинхронно через Oban; только что написанным заметкам может потребоваться несколько секунд, чтобы появиться в результатах
  • Очень специфический жаргон. Семантическое сходство лучше всего работает для понятий. Для точных идентификаторов (имя функции, код ошибки) лучше подходят поиск по ключевым словам и гибридный поиск (лексический + векторный). Оба работают на сервере, а в интерфейсе веб-приложения появятся позже. А пока точные идентификаторы находит локальный поиск Obsidian.