Search engine

Search Engine
Мой итоговый проект курса Java-разработчик от SkillBox
Описание проекта
Веб приложение. Поисковый движок, позволяет быстро находить страницы сайтов по заданному запросу.
Принципы работы поискового движка
- В конфигурационном файле перед запуском приложения задаются адреса сайтов, по которым движок осуществляет поиск.
- Поисковый движок самостоятельно находит все страницы заданных сайтов и индексирует их (сохраняет все необходимые данные о странице) так, чтобы потом находить наиболее релевантные страницы по любому поисковому запросу.
- Пользователь присылает запрос через API движка. Запрос — это набор слов, по которым нужно найти страницы сайта.
- В индексе ищутся страницы, на которых встречаются все эти слова.
- Результаты поиска ранжируются, сортируются и отдаются пользователю.
Перечень функционала программы
- Создание таблиц в БД и работ с ней при помощи технологии Hibernate
- Многопоточная индексация сайтов при помощи ForkJoinPool
- Рекурсивный парсинг всех страниц заданных сайтов
- Индексация страниц, приведение всех слов страницы в леммы
- Выведение статистики на основе полученных данных
- Возможность поиска страниц с учетом релевантности по заданному запросу
- Возможность поиска страниц для отдельного сайта
- Выведение понятных фрагментов текста из найденных страниц
- Настроена обработка ошибок через GlobalExceptionHandler
- Используется Liquibase для управления миграциями БД
- Реализовано кэширование лемм в LemmaFinder
- Есть конфигурация через YAML-файлы
- Используется логгирование ключевых операций
Стек используемых технологий
- Java 17.0.2
- Spring Boot 2.7.1
- Maven 4.0.0
- ORM Hibernate
- DB MySQL90
- Lombok Library
- JSOUP Library
- Morphology Library
Инструкцию по запуску проекта
Требования
- MySQL90
- JRE
- На вкладке Releases->Assets скачать SearchEngin.zip
- Разархивировать содержимое в удобное место.
- Запустить MySQL, и создать схему с именем "search_engine"
- Создайте или измените файл application.yml/yaml в папке SearchEngine/config
- Заполнить в этом файле данные для подключения к БД
- Можно изменить сайты для индексации ("indexing-settings.sites:") по образцу в документе
- Открыть файл Application.java и запустить метод "main"
- Зайти в браузер, в поисковике ввести http://localhost:8080/
Работа с веб-интерфейсом
Веб-интерфейс представляет собой одну веб-страницу с тремя вкладками:
-
Dashboard - На ней отображается общая статистика по всем сайтам, количество заданных сайтов, количество проиндексированных страниц, количество найденных лемм в проиндексированных страницах. А также детальная статистика и статус по каждому из сайтов, время последней индексации (периндексации), найденные леммы, страницы для данного сайта, последняя ошибка если таковая имеется.
Для получения актуальной информации не забывайте обновлять страницу.
-
Management - На этой вкладке находятся инструменты управления поисковым движком.
Кнопка "START INDEXING" или "STOP INDEXING" - запуск и остановка полной индексации (переиндексации).
Кнопка ADD/UPDATE - добавить (обновить) отдельную страницу по ссылке.
-
Search - Эта страница предназначена для тестирования поискового движка. На ней находится поле поиска, выпадающий список с выбором сайта для поиска, а при нажатии на кнопку "SEARCH" выводятся результаты поиска по запросу написанному в поле "Query"