Пошук
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 не може знайти обмежені сторінки лише для адміністраторів через пошук, навіть якщо контент відповідає запиту. Ця фільтрація відбувається на рівні пошукового рушія, а не після запиту.
Індексація
Автоматична індексація
Контент індексується інкрементально через асинхронну чергу завдань:
- Сторінка створюється або оновлюється (через редактор або синхронізацію git)
- Content Ledger генерує подію
- Завдання індексації пошуку ставиться в чергу
- Індексатор 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.