An open API service indexing awesome lists of open source software.

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

Awesome Lists containing this project

README

          

# Нечеткий поиск

![Alt](https://repobeats.axiom.co/api/embed/d548e6048342d76888356f912d6991d3a418b5ae.svg "Repobeats analytics image")

## Запуск через 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")

Позволяет указать слово (для поиска), тип алгоритма (которым можно искать), корпус (который можно использовать) и возвращает время работы алгоритма + результат поиска.