https://github.com/chrnmaxim/fts_fastapi
Реализация FTS (FastAPI + SQLAlchemy + PostgreSQL)
https://github.com/chrnmaxim/fts_fastapi
fastapi fts postgresql sqlalchemy
Last synced: 12 months ago
JSON representation
Реализация FTS (FastAPI + SQLAlchemy + PostgreSQL)
- Host: GitHub
- URL: https://github.com/chrnmaxim/fts_fastapi
- Owner: chrnmaxim
- License: gpl-3.0
- Created: 2025-06-04T13:21:21.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2025-06-05T08:27:13.000Z (about 1 year ago)
- Last Synced: 2025-06-05T09:29:22.023Z (about 1 year ago)
- Topics: fastapi, fts, postgresql, sqlalchemy
- Language: Python
- Homepage:
- Size: 87.9 KB
- Stars: 1
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# FTS FastAPI
## Реализация полнотекстового поиска (FastAPI + SQLAlchemy + PostgreSQL)
[](https://www.python.org)
[](https://fastapi.tiangolo.com/)
[](https://swagger.io)
[](https://www.postgresql.org)
[](https://www.sqlalchemy.org/)
[](https://www.docker.com/)
## О проекте
Проект предназначен для реализации полнотекстового поиска в PostgresSQL c использованием FastAPI и SQLAlchemy.
В качестве примера в проекте создаётся таблица `posts` с постами различных категорий.
Полнотекстовый поиск реализован за счёт создания индекса на поле `search_vector` типа `TSVECTOR`, значение которого обновляется при добавлении записи в таблицу `posts` или обновлении текста в поле `content` у существующей записи с помощью триггера на стороне БД.
> [!NOTE]
> При обновлении вектора и последующем поиске учитывается язык текста постов. По умолчанию установлен `russian` в `src/.env.example`. При необходимости можно установить другой язык, поддерживаемый [PostgreSQL](https://www.postgresql.org/docs/current/textsearch-psql.html).
## Установка и запуск проекта
1. Установить [uv](https://docs.astral.sh/uv/getting-started/installation/).
2. Клонировать проект:
```bash
git clone git@github.com:chrnmaxim/fts_fastapi.git
```
3. Перейти в корневую директорию проекта.
4. Установить зависимости, включая зависимости для разработки:
```bash
uv sync --extra dev
```
5. Создать `.env` на основании `.env.example`:
```bash
cp -r src/.env.example src/.env
```
6. Запустить API и PostgreSQL в Docker контейнерах:
```bash
make start_dev
```
7. Применить миграции:
```bash
docker compose exec fts_fastapi alembic upgrade heads
```
8. Документация API и доступные эндпоинт:
* Swagger UI: http://127.0.0.1:8000/docs
* ReDoc: http://127.0.0.1:8000/redoc
9. Для остановки контейнеров выполнить
```bash
make stop_dev
```
## Тесты
1. Перед запуском тестов необходимо создать `.env.test` на основе`.env.test.example`:
```bash
cp -r src/.env.test.example src/.env.test
```
2. Тесты запускаются из независимой базы данных Postgres с помощью команды `make test`.
3. После выполнения тестов в файле `htmlcov/index.html` можно увидеть отчет о покрытии кода тестами.
> [!NOTE]
> Тесты запускаются в GitHub Actions с каждым коммитом в открытом Pull Request в ветку `develop` или `main`.