Skip to content

Простой поисковик по текстам документов. Данные хранятся в БД SQLite, поисковый индекс в эластике.

Notifications You must be signed in to change notification settings

Onlysudden/Intern-Test-Task

Repository files navigation

Тестовое задание для стажера

Задание

Общее описание

Необходимо написать очень простой поисковик по текстам документов. Данные хранятся в БД по желанию, поисковый индекс в эластике. Тестовые данные

Структура БД

  • id - уникальный для каждого документа
  • rubrics - массив рубрик
  • text - текст документа
  • created_date - дата создания документа

Структура Индекса

  • id - id из базы
  • text - текст из структуры БД

Необходимые методы

  • сервис должен принимать на вход произвольный текстовый запрос, искать по тексту документа в индексе и возвращать первые 20 документов со всем полями БД, упорядоченные по дате создания
  • удалять документ из БД и индекса по полю id

Технические требования

  • Любой Python фреймворк кроме Django и DRF
  • README с гайдом по поднятию
  • docs.json - документация к сервису в формате OpenAPI

Программа максимум

  • функциональные тесты
  • сервис работает в Docker
  • асинхронные вызовы

Что сделано?

  • БД: SQLite
  • Индекс Elastic
  • API на Flask со всеми необходимыми методы
  • Документация к сервису в формате OpenAPI
  • Readme
  • Тесты
  • Сервис работает в Docker
  • Асинхронные вызовы

О проекте

Структура

.
|-- app
|   |-- __init__.py         - "Главный" модуль приложения
|   |-- elastic.py          - Функции для работы с Elasticsearch
|   |-- models.py           - Класс для работы с БД
|   |-- routes.py           - Модуль с обработкой запросов
|   |-- tasks.py            - Основная часть кода обработки запросов
|   `-- tests.py            - Юнит-тесты
|-- .gitignore
|-- Dockerfile
|-- README.md
|-- app.db                  - БД, созданная из .csv файла
|-- boot.sh                 - Скрипт для запуска сервиса внутри контейнера
|-- config.py               - Конфигурационный файл
|-- docker-setup.sh         - Скрипт для сборки и запуска контейнера
|-- docker-stop.sh          - Скрипт для остановки контейнера
|-- docs.json               - Документация в формате OpenAPI
|-- requirements.txt        - Зависимости
|-- server.py
|-- test_data.csv           - Тестовые данные

Методы API

Продублирую документацию к API в читаемом виде:

  • /search/?text=:
    • Тип запроса: GET
    • Параметр: text - строка, которую нужно искать
    • Ответ: массив объектов Post:
    [
        {
            "id": int,
            "text": string,
            "created_date": string,
            "rubrics": [string, string, ...]
        },
        ...
    ]
    
  • /delete/?id=:
    • Тип запроса: DELETE
    • Параметр: id - id поста
    • Ответ: строка True или строка с ошибкой

Как запускать?

Для сборки и запуска контейнера нужно запустить bash скрипт: ./docker-setup.sh. Для остановки контейнеров нужно запустить bash скрипт: ./docker-stop.sh. Сервис стартует по адресу 127.0.0.1:5000.

PS. Для первого запуска Elasticsearch скачивается его image, чтобы он скачался нужно включить vpn! Первый запрос после запуска займет немного времени из-за создания индекса.

About

Простой поисковик по текстам документов. Данные хранятся в БД SQLite, поисковый индекс в эластике.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published