Como é que o motor ordena os resultados
Pipeline determinístico, sem perfilamento. BM25-like + heurísticas declaradas. Sem LLM no ranking. Documentado para cumprir o Regulamento (UE) 2022/2065 e o EU AI Act.
1Pipeline em alto nível
2O que faz o motor
Indexa páginas web acessíveis publicamente (que não bloqueiem o crawler GeniusBot via robots.txt) e devolve resultados ordenados por relevância para a consulta do utilizador.
3Como ordena
- Indexação full-text — cada página é tokenizada e armazenada num índice invertido GIN do PostgreSQL 16 (configurações
english+simpleem paralelo). Osimplepreserva tokens como"São Paulo"que stemming inglês destruiria. - Pontuação base BM25-like —
ts_rank_cdcom pesos por campo:A(Título) >B(Resumo) >C(Conteúdo) >D(Keywords). Pesos atuais:{0.8, 0.4, 0.2, 0.1}. - Filtros geográficos — se a consulta indica
geo=pt, restringimos a domínios.pte.com.ptvia índice parcial dedicado (latência mediana < 20ms após fix de 2026-05-21). - Boosts heurísticos (multiplicativos) — ver tabela abaixo.
- Diversidade — máximo de 2 resultados por domínio nos top-10. Evita um único site dominar (ex: Wikipedia em queries informacionais).
4Tabela completa de boosts
| Sinal | Multiplicador | Quando aplica |
|---|---|---|
| Match exato de domínio com 1.ª palavra | ×30 | Query github → github.com top-1 |
| Substring no domínio | ×3 | Query continente → continente.pt |
TLD .pt | ×5 | Quando geo=PT ou query em português |
| Autoridade do domínio | (curated + Tranco rank)² | Sempre |
| Frescor | exp(-Δt / 180d) | Sempre — decaimento exponencial |
| Intenção · notícias | ×3 | Query com "notícias", "hoje", "ao vivo" |
| Intenção · comércio | ×3 | Query com "preço", "comprar", "loja" |
| Intenção · culinária | ×3 | Query com "receita", "como fazer X" |
5Exemplo trabalhado
Query: continente promoções
- Tokenização →
{continente, promoções} - FTS GIN match → 1.214 candidatos
- ts_rank_cd base → top candidato
continente.pt/promocoes: 0.412 - Boost domínio substring ×3 → 1.236
- Boost TLD .pt ×5 → 6.180
- Boost autoridade (Tranco #1.8k PT, curated +50%) → ×4.2 → 25.96
- Boost frescor (página atualizada há 2 dias) → ×0.99 → 25.70
- Diversidade: continente.pt apareceria 4× nos top-10, limitamos a 2
Resultado: continente.pt ocupa posições 1 e 2; restantes lugares vão para concorrentes e blogs de comparação.
6O que NÃO fazemos
- Não há perfil de utilizador. Não rastreamos a tua identidade.
- Não usamos modelos neurais nem LLMs no ranking (estado em 2026-05). É BM25 clássico + regras determinísticas.
- Não vendemos posições nos resultados orgânicos. Anúncios, quando ativos, são claramente identificados (DSA Art. 26).
- Não há sistema automatizado de decisão sobre utilizadores no sentido do Art. 22.º RGPD.
- Não há A/B testing oculto a alterar o ranking de subconjuntos de utilizadores.
7Parâmetros principais
| Parâmetro | Valor | Editável em runtime |
|---|---|---|
| Configuração full-text | english + simple | Não |
| Função de pontuação | ts_rank_cd (variante BM25) | Não |
| Limite de candidatos por consulta | 1000 | Sim (via env MAX_CANDIDATES) |
| Resultados por página | 10 | Sim (param limit) |
| Meia-vida do boost de frescor | 180 dias | Não |
| Máx. resultados por domínio (top-10) | 2 | Não |
| Concurrent crawler workers | 24 | Sim (systemd template) |
8Perguntas frequentes
Usam LLM (GPT, Claude, etc.) para gerar resultados?
Como é decidido o multiplicador de autoridade?
db/seed_authority.sql e será publicada quando o código for open-source.Posso contestar a posição do meu site?
privacy@adgenius.pro com o motivo. Se for caso de prejuízo claro (informação desatualizada, ranking obviamente errado), revemos manualmente em 30 dias úteis (DSA Art. 20).O ranking é diferente para utilizadores diferentes?
Vão adicionar IA no futuro?
→Contestar um resultado
Se quiseres que removamos uma página do índice ou identificaste um resultado prejudicial, contacta-nos em privacy@adgenius.pro com o URL e o motivo. Respondemos em até 30 dias úteis (Art. 20.º DSA).
Esta página é gerada pelo servidor adgenius-server-pg.cjs e reflete o código em produção. Detalhes técnicos em /api/health e /api/stats.