«Санкт-Петербургский политехнический университет Петра Великого»
Институт компьютерных наук и технологий
Высшая школа программной инженерии
Проект выполнялся в рамках курса "Технологии разработки качественного программного обеспечения"
Авторы проекта:
- Рахматуллин А.Р., группа 3530904/80102
- Зыбкин В.Ю., группа 3530904/80102
- Гусаров И.Е., группа 3530904/80102
News Searcher - это поисковик по заданным ресурсам, который ищет новости по вашему запросу.
Поиск новостей производится из следующих ресурсов:
- Новости Mail.ru
https://news.mail.ru
- РИА Новости
https://ria.ru
- Новости Рамблер
https://news.rambler.ru
Frontend
часть проекта была реализована с помощью NodeJs v14.17.1
с npm 6.14.13
. Вам необходимо иметь данные пакеты для успешного прохождения дальнейших инструкций.
-
Для начала необходимо перейти в директорию
news-searcher/client
Установите yarn, с помощью следующей команды, если у вас он не установленnpm install --global yarn
-
Далее необходимо скачать все необходимы для проекта пакеты (
Dependencies
)yarn install
-
Запускаем проект
yarn start
Проект запускается по умолчанию на http://localhost:3000/
и имеет порт 3000
Backend
часть проекта была реализована на языке Java с использованием фреймфорка Spring
, таких баз данных, как Redis
и PostgreSQL
. Для создания поиска используется библиотека Apache Lucene
.
Для запуска проекта необходимо выполнить несколько простых действий
- Перейти в директорию
docker
и выполнить командуdocker-compose up
- Собрать проект с помощью команды
gradle clean build
- Запустить проект с помощью команды
gradle bootRun
Идентификатор | Требование |
---|---|
F_Search_input | Поле для ввода текста, по которому будет производиться поиск. При пустом поле отображаем placeholder с текстом: «Найти в новостях» |
F_Search_button | Кнопка «поиск» не активна, пока не введен хотя 1 символ в поисковую строку. По нажатию на кнопку производится поисковой запрос по тексту, взятому из поисковой строки. |
F_Search_clear | Кнопка «Очистки поля» (х). По нажатию данной кнопки стирается текст, набранный в поисковой строке. |
F_Search_History | Выпадающее меню с историей поиска. Открывается при нажатии на пустую поисковую строку, пропадет при вводе хотя бы 1 символа. История содержит в себе максимум 100 элементов, отсортированных по дате поиска, при этом при нажатии на поисковую строку отображается максимум 10 последних запросов. |
F_Search_History_Delete | Кнопка удаления элемента из истории поиска, которая имеется у каждого отображаемого элемента истории. По нажатию из списка истории поиска удаляется элемент, соответствующий нажатой кнопке. При этом в отображение истории подставляется наиболее свежий по дате элемент, который ранее не входил в 10 элементов истории поиска до нажатия кнопки удаления. |
F_Search_result | Блок результата поиска представляет из себя текст, который содержит в себе запрашиваемую строку, а также ссылку на ресурс. По нажатию на текст или ссылку происходит переход на веб сайт. |
F_Search_Text_Button | Кнопка «текст». Отвечает за переключение с вкладки с результатами изображений при поиске по тексту на вкладку с результатами поиска по тексту. |
F_Search_Image_Button | Кнопка «картинки». Отвечает за переключение с вкладки с результатами поиска по тексту на вкладку с результатами изображений при поиске по тексту. |
F_Search_Result_Text | Вкладка с результатами поиска по тексту. Появляется по нажатию кнопки «поиск» и кнопки «текст». Содержит в себе блоки результатов поиска, соответствующих набранной пользователем поисковой строки. Содержит 10 блоков с результатами поиска и максимально 8 похожих запросов. |
F_Search_Change_Page | Кнопка перехода по страницам результатов поиска. На каждой странице максимум 7 кнопок в зависимости от общего количества полученных результатов. Кнопка с текущим номер странице выделяется кругом. Кнопки отображаются горизонтально, номер на кнопке последовательно увеличивается на единицу слева на право. |
F_Search_Result_Image | Вкладка с результатами изображений при поиске по тексту. Появляется после нажатия кнопки «картинки». Содержит в себе картинки, полученные с ресурсов, который были найдены по набранному пользователем поисковому запросу. |
F_Search_People_Ask | Блок с примерами похожих поисковых запросов. Отображается после первого блока с результатами поиска и только на вкладке с результатами поиска по тексту. При нажатии на один из таких запросов текст подставляется в поисковую строку и выполняется запрос. |
F_Search_Not_Found | Блок с предложениями, как исправить поисковой запрос, отображается при отсутствии результатов поиска по нажатию на кнопку «поиск» |
F_Search_Incorrect_Request | Блок с текстовым уведомлением о несоблюдении правил корректного запроса с указанием нарушенного пункта правил. Отображается при нажатии кнопки «поиск» и нарушении правил корректности поискового запроса. |
F_Change_Language | Кнопка «Сменить язык». Располагается справа от кнопки «поиск». Предназначена для смены языка с русского на английский и наоборот. |
NF_Deploy_Method | Развертывание необходимых компонентов для старта и работы приложения выполнять с помощью docker контейнера. |
NF_UI | Поддержка адаптивной верстки от мобильных до десктопных устройств. Минимальное поддерживаемая ширина экрана: 320px. Используемый шрифт: Roboto |
NF_Fronted_Language | Используемые фреймворки на клиентской стороне: React JS, SASS |
NF_API | В качестве реализации общения между клиентом и сервером использовать Rest API. |
NF_Backend_Language | Для старта и создания контекста серверного приложения использовать Spring Boot. Для осуществления индексации заданных сайтов использовать Apache Lucene. |
NF_Request_Limit | Ограничение на количество слов в поисковом запросе: 16 |
NF_Languages_Limit | Поисковой запрос может содержать английские и русские символы, числа и знаки препинания. |
NF_Browsers | Поддерживаемые браузеры: · Edge 91-92 · Firefox 59-91 · Chrome 91-93 · Safari 13-14 · Android browser 93 |
NF_Sources | · Новости Mail.Ru https://news.mail.ru · РИА Новости https://ria.ru · Новости Рамблер https://news.rambler.ru |
-
Архитектура приложения
Клиент отправляет запрос на веб сервер. Сервер при запросе истории идет только в кэш. При поиске сначала идет обращение к кэшу, в случае получения данных из кэша результат немедленно возвращается на клиент. Если же в кэше данные не были найдены, то по тексту запроса делаем поиск в индексе. При нахождении записей в индексе, делаем запрос в базу данных и достаем ссылку на ресурс и ссылки на все изображения на ресурсе. Результат обращения к базе данных кладем в кэш и возвращаем клиенту. -
Стек технологий
- Backend:
- Spring Boot - для гибкой настройки Java Beans, конфигураций XML и транзакций базы данных.
- Apache Lucene - библиотека для высокопроизводительного полнотекстового поиска. Обеспечивает масштабируемость и достаточно высокоскоростную индексацию. Создаваемый индекс занимает примерно 20—30 % от размера исходного текста.
- Redis - быстрое хранилище данных типа «ключ значение». Redis обеспечивает время отклика на уровне долей миллисекунды и позволяет выполнять миллионы запросов в секунду в режиме реального времени.
- Postgres - свободная объектно-реляционная система управления базами данных (СУБД) для хранения информации, необходимой для разрабатываемого веб-сервиса.
- Frontend:
- React JS - JavaScript-библиотека для создания пользовательских интерфейсов
- Bootstrap - это открытый и бесплатный HTML, CSS и JS фреймворк, который используется веб-разработчиками для быстрой вёрстки адаптивных дизайнов сайтов и веб-приложений
- SASS - метаязык на основе CSS, предназначенный для увеличения уровня абстракции CSS-кода и упрощения файлов каскадных таблиц стилей.
- Backend:
-
Дизайн Макет Дизайн проекта разрабатывался в
Figma
:https://www.figma.com/file/Jg3xNaiGoue74I9WlP6UIP/Search-Engine-UI?node-id=12319%3A7370
-
Схема базы данных
Результат поиска содержит в себе уникальный идентификатор, ссылку на ресурс и ссылки на все картинки конкретного ресурса. Используется для того, чтобы не хранить большое количество данных в индексе. -
API Breakpoints для проекта описаны тут
https://app.swaggerhub.com/apis/gogun/search/1
Поиск по тексту:
Поиск похожих запросов:
Поиск изображений: