https://github.com/halva773/fuzzy-search
DDD Project w/ FastAPI + SQLite + Redis
https://github.com/halva773/fuzzy-search
celery cruds docker fastapi fuzzy-search jwt kubernetes python redis sqlalchemy sqlite web-sockets
Last synced: about 2 months ago
JSON representation
DDD Project w/ FastAPI + SQLite + Redis
- Host: GitHub
- URL: https://github.com/halva773/fuzzy-search
- Owner: Halva773
- Created: 2025-03-13T22:49:55.000Z (about 1 year ago)
- Default Branch: master
- Last Pushed: 2025-03-26T22:25:22.000Z (about 1 year ago)
- Last Synced: 2025-03-26T22:32:33.596Z (about 1 year ago)
- Topics: celery, cruds, docker, fastapi, fuzzy-search, jwt, kubernetes, python, redis, sqlalchemy, sqlite, web-sockets
- Language: Python
- Homepage:
- Size: 24.4 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Нечеткий поиск

## Запуск через Docker
1.
```bash
git clone https://github.com/Halva773/Fuzzy-search.git # Клонирование репозитория
cd Fuzzy-search # Переходим в папку с проектом
cp .env.example .env # Создаём файл .env на основе примера
```
Файл .env используется в проекте, но не опубликован на гите. Примером файла служит .env.exmaple. После создания можете поменять необходимые вам ключи и переменные
```bash
docker build . -t fuzzy-search
docker run -p 8000:8000 -t fuzzy-search
```
## Тема работы
Алгоритмы нечеткого поиска являются основой систем проверки орфографии и полноценных поисковых систем вроде Google или Yandex. Например, такие алгоритмы используются для функций наподобие «Возможно вы имели в виду …» в тех же поисковых системах.
[К ознакомлению](https://habr.com/ru/articles/114997/)
Реализовано 2 вида алгоритма:
- Расстояние Левенштейна
- Хеширование по сигнатуре
## Этапы реализации
1. Базовая реализация с использованием HTTP-протоколов (GET, POST)
2. Интеграция веб-сокетов для real-time взаимодействия
3. Внедрение Redis и Celery для асинхронного выполнения задач
## Общие требования к проектам
- Использование FastAPI в качестве веб-фреймворка
- SQLite как база данных
- SQLAlchemy для ORM (Object-Relational Mapping)
- Реализация авторизации по email и паролю
- Аутентификация с использованием JWT (JSON Web Tokens)
## Структура проекта
project/
├── app/
│ ├── api/ # эндпоинты
│ ├── core/ # config
│ ├── db/ # файл базы данных и сессия подключения
│ ├── models/ # модели для базы данных
│ ├── cruds/ # ORM CRUD операции
│ ├── schemas/ # схемы запросов
│ ├── services/ # доп. сервисы, в нашем случае тут будет лежать логика под лабы
│ └── main.py
├── alembic/
└── .env
## Эндпоинты
### Регистрация нового пользователя
@router.post("/sign-up/")
Проверяет, не зарегистрирован ли уже пользователь с таким email.
Если нет, создает нового пользователя и генерирует для него токен.
Возвращает данные созданного пользователя.
### Вход в систему
@router.post("/login/")
Проверяет существование пользователя с указанным email.
Проверяет правильность введенного пароля.
Если все верно, генерирует новый токен для пользователя.
Возвращает данные пользователя с новым токеном.
### Получение информации о текущем пользователе
@router.get("/users/me/")
Возвращает данные авторизованного пользователя.
Данные о пользователе должны сохраняться в базу данных для чего вам надо написать круды.
Необходимо пользоваться alembic для миграции базы данных.
### Копруса текстов
@app.post("/upload_corpus")
Загружает корпус текста для индексации и поиска.
@app.get("/corpuses")
Возвращает список корпусов c идентификаторами.
@app.post("/search_algorithm")
Позволяет указать слово (для поиска), тип алгоритма (которым можно искать), корпус (который можно использовать) и возвращает время работы алгоритма + результат поиска.