Este diretório contém os arquivos necessários para criar um servidor Typesense que automaticamente baixa e disponibiliza o dataset de notícias governamentais brasileiras do HuggingFace para busca rápida e eficiente.
# 1. A partir do diretório raiz do projeto govbrnews
./docker-typesense/run-typesense-server.sh
# 2. Aguarde ~3-5 minutos para setup completo e indexação
# 3. Use a API Key: govbrnews_api_key_change_in_production na porta 8108Pronto! O servidor Typesense estará rodando com 295.511 notícias indexadas e pronto para buscas ultrarrápidas com tolerância a erros de digitação.
Para usar a interface web de busca:
# Abra o arquivo web-ui.html no seu navegador
open docker-typesense/web-ui/web-ui.html
# Ou no Linux/Windows, abra manualmente:
# - Navegue até: docker-typesense/web-ui/web-ui.html
# - Clique duas vezes para abrir no navegadorA interface web oferece:
- ✅ Busca instantânea com destaque de termos encontrados
- ✅ Filtros por ano, órgão, categoria e temas
- ✅ Ordenação por data (mais recentes ou mais antigos)
- ✅ Visualização de imagens das notícias
- ✅ Links diretos para as notícias originais
- ✅ Paginação e estatísticas de resultados
O servidor Typesense criado por este container:
- Baixa automaticamente o dataset
nitaibezerra/govbrnewsdo HuggingFace - Cria uma coleção otimizada para buscas rápidas e facetadas
- Indexa todos os documentos com campos pesquisáveis e facetáveis
- Expõe a API Typesense na porta 8108 para acesso externo
- Mantém os dados persistentes através de volumes Docker
- Oferece busca com tolerância a erros de digitação (typo-tolerance)
Dockerfile- Imagem Typesense customizada com Python e dependências HuggingFacerequirements.txt- Dependências Python necessáriasinit-typesense.py- Script Python que baixa o dataset e indexa no Typesenseentrypoint.sh- Script shell que inicia o Typesense e orquestra a inicializaçãorun-typesense-server.sh- Script principal para gerenciar o servidor (build, run, cleanup, refresh)README.md- Este arquivo de documentação
| Campo | Tipo | Facetável | Descrição |
|---|---|---|---|
unique_id |
string | Não | Identificador único da notícia |
agency |
string | Sim | Agência governamental que publicou |
published_at |
int64 | Não | Timestamp Unix da publicação |
title |
string | Não | Título da notícia (pesquisável) |
url |
string | Não | URL original da notícia |
image |
string | Não | URL da imagem principal |
category |
string | Sim | Categoria da notícia |
tags |
string[] | Sim | Array de tags associadas |
content |
string | Não | Conteúdo completo em Markdown (pesquisável) |
extracted_at |
int64 | Não | Timestamp Unix da extração |
theme_1_level_1 |
string | Sim | Tema principal da notícia |
published_year |
int32 | Sim | Ano de publicação |
published_month |
int32 | Sim | Mês de publicação |
Campo de ordenação padrão: published_at (descendente)
A maneira mais fácil de usar este servidor Typesense é através do script automatizado que gerencia todo o processo:
# Opção 1: A partir do diretório raiz do projeto govbrnews (recomendado)
./docker-typesense/run-typesense-server.sh
# Opção 2: A partir do diretório docker-typesense/
cd docker-typesense
./run-typesense-server.sh
# Ver todas as opções disponíveis
./docker-typesense/run-typesense-server.sh help💡 Vantagem: O script pode ser executado de qualquer lugar - ele automaticamente detecta sua localização e muda para o diretório correto (docker-typesense/) antes de executar.
| Comando | Descrição | Tempo | Uso |
|---|---|---|---|
./docker-typesense/run-typesense-server.sh |
Setup completo (build + run + test) | ~90s | Primeira execução |
./docker-typesense/run-typesense-server.sh refresh |
Atualizar dataset (recria coleção) | ~60s | Atualizações de dados |
./docker-typesense/run-typesense-server.sh cleanup |
Limpeza completa (container + imagem + volume) | ~5s | Reinício do zero |
./docker-typesense/run-typesense-server.sh help |
Mostrar ajuda e exemplos | <1s | Consultar comandos |
Se preferir controlar manualmente cada etapa:
# A partir do diretório raiz do projeto govbrnews
cd docker-typesense
docker build -t govbrnews-typesense .# Criar um volume para persistir os dados
docker volume create govbrnews-typesense-data
# Executar o container com volume persistente
docker run -d \
--name govbrnews-typesense \
-p 8108:8108 \
-e TYPESENSE_API_KEY=govbrnews_api_key_change_in_production \
-v govbrnews-typesense-data:/data \
govbrnews-typesense# Health check
curl http://localhost:8108/health
# Informações da coleção
curl "http://localhost:8108/collections/news" \
-H "X-TYPESENSE-API-KEY: govbrnews_api_key_change_in_production"
# Busca simples
curl "http://localhost:8108/collections/news/documents/search?q=saúde&query_by=title,content" \
-H "X-TYPESENSE-API-KEY: govbrnews_api_key_change_in_production"import typesense
# Configuração do cliente
client = typesense.Client({
'nodes': [{
'host': 'localhost',
'port': '8108',
'protocol': 'http'
}],
'api_key': 'govbrnews_api_key_change_in_production',
'connection_timeout_seconds': 2
})
# Exemplo de busca simples
search_params = {
'q': 'educação',
'query_by': 'title,content',
'limit': 10
}
results = client.collections['news'].documents.search(search_params)
print(f"Found {results['found']} results")
for hit in results['hits']:
doc = hit['document']
print(f"- {doc['title']} ({doc.get('agency', 'N/A')})")const Typesense = require('typesense');
// Configuração do cliente
let client = new Typesense.Client({
'nodes': [{
'host': 'localhost',
'port': '8108',
'protocol': 'http'
}],
'apiKey': 'govbrnews_api_key_change_in_production',
'connectionTimeoutSeconds': 2
});
// Exemplo de busca
client.collections('news').documents().search({
'q': 'tecnologia',
'query_by': 'title,content',
'limit': 10
}).then((results) => {
console.log(`Found ${results.found} results`);
results.hits.forEach((hit) => {
console.log(`- ${hit.document.title}`);
});
});Credenciais padrão:
- Host:
localhost - Port:
8108 - API Key:
govbrnews_api_key_change_in_production - Collection:
news
curl "http://localhost:8108/collections/news/documents/search?q=saúde&query_by=title,content&limit=5" \
-H "X-TYPESENSE-API-KEY: govbrnews_api_key_change_in_production"# Busca por "edukação" (com erro) ainda encontra "educação"
curl "http://localhost:8108/collections/news/documents/search?q=edukação&query_by=title,content" \
-H "X-TYPESENSE-API-KEY: govbrnews_api_key_change_in_production"curl "http://localhost:8108/collections/news/documents/search?q=*&query_by=title&facet_by=agency&max_facet_values=10" \
-H "X-TYPESENSE-API-KEY: govbrnews_api_key_change_in_production"curl "http://localhost:8108/collections/news/documents/search?q=*&query_by=title&filter_by=agency:Agência%20Brasil" \
-H "X-TYPESENSE-API-KEY: govbrnews_api_key_change_in_production"curl "http://localhost:8108/collections/news/documents/search?q=educação&query_by=title,content&filter_by=published_year:2024" \
-H "X-TYPESENSE-API-KEY: govbrnews_api_key_change_in_production"curl "http://localhost:8108/collections/news/documents/search?q=tecnologia&query_by=title,content&filter_by=published_year:>=2023&facet_by=agency,category,theme_1_level_1" \
-H "X-TYPESENSE-API-KEY: govbrnews_api_key_change_in_production"curl "http://localhost:8108/collections/news/documents/search?q=*&query_by=title&sort_by=published_at:desc&limit=10" \
-H "X-TYPESENSE-API-KEY: govbrnews_api_key_change_in_production"curl "http://localhost:8108/collections/news/documents/search?q=saúde&query_by=title,content&highlight_full_fields=title,content" \
-H "X-TYPESENSE-API-KEY: govbrnews_api_key_change_in_production"O Typesense automaticamente corrige erros de digitação:
- "edjcação" → "educação"
- "saude" → "saúde"
- "tecnolgia" → "tecnologia"
Campos facetáveis permitem criar filtros dinâmicos:
agency- Filtrar por agênciacategory- Filtrar por categoriatags- Filtrar por tagstheme_1_level_1- Filtrar por temapublished_year- Filtrar por anopublished_month- Filtrar por mês
Embora não implementado neste dataset, o Typesense suporta busca geoespacial.
Você pode configurar sinônimos para melhorar a busca:
{
"synonyms": [
["saúde", "medicina", "hospitais"],
["educação", "ensino", "escola"]
]
}# Ver logs em tempo real
docker logs -f govbrnews-typesense
# Ver logs da inicialização
docker logs govbrnews-typesense | grep -E "(initialization|Download|Indexing)"# Informações da coleção
curl "http://localhost:8108/collections/news" \
-H "X-TYPESENSE-API-KEY: govbrnews_api_key_change_in_production"
# Health check
curl http://localhost:8108/health
# Estatísticas do servidor
curl "http://localhost:8108/stats.json" \
-H "X-TYPESENSE-API-KEY: govbrnews_api_key_change_in_production"-
Verifique se o container está rodando:
docker ps | grep govbrnews-typesense -
Se não estiver rodando, inicie o servidor:
./run-typesense-server.sh
-
Se o refresh continuar falhando, faça limpeza completa:
./run-typesense-server.sh cleanup ./run-typesense-server.sh
-
Verifique se a porta 8108 não está em uso:
lsof -i :8108
-
Verifique os logs:
docker logs govbrnews-typesense
-
Verifique os logs de inicialização:
docker logs govbrnews-typesense | grep -i "download\|error\|dataset"
-
Para forçar reload do dataset:
./run-typesense-server.sh refresh
Em caso de problemas persistentes:
# Limpeza completa e restart
./run-typesense-server.sh cleanup
./run-typesense-server.sh
# Isso resolve a maioria dos problemasPara atualizar apenas os dados (recria a coleção):
./run-typesense-server.sh refreshVantagens:
- ⚡ Rápido (~60s)
- 🔄 Recria coleção com dados mais recentes
- 📊 Mantém configurações do servidor
Para atualizações com mudanças na estrutura:
-
Limpeza completa:
./run-typesense-server.sh cleanup
-
Restart do zero:
./run-typesense-server.sh
- Busca ultrarrápida: < 50ms para a maioria das queries
- Indexação em tempo real: Novos documentos são pesquisáveis imediatamente
- Typo-tolerance: Sem impacto significativo na performance
- Faceted search: Agregações rápidas mesmo em grandes volumes
- Use filtros antes de busca textual para reduzir o conjunto de dados
- Limite os campos em
query_byapenas aos necessários - Use paginação com
pageeper_pagepara grandes resultados - Cache resultados comuns no lado do cliente
| Característica | Typesense | PostgreSQL |
|---|---|---|
| Tipo de busca | Full-text search otimizado | SQL queries |
| Typo-tolerance | Sim, nativo | Não (requer extensões) |
| Performance de busca | < 50ms | Varia (100ms - 1s+) |
| Faceted search | Nativo e rápido | Requer agregações complexas |
| Highlighting | Nativo | Manual |
| Relevância | Algoritmo de ranking avançado | Básico (tsvector) |
| API | RESTful JSON | SQL |
| Ideal para | Buscas interativas, autocomplete | Queries complexas, transações |
Para contribuir com melhorias neste setup Typesense:
- Faça suas modificações nos arquivos do diretório
docker-typesense/ - Teste localmente construindo e executando a imagem
- Documente suas mudanças neste README
- Submeta um pull request
Para questões relacionadas ao:
- Dataset: Consulte o repositório principal do govbrnews
- Configuração Typesense: Consulte a documentação oficial do Typesense
- Docker: Consulte a documentação do Docker
- Typesense Documentation
- Typesense API Reference
- Typesense Cloud - Managed hosting
- Typesense GitHub
Este projeto segue a mesma licença do projeto principal govbrnews.