Skip to content

chrnmaxim/fts_fastapi

Repository files navigation

FTS FastAPI

Реализация полнотекстового поиска (FastAPI + SQLAlchemy + PostgreSQL)

Static Badge Static Badge Static Badge Static Badge Static Badge Static Badge

О проекте

Проект предназначен для реализации полнотекстового поиска в PostgresSQL c использованием FastAPI и SQLAlchemy.

В качестве примера в проекте создаётся таблица posts с постами различных категорий. Полнотекстовый поиск реализован за счёт создания индекса на поле search_vector типа TSVECTOR, значение которого обновляется при добавлении записи в таблицу posts или обновлении текста в поле content у существующей записи с помощью триггера на стороне БД.

Note

При обновлении вектора и последующем поиске учитывается язык текста постов. По умолчанию установлен russian в src/.env.example. При необходимости можно установить другой язык, поддерживаемый PostgreSQL.

Установка и запуск проекта

  1. Установить uv.

  2. Клонировать проект:

git clone git@github.com:chrnmaxim/fts_fastapi.git
  1. Перейти в корневую директорию проекта.

  2. Установить зависимости, включая зависимости для разработки:

uv sync --extra dev
  1. Создать .env на основании .env.example:
cp -r src/.env.example src/.env
  1. Запустить API и PostgreSQL в Docker контейнерах:
make start_dev
  1. Применить миграции:
docker compose exec fts_fastapi alembic upgrade heads
  1. Документация API и доступные эндпоинт:
  1. Для остановки контейнеров выполнить
make stop_dev

Тесты

  1. Перед запуском тестов необходимо создать .env.test на основе.env.test.example:
cp -r src/.env.test.example src/.env.test
  1. Тесты запускаются из независимой базы данных Postgres с помощью команды make test.

  2. После выполнения тестов в файле htmlcov/index.html можно увидеть отчет о покрытии кода тестами.

Note

Тесты запускаются в GitHub Actions с каждым коммитом в открытом Pull Request в ветку develop или main.

About

Реализация FTS (FastAPI + SQLAlchemy + PostgreSQL)

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors