CIS-engine (Crawler-Indexer-Searcher) — это полноценный поисковый движок, реализованный на Go. Проект представляет собой полный конвейер данных: от сбора информации в вебе до предоставления удобного API для ее поиска.
Система состоит из трех слабосвязанных компонентов, которые взаимодействуют через общую базу данных PostgreSQL. Такая архитектура обеспечивает модульность, отказоустойчивость и возможность независимого масштабирования каждого сервиса.
graph LR
subgraph CIS-engine
A[Интернет] --> B(Crawler);
B --> C{PostgreSQL};
D(Indexer) --> C;
C --> E(Searcher / API);
F(Пользователь) --> E;
G(Веб-интерфейс) --> E;
end
- Веб-интерфейс: Простой и удобный интерфейс для поиска, доступный из браузера.
- Высокопроизводительный краулер: Использует пул воркеров для эффективного конкурентного обхода сайтов.
- Полнотекстовый поиск: Применяет встроенные возможности PostgreSQL (
tsvector,tsquery) для быстрого и релевантного поиска с поддержкой русского языка. - REST API: Простой и понятный API на базе Gin для поиска и управления системой.
- CLI: Удобный клиент командной строки (
cis-cli) на базе Cobra для взаимодействия с API. - Контейнеризация: Готовые конфигурации Docker и Docker Compose для быстрого запуска всего стека одной командой.
- CI/CD: Автоматизированные сборка, тестирование и публикация релизов под Windows, macOS и Linux с помощью GitHub Actions и GoReleaser.
- Язык: Go
- Веб-фреймворк: Gin Gonic
- База данных: PostgreSQL
- CLI: Cobra
- Контейнеризация: Docker, Docker Compose
- CI/CD: GitHub Actions, GoReleaser
Для запуска проекта локально вам понадобится установленный Docker и Docker Compose.
-
Клонируйте репозиторий:
git clone https://github.com/Cuga77/CIS-engine.git cd CIS-engine -
Запустите сервисы: Эта команда соберет образы и запустит API, краулер, индексатор и базу данных.
docker-compose up --build
После запуска в консоли появится сообщение о том, что сервер запущен.
После запуска сервисов, откройте в браузере следующий адрес: http://localhost:8081/search
Вы увидите страницу с поисковой строкой, где сможете вводить запросы и получать результаты.
Вы можете скачать готовый бинарный файл для вашей ОС со страницы Releases или собрать его из исходного кода:
go build -o cis-cli ./cmd/cli/Примеры команд:
# Добавить URL для сканирования
./cis-cli crawl "https://go.dev/"
# Выполнить поиск по проиндексированным страницам
./cis-cli search "concurrency patterns"
# Проверить статус системы (количество страниц в индексе)
./cis-cli status
# Показать версию CLI
./cis-cli versionПо умолчанию, CLI обращается к API по адресу http://localhost:8081. Вы можете переопределить это с помощью флага --api-url или переменной окружения CIS_API_URL.