Необходимо написать очень простой поисковик по текстам документов. Данные хранятся в БД по желанию, поисковый индекс в эластике. Тестовые данные
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 в читаемом виде:
/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! Первый запрос после запуска займет немного времени из-за создания индекса.