Этот проект реализует веб-сервис инвертированного индекса веб-страниц на основе FastAPI, PostgreSQL и SQLAlchemy. Сервис позволяет индексировать содержимое заданных веб-страниц, строит инвертированный индекс терминов и хранит его в базе данных PostgreSQL. Для оптимизации размер индекса используется кодирование Элиаса-Гамма для сжатия списков документов. После индексации сервис предоставляет возможность поиска документов по ключевому термину через HTTP API.
Для работы сервиса требуются следующие пакеты Python:
- fastapi и uvicorn для запуска веб-сервиса.
- SQLAlchemy и psycopg2-binary для работы с базой данных PostgreSQL.
- requests (или любой другой HTTP-клиент) для загрузки содержимого веб-страниц (если используется).
Установите зависимости командой:
pip install fastapi uvicorn sqlalchemy psycopg2-binary requestsПеред запуском сервиса необходимо установить переменные окружения для подключения к базе данных PostgreSQL:
export DB_HOST=<адрес_сервера>
export DB_PORT=<порт>
export DB_USER=<имя_пользователя>
export DB_PASSWORD=<пароль>
export DB_NAME=<имя_базы_данных>После настройки окружения запустите сервер FastAPI командой:
uvicorn web_inverted_index:app --reloadПо умолчанию сервер будет доступен по адресу http://127.0.0.1:8000/.
Этот endpoint принимает JSON с полем urls, содержащим список URL для индексации. Сервис загружает содержимое указанных страниц, обновляет инвертированный индекс с использованием кодирования Элиаса-Гамма и сохраняет данные в базу.
Пример запроса:
curl -X POST http://localhost:8000/index_pages -H "Content-Type: application/json" -d '{"urls": ["http://example.com", "http://test.com"]}'Пример тела запроса:
{
"urls": [
"http://example.com",
"http://test.com"
]
}Пример ответа:
{
"indexed_terms": 2
}Этот endpoint выполняет поиск документов по заданному термину. Термин передаётся в строке запроса в параметре term. Сервис возвращает список ID документов, содержащих этот термин.
Пример запроса:
curl "http://localhost:8000/search?term=python"Пример ответа:
{
"term": "python",
"postings": [1, 2]
}В проекте есть модуль тестирования test_web_inverted_index.py, который проверяет основные функции сервиса: индексацию страниц, поиск по терминам и корректную работу кодирования/декодирования Элиаса-Гамма. Для запуска тестов используйте команду:
pytest