Поиск

DocPlatform включает встроенный полнотекстовый поисковый движок (Bleve), который автоматически индексирует весь контент. Не нужно настраивать внешний сервис — поиск работает сразу после установки.

Использование поиска

Диалог Cmd+K

Нажмите Cmd+K (macOS) или Ctrl+K (Windows/Linux) в любом месте веб-редактора, чтобы открыть диалог поиска.

┌──────────────────────────────────────────┐
│  🔍  Search documentation...             │
├──────────────────────────────────────────┤
│                                          │
│  📄 Getting Started                      │
│     Install and configure DocPlatform... │
│                                          │
│  📄 API Authentication                   │
│     JWT tokens, OAuth2, and session...   │
│                                          │
│  📄 Docker Deployment                    │
│     Run DocPlatform as a container...    │
│                                          │
│  ↑↓ Navigate   ↵ Open   Esc Close       │
└──────────────────────────────────────────┘

Что индексируется

Поисковый движок индексирует:

  • Заголовок страницы (повышенный вес для ранжирования)
  • Описание страницы (повышенный вес)
  • Полный контент страницы (основной текст, блоки кода, списки и т.д.)
  • Теги (точное совпадение с повышенным весом)
  • Метаданные frontmatter

Синтаксис поиска

Синтаксис Пример Описание
Ключевые слова git sync Страницы, содержащие и “git”, и “sync”
Точная фраза "bidirectional sync" Страницы с точной фразой
Префикс auth* Страницы со словами, начинающимися на “auth”
Фильтр по тегу tag:api Страницы с тегом “api”

Фильтрация по правам доступа

Результаты поиска автоматически фильтруются на основе прав текущего пользователя:

  • Публичные страницы — видимы в результатах поиска для всех аутентифицированных пользователей
  • Страницы workspace — видимы только участникам workspace
  • Ограниченные страницы — видимы только пользователям с необходимой ролью

Viewer не может найти ограниченные admin-only страницы через поиск, даже если контент соответствует запросу. Эта фильтрация происходит на уровне поискового движка, а не после выполнения запроса.

Индексация

Автоматическая индексация

Контент индексируется инкрементально через асинхронную очередь задач:

  1. Страница создана или обновлена (через редактор или синхронизацию git)
  2. Content Ledger генерирует событие
  3. Задача поисковой индексации ставится в очередь
  4. Индексатор Bleve обрабатывает задачу и обновляет индекс

Между сохранением страницы и появлением обновленного контента в результатах поиска проходит небольшая задержка (обычно менее 1 секунды).

Перестроение поискового индекса

Если поисковый индекс рассинхронизировался (редкость — обычно после сбоя или ручной манипуляции с файлами), перестройте его:

docplatform rebuild

Это удаляет существующий поисковый индекс и переиндексирует все страницы из файловой системы. Процесс выполняется в фоне — сервер остается доступным во время перестроения.

Состояние индекса

Проверьте состояние поискового индекса с помощью команды doctor:

docplatform doctor

Команда doctor сообщает:

  • Количество индексированных документов по сравнению с количеством страниц в базе данных
  • Осиротевшие записи индекса (проиндексированы, но нет соответствующей страницы)
  • Отсутствующие записи индекса (страница существует, но не проиндексирована)
  • Размер файла индекса и временная метка последнего обновления

Поиск в опубликованной документации

Опубликованные сайты документации включают интерфейс поиска для посетителей. Поле поиска отображается в заголовке сайта и использует тот же движок Bleve.

Поиск на публичном сайте ограничен только опубликованными страницами — неопубликованный или ограниченный контент никогда не отображается в публичных результатах поиска.

Внутреннее устройство поискового движка

Для пользователей, которые хотят понять, как работает поиск:

Анализатор

Bleve использует English analyzer по умолчанию, который включает:

  • Токенизация — разделение текста по пробелам и знакам препинания
  • Приведение к нижнему регистру — поиск без учета регистра
  • Удаление стоп-слов — фильтрация распространенных слов (the, is, at и т.д.)
  • Стемминг — соответствие вариантам слов (running -> run, documented -> document)

Веса полей

Не все поля имеют одинаковый вес в оценке релевантности:

Поле Вес Описание
title Высокий Заголовок страницы (наиболее релевантный сигнал)
description Высокий Описание / краткое содержание страницы
tags Точное совпадение Ключевое поле — повышенный вес для точных совпадений тегов
body Обычный Полный контент страницы
path Ключевое Путь к файлу — только точное совпадение

Это означает, что запрос, соответствующий заголовку страницы, ранжируется выше, чем тот же запрос, найденный глубоко в основном тексте.

Хранилище

Индекс Bleve хранится в {DATA_DIR}/search-index/ с использованием bbolt (чистая Go-реализация B+ tree базы данных). Индекс отделен от базы данных SQLite и может быть безопасно удален и перестроен с помощью docplatform rebuild.

Производительность

Метрика Значение
Задержка запроса < 8 мс (p99)
Размер индекса ~1 КБ на страницу (приблизительно)
Максимальный протестированный корпус 1 000 страниц
Параллельные запросы Поддерживаются (потокобезопасно)
Задержка индексации < 1 секунды после сохранения (асинхронно)

Производительность поиска масштабируется линейно с объемом контента. Для workspaces, превышающих 10 000 страниц, в будущих версиях будет предложена опциональная интеграция с Meilisearch.