Skip to content

BlankShade98/searchengine

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

22 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Поисковый движок (Search Engine)

Проект представляет собой локальный поисковый движок по сайтам. Это веб-приложение на 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

Инструкция по локальному запуску

  1. Убедитесь, что на вашем компьютере установлены JDK и IntelliJ IDEA.
  2. Клонируйте проект из Git-репозитория.
  3. Установите MySQL-сервер и создайте пустую базу данных с названием search_engine.
  4. Создайте файл settings.xml (если его нет) в директории .m2 (C:\Users\user_name\.m2 для Windows или /home/user_name/.m2 для Linux) и добавьте в него блок <servers> с токеном доступа к репозиторию с библиотеками лемматизации.
  5. В файле pom.xml добавьте репозиторий и зависимости для библиотек лемматизации.
  6. В файле application.yaml (который должен быть в корне проекта) укажите данные для подключения к вашей базе данных MySQL и список сайтов для индексации.
  7. Настройте список сайтов: В том же файле application.yaml в секции indexing-settings.sites укажите список сайтов, которые вы хотите проиндексировать.
  8. indexing-settings: sites: - url: https://www.site1.com name: Имя сайта 1 - url: https://www.site2.ru name: Имя сайта 2
  9. Запустите приложение.
  10. Откройте в браузере http://localhost:8080/
  11. В разделе Management запустите индексацию сайтов
  12. Дождитесь завершения индесации или остановите её вручную в разделе Management
  13. В разделе Search произведите несколько поисковых запросов

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published