- Saved searches
- Use saved searches to filter your results more quickly
- vrpanfilov/SearchEngine
- Name already in use
- Sign In Required
- Launching GitHub Desktop
- Launching GitHub Desktop
- Launching Xcode
- Launching Visual Studio Code
- Latest commit
- Git stats
- Files
- README.md
- Saved searches
- Use saved searches to filter your results more quickly
- ikazakof/java-search-engine
- Name already in use
- Sign In Required
- Launching GitHub Desktop
- Launching GitHub Desktop
- Launching Xcode
- Launching Visual Studio Code
- Latest commit
- Git stats
- Files
- README.md
Saved searches
Use saved searches to filter your results more quickly
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.
It’s a final Skillbox course project
vrpanfilov/SearchEngine
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Sign In Required
Please sign in to use Codespaces.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching Xcode
If nothing happens, download Xcode and try again.
Launching Visual Studio Code
Your codespace will open once ready.
There was a problem preparing your codespace, please try again.
Latest commit
Git stats
Files
Failed to load latest commit information.
README.md
Данный проект реализует поисковый движок, предоставляющий пользователю специальный API со следующими основными функциями:
В проект также входит веб-страница, которая позволяет управлять процессами, реализованными в движке.
Страница содержит три вкладки.
Эта вкладка открывается по умолчанию. На ней отображается общая статистика по всем проиндексированным сайтам, а также детальная статистика и статус по каждому из сайтов (статистика, получаемая по запросу /statistics).
На этой вкладке находятся инструменты управления поисковым движком — запуск (запрос /startIndexing) и остановка (запрос /stopIndexing) полной индексации (переиндексации), а также возможность добавить (обновить) отдельную страницу по ссылке (запрос /indexPage/ ). Отметим, что если в последнем запросе присутствует только URL сайта без завершающего слэша (/), как в приведённом выше скриншоте, то индексироваться будет указанный сайт целиком.
Эта вкладка предназначена для тестирования поискового движка. На ней находится поле поиска и выпадающий список с выбором сайта, по которому искать, а при нажатии на кнопку SEARCH выводятся результаты поиска (по запросу /search).
На всех вкладках присутствует выпадающий список Language (Язык). При выборе одного из двух вариантов — English или Русский — соответственно поменяется кодировка страницы. Пример русской раскладки:
Данное приложение по выбору может работать либо с СУБД MySQL, либо с СУБД PostgreSQL. Выбор зависит от значения параметра spring.profiles.active в конфигурационном файле application.yaml, который определяет профиль и находится в корне проекта. Параметр может принимать одно из двух значений:
В зависимости от значения заданного профиля подключается один из двух соответствующих конфигурационных файлов: application-mysql.yaml или application-postgresql.yaml, которые тоже находятся в корне проекта.
Приложение допускает подключение и к другим реляционным БД. Для этого, по аналогии с PostgreSQL, нужно создать файл application-.yaml, скрипт для генерирования объектов БД — schema-.sql и скрипт для наполнения таблицы field — data-.sql. Кроме того, в файле pom.xml нужно подключить подходящую зависимость, обеспечивающую работу с выбранной БД.
В этом разделе задаётся параметр port — порт, через который контроллеры приложения «слушают» веб-запросы. Задавая разные порты, можно, например, из разных папок, в которых находятся файлы настройки, запустить несколько экземпляров приложения.
Также задаётся параметр indexingAvailable, который разрешает или запрещает данному экземпляру приложения индексировать сайты. При любом значении параметра — true или false — разрешены поиск по сайтам и просмотр статистики.
Здесь задаются параметры СУБД, в которой приложение хранит данные конфигурации. Некоторые параметры общие для всех СУБД и они находятся в файле application.yaml. Специфичные для выбранной СУБД параметры находятся в соответствующих файлах application-.yaml
Следует отметить важность параметра spring.jpa.hibernate.ddl-auto и отличия его применения в двух случаях:
Здесь можно задать уровень логирования level.root и имя файла журнала file.name.
На режим индексации влияют следующие параметры:
Здесь приведён список сайтов, которые программа будет в состоянии индексировать. Каждый сайт характеризуется следующими параметрами:
Приложение построено на платформе Spring Boot.
Необходимые компоненты собираются с помощью фреймворка Maven. Maven подключает следующие относящиеся к Spring Boot стартеры:
Для загрузки и разбора страниц с сайтов используется библиотека jsoup.
Данная версия программы работает с СУБД MySQL. Для этого подключается зависимость mysql-connector-java.
Для удобства написания (и чтения) программного кода и для расширения функциональности языка Java используется библиотека Lombok (зависимость lombok).
Репозиторий с приложением SearchEngine находится по адресу https://github.com/vrpanfilov/SearchEngine.git.
Если проект загрузить на локальный диск, то он готов к тому, чтобы его можно было скомпилировать и запустить с помощью среды разработки IntelliJ IDEA.
Перед первой компиляцией программы следует выполнить следующие шаги:
- Установить СУБД — одну или несколько, если они ещё не установлены.
- В базе данных создать схему search_engine. Имя схемы может быть и другим, но тогда это должно быть отражено в параметре spring.datasource.url в файле application-.yaml.
- В схеме нужно создать пользователя se_user с паролем se_user. Пользователь и пароль могут быть другими, это опять же должно соответствовать параметрам spring.datasource.username и spring.datasource.password в файле application-.yaml.
- Установить параметры jpa.hibernate.ddl-auto и, если нужно, параметр spring.sql.init.mode так, как это описано выше.
- Установить фреймворк Apache Maven, если он ещё не установлен.
- В командной оболочке (например, PowerShell) перейти в корневой каталог проекта и выполнить пакетный файл init_morphology.cmd: .\init_morphology.cmd .
Теперь приложение можно компилировать и запускать из программной среды.
Приложение может быть также запущено командной строкой. Для этого оно должно быть скомпилировано в панели Maven среды разработки командой package:
Результат компиляции, SearchEngine-0.0.1-SNAPSHOT.jar, будет располагаться в папке target. Этот файл можно перенести в любую доступную папку на компьютере, при этом в той же папке должны находиться файлы application.yaml и application-.yaml. Приложение запускается строкой
java -jar SearchEngine-0.0.1-SNAPSHOT.jar .
Можно поступить и так. В несколько папок — например, d:\aaa, d:\bbb — положить набор файлов настройки application.yaml и application-.yaml.
Файлы application.yaml будут отличаться параметром server.port. А приложение SearchEngine-0.0.1-SNAPSHOT.jar можно поместить, например, в папку d:\search_engine. Тогда, перейдя, последовательно в папки d:\aaa и d:\bbb, можно запустить два экземпляра программы командой
java -jar d:\search_engine\SearchEngine-0.0.1-SNAPSHOT.jar .
Эти экземпляры будут «слушать» разные порты и не мешать друг другу при условии, что только у одного экземпляра приложения параметр конфигурации server.indexingAvailable принимает значение true.
Saved searches
Use saved searches to filter your results more quickly
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.
ikazakof/java-search-engine
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Sign In Required
Please sign in to use Codespaces.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching Xcode
If nothing happens, download Xcode and try again.
Launching Visual Studio Code
Your codespace will open once ready.
There was a problem preparing your codespace, please try again.
Latest commit
Git stats
Files
Failed to load latest commit information.
README.md
The Java search engine is designed for multi-threaded indexing of a given group of sites with subsequent search by their content (Russian words).
The optimal speed of the program is ensured by:
Search engine developed on stack of technology:
Open live demo and go to «Indexing and search» chapter, point 2.
Prepare and start project on your device
- Install prerequisites: Install MySQL 8.0.26 or later.
- Clone repository.
- Configure application.yml: Type username and password for connect to database with corresponding rights; Type sites url and name. Type the maximum percentage of the appearance of the Lema from the total number of pages in the search. DEFAULT = 60%
- Configure your IDE: Increase Xmx memory in VM options: -Xmx4096m; Attach project directory «lib» with Russianmorphology in Project Settings -> Libraries; Start Main method after maven download all project depencies.
- Open Search engine start page in browser — http://localhost:8080
- Go to management tab and click the «Start indexing» button; ATTENTION!
In this implementation, when you start a full indexing, all previous data will be deleted! - On dashboard tab, you can monitor the progress of indexing;
- On search tab, you can enter a search query once any of the sites have been indexed;
If there are more than 10 results, click «show more»
- On management tab, type the page url and click the «Add/update» button; NOTE
Page must be member of one target site. - Check the result on search tab.