Пошук

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”

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

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

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

Viewer не може знайти обмежені сторінки лише для адміністраторів через пошук, навіть якщо контент відповідає запиту. Ця фільтрація відбувається на рівні пошукового рушія, а не після запиту.

Індексація

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

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

  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 секунда після збереження (асинхронно)

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