File size: 2,448 Bytes
8a646ad
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
---
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

```bash
# HuggingFace usa apenas o Dockerfile automaticamente
# ES_HOST padrão = http://localhost:9200
```

O `entrypoint.sh` faz tudo:
1. Inicia Elasticsearch em background (porta 9200 local)
2. Baixa `bulk_assuntos.ndjson` do GitHub (~15 MB)
3. FastAPI indexa os dados no startup
4. API disponível em `:7860`

### Modo 2 — Desenvolvimento local (docker-compose)
```bash
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) |