Проект предназначен для реализации полнотекстового поиска в PostgresSQL c использованием FastAPI и SQLAlchemy.
В качестве примера в проекте создаётся таблица posts с постами различных категорий.
Полнотекстовый поиск реализован за счёт создания индекса на поле search_vector типа TSVECTOR, значение которого обновляется при добавлении записи в таблицу posts или обновлении текста в поле content у существующей записи с помощью триггера на стороне БД.
Note
При обновлении вектора и последующем поиске учитывается язык текста постов. По умолчанию установлен russian в src/.env.example. При необходимости можно установить другой язык, поддерживаемый PostgreSQL.
-
Установить uv.
-
Клонировать проект:
git clone git@github.com:chrnmaxim/fts_fastapi.git-
Перейти в корневую директорию проекта.
-
Установить зависимости, включая зависимости для разработки:
uv sync --extra dev- Создать
.envна основании.env.example:
cp -r src/.env.example src/.env- Запустить API и PostgreSQL в Docker контейнерах:
make start_dev- Применить миграции:
docker compose exec fts_fastapi alembic upgrade heads- Документация API и доступные эндпоинт:
- Swagger UI: http://127.0.0.1:8000/docs
- ReDoc: http://127.0.0.1:8000/redoc
- Для остановки контейнеров выполнить
make stop_dev- Перед запуском тестов необходимо создать
.env.testна основе.env.test.example:
cp -r src/.env.test.example src/.env.test-
Тесты запускаются из независимой базы данных Postgres с помощью команды
make test. -
После выполнения тестов в файле
htmlcov/index.htmlможно увидеть отчет о покрытии кода тестами.
Note
Тесты запускаются в GitHub Actions с каждым коммитом в открытом Pull Request в ветку develop или main.