Поисковая система предназначенная для поиска по файлам
Поддерживаемый язык файлов: Английский
Данный проект создан для демонстрации возможностей Spring и в целях личного обучения
Допустим, у нас есть корпус текстов - информация, отобранная по определенным правилам. И наша задача - найти необходимую информацию.
Разрабатываемый веб-сервис содержит как клиентскую, так и серверную часть. Любое редактирование/добавление/изменение текстовых файлов будет осуществляться только администратором. Пользователи же смогут только получать результаты на свои поисковые запросы.
Для начала разберемся как в общем виде работает разработанная ИПС. У нас есть файлы исходного текста, они считываются и обрабатываются от шума, происходит Лемматизация.
Чтобы понять, как работает лемматизация, нужно знать, как создаются различные формы слова. Большинство слов изменяется, когда они используются в различных грамматических формах. Конец слова заменяется на грамматическое окончание, и это приводит к новой форме исходного слова. Лемматизация выполняет обратное преобразование: заменяет грамматическое окончание суффиксом или окончанием начальной формы.
После того как все слова в файлах и все файлы прошли Лемматизацию по ним начинается построение Инвертированного индекса.
Если упростить, то берется слово, ищется во всех документах, и формируется файл в котором содержатся все слова (уже лемматизированые), файл, количество и место, где встречаются эти слова (как показано на рисунке ниже).
Каждый файл имеет свой docID, это идентификатор документа, чтобы было легче и быстрее искать. Файл с docID представлен на рисунке ниже.
Для быстроты нахождения слов, все слов были сгрупированны по первой букве.
В пользовательском интерфейсе администратора предусмотрена функция добавления новых файлов и пересчет индекса.
После того, как администратор загрузил все необходимые документы и перестроил индексы можно искать информацию.
Для начала поисковые запрос разбивается на слова, они лемматизируются, а затем происходит поиск в файлах, выясняется сколько раз встречается это слово в файле, затем суммируется количество всех слов из запроса и на основе этого высчитывается релевантность запроса.
При нажатии на имя файла пользователь перейдет на страницу с его содержимым.
Также зарегистрированные пользователи могут изменить (увеличивать) релевантность запроса. Нажав на элемент в интерфейсе, как показано на рисунке ниже.
Администратор может просматривать список доступных в системе файлов.
Администратор может удалить и изменить этот существующий файл или добавить новый. Редактирование существующего файла показано ниже.
Всего в системе существуют 3 категории пользователей: незарегистрированные, зарегистрированные и администратор.
Незарегистрированные пользователи не могут влиять на релевантность документа, а зарегистрированные пользователи могут по своему усмотрению повышать релевантность тех или иных документов. Разница показана на рисунке ниже.
Для того, чтобы запустить проект, вам необходимо отредактировать файл application.properties
в директории src/main/resources
.
Пример для localhost :
spring.datasource.url=jdbc:postgresql://localhost/searchViazmus
spring.datasource.username=postgres
spring.datasource.password=<Ваш пароль>
spring.jpa.generate-ddl=true
#Устанавливаем максимальный размер загружаемых файлов
spring.servlet.multipart.max-file-size=1MB
spring.servlet.multipart.max-request-size=1MB
#Указываем директорию для загрузки файлов
upload.path = upload/
Если все было настроено правильно, Вы сможете запустить проект на Вашей локальной машине. Создавать БД вручную не нужно. За Вас все должен сделать Hibernate
На текущий момент времени существует ряд нерешеных задач:
- При поиске если нет результатов, сообщить об этом
- Когда отображаются элементы поиска, выдается информация о том, сколько результатов показано (showing 1-20 of 200 results). Исправить это и сделать верное отображение.
- При отображении результатов поиска есть меню для сортировки, однако оно не работает. Исправить это.
- При отображении результатов поиска, сколько бы не было элементов, они все будут отображены на одной странице. Сделать разбивку на страницы.
- На странице администратра есть пункт меню "Пользователи". Сейчас он неактивен. Там нужно сделать таблицу с возможностью поиска информации об истории запросов определенного пользователя.
- Сделать возможность администратору менять группу пользователя (на администратора)
- Сделать адаптивность для всех страниц (верстка)