Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

20 Commits
 
 
 
 
 
 

Repository files navigation

Веб-сервис инвертированного индекса

Описание проекта

Этот проект реализует веб-сервис инвертированного индекса веб-страниц на основе 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/.

API

POST /index_pages

Этот 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
}

GET /search

Этот endpoint выполняет поиск документов по заданному термину. Термин передаётся в строке запроса в параметре term. Сервис возвращает список ID документов, содержащих этот термин.

Пример запроса:

curl "http://localhost:8000/search?term=python"

Пример ответа:

{
  "term": "python",
  "postings": [1, 2]
}

Тестирование

В проекте есть модуль тестирования test_web_inverted_index.py, который проверяет основные функции сервиса: индексацию страниц, поиск по терминам и корректную работу кодирования/декодирования Элиаса-Гамма. Для запуска тестов используйте команду:

pytest

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages