Как работает поиск

Когда вы вводите запрос, система одновременно запускает два независимых алгоритма.

Текстовый поиск находит заметки, где встречаются все слова из запроса. Русский язык учитывается корректно: «устал» и «устаёт» — это одно слово для поиска. Технически это BM25-индекс с русским морфологическим анализатором.

Семантический поиск работает иначе. Каждая заметка заранее «закодирована» нейросетью OpenAI в числовой вектор — своего рода координату в пространстве смыслов. Запрос тоже кодируется, и система находит заметки, чьи векторы ближе всего по смыслу. Это позволяет находить контент, где нужных слов может не быть, но тема совпадает.

Итоговый рейтинг строится по алгоритму RRF (Reciprocal Rank Fusion): результаты обоих поисков объединяются по их позициям в каждом списке. Это стандартный академический метод гибридного поиска, устойчивый к различию в шкалах оценок.

Что это означает на практике

  • Запрос «публикация по расписанию» найдёт заметки про Telegram-посты, даже если этих слов там нет
  • Короткие запросы с частыми словами всё равно работают — текстовый поиск удерживает точность
  • Индексируется и русский, и английский контент; семантический поиск работает между языками

Исключение заметок из поиска

Некоторые заметки исключаются из поиска автоматически:

  • Заметки, у которых имя файла или любая папка в пути начинается с _ (например _footer.md или _layouts/base.md), считаются системными и никогда не появляются в результатах поиска.

Чтобы скрыть любую другую заметку, добавьте search: false в её frontmatter:

---
search: false
---

Чтобы исключить целый раздел сразу, используйте frontmatter-патчи. Например, чтобы скрыть документацию для разработчиков:

# frontmatter-patches.yaml
- glob: "dev/**/*.md"
  patch:
    search: false

Поиск через MCP-сервер

MCP-сервер использует тот же семантический поиск, чтобы AI-ассистенты могли запрашивать вашу базу знаний. Метод search(query) запускает векторный поиск и возвращает наиболее релевантные заметки.