metadata
title: Assuntos Juridicos API
emoji: ⚖️
colorFrom: blue
colorTo: indigo
sdk: docker
app_port: 7860
⚖️ Assuntos Jurídicos — FastAPI + Elasticsearch
API de busca full-text sobre 5.184 assuntos jurídicos do STJ/TST em 22 ramos do Direito.
🚀 Dois modos de execução
Modo 1 — HuggingFace Spaces (single container)
ES + FastAPI no mesmo container — sem docker-compose
# HuggingFace usa apenas o Dockerfile automaticamente
# ES_HOST padrão = http://localhost:9200
O entrypoint.sh faz tudo:
- Inicia Elasticsearch em background (porta 9200 local)
- Baixa
bulk_assuntos.ndjsondo GitHub (~15 MB) - FastAPI indexa os dados no startup
- API disponível em
:7860
Modo 2 — Desenvolvimento local (docker-compose)
git clone https://huggingface.co/spaces/SEU_USER/SEU_SPACE
cd SEU_SPACE
# Sobe ES separado + API (ES_HOST=http://elasticsearch:9200)
docker compose up --build
# Acesse
open http://localhost:7860/docs
📡 Endpoints
| Método | Rota | Descrição |
|---|---|---|
| GET | / |
Landing page |
| GET | /health |
Status API + ES |
| GET | /busca?q=... |
Full-text + filtros + facets |
| POST | /busca |
Busca via JSON |
| GET | /autocomplete?q=... |
Typeahead |
| GET | /assuntos/{id} |
Detalhe por ID |
| GET | /hierarquia |
Árvore de ramos/categorias |
| GET | /grafo/filhos?ancestor=... |
Drill-down |
| POST | /admin/reindex |
Re-indexa tudo |
| GET | /docs |
Swagger UI |
🗂️ Estrutura
├── Dockerfile ← single-container (ES + FastAPI)
├── docker-compose.yml ← multi-container (dev local)
├── entrypoint.sh ← inicia ES + download + uvicorn
├── app/
│ ├── main.py
│ ├── routes.py
│ ├── es_client.py
│ ├── schemas.py
│ ├── builders.py
│ └── config.py
├── data/
│ └── es_mapping.json ← único arquivo de dados no repo
└── scripts/
└── test_api.py
⚙️ Variáveis de Ambiente
| Variável | HF Spaces | Docker Compose |
|---|---|---|
ES_HOST |
http://localhost:9200 |
http://elasticsearch:9200 |
ES_INDEX |
assuntos_juridicos |
assuntos_juridicos |
PORT |
7860 |
7860 |
WORKERS |
1 |
1 |
ES_JAVA_OPTS |
-Xms512m -Xmx512m |
(gerenciado pelo ES container) |