Проект представляет собой локальный поисковый движок по сайтам. Это веб-приложение на Spring Boot, которое индексирует страницы сайтов, указанных в конфигурации, и позволяет осуществлять по ним быстрый поиск.
Поисковый движок разработан для недавно созданного информационно-новостного портала. Он позволяет пользователям быстро находить информацию, используя поле поиска. Движок работает с локально установленной базой данных MySQL, имеет простой веб-интерфейс и API для управления и получения результатов поиска.
- Обход и индексация сайтов: Приложение самостоятельно обходит все страницы заданных сайтов и создает поисковый индекс, чтобы затем находить наиболее релевантные страницы. Обход каждого сайта запускается в отдельном многопоточном режиме.
- Лемматизация: Поисковый запрос и содержимое страниц преобразуются в леммы (начальные формы слов) с помощью специальной библиотеки. Это позволяет искать информацию с учетом морфологии русского языка.
- Ранжирование результатов: Найденные страницы ранжируются, сортируются и отдаются пользователю. Для каждой страницы рассчитывается абсолютная релевантность (сумма rank всех найденных лемм) и относительная релевантность (абсолютная релевантность страницы, деленная на максимальную абсолютную релевантность среди всех найденных страниц).
- API и веб-интерфейс: Движок управляется через API, которое позволяет запускать и останавливать индексацию, добавлять отдельные страницы, получать статистику и выполнять поиск. Веб-интерфейс состоит из трех вкладок: Dashboard для просмотра статистики, Management для управления индексацией и Search для поиска.
- Многопоточная индексация: Параллельный обход сайтов с использованием
ForkJoinPoolдля максимальной производительности. - Гибкая конфигурация: Список сайтов для индексации легко настраивается в файле
application.yaml. - Анализ контента: Извлечение текста не только из HTML-страниц, но и из различных форматов файлов (PDF, DOCX и др.) с помощью Apache Tika.
- Морфологический анализ: Поиск по леммам (нормальным формам слов) для русского языка, реализованный с помощью Apache Lucene Morphology.
- Веб-интерфейс: Удобная панель управления для:
- Запуска и остановки процесса индексации.
- Просмотра общей и детальной статистики по сайтам (количество страниц, лемм, статус).
- Выполнения поисковых запросов по всем сайтам или по одному выбранному.
- Индексация отдельных страниц: Возможность добавить или обновить в индексе одну конкретную страницу через интерфейс.
- REST API: Набор эндпоинтов для управления и взаимодействия с движком.
- Бэкенд: Java 17, Spring Boot (Web, Data JPA)
- База данных: MySQL
- Сборка: Maven
- Веб-краулинг и парсинг: Jsoup, Apache Tika
- Анализ текста: Apache Lucene Russian Morphology
- Фронтенд: HTML, CSS, JavaScript, jQuery
- Утилиты: Lombok
- Убедитесь, что на вашем компьютере установлены JDK и IntelliJ IDEA.
- Клонируйте проект из Git-репозитория.
- Установите MySQL-сервер и создайте пустую базу данных с названием
search_engine. - Создайте файл
settings.xml(если его нет) в директории.m2(C:\Users\user_name\.m2для Windows или/home/user_name/.m2для Linux) и добавьте в него блок<servers>с токеном доступа к репозиторию с библиотеками лемматизации. - В файле
pom.xmlдобавьте репозиторий и зависимости для библиотек лемматизации. - В файле
application.yaml(который должен быть в корне проекта) укажите данные для подключения к вашей базе данных MySQL и список сайтов для индексации. - Настройте список сайтов: В том же файле
application.yamlв секцииindexing-settings.sitesукажите список сайтов, которые вы хотите проиндексировать. - Запустите приложение.
- Откройте в браузере
http://localhost:8080/ - В разделе Management запустите индексацию сайтов
- Дождитесь завершения индесации или остановите её вручную в разделе Management
- В разделе Search произведите несколько поисковых запросов
indexing-settings:
sites:
- url: https://www.site1.com
name: Имя сайта 1
- url: https://www.site2.ru
name: Имя сайта 2