Blog
Para quem já sabe o básico e quer ir fundo. Aqui o assunto é como os modelos funcionam em produção: memória, roteamento, ferramentas, agentes. O lado técnico que pouca gente explica direito.
Métricas: precision@k, recall@k, F1, MRR (Mean Reciprocal Rank), NDCG (discounted cumulative gain). Quando user wants top-1 vs top-10. Golden set pra eval.
tsvector (normalized tokens), tsquery, ranking (ts_rank, ts_rank_cd), GIN index (GIN vs GiST), weights (A/B/C/D), multilingual (Portuguese dictionary), fuzzy via pg_trgm.
Quando FTS Postgres não dá: escala grande (>10M docs), relevance tuning avançado, aggregations complexas. Elasticsearch vs OpenSearch (fork AWS post-licença). Inverted index, shards, replicas.
TF (term frequency) + IDF (inverse document frequency) = TF-IDF clássico. BM25 refina: saturação de TF, length normalization (k1, b params). Default em Elastic, Lucene, tantivy.
Embeddings 1536 dims. Brute force O(n) inviável em 10M. HNSW (Hierarchical Navigable Small World) — graph-based, 10ms p99. IVF (inverted file) — cluster-based. Postgres pgvector, Pinecone, Qdrant, Weaviate.
Hybrid: BM25 (keyword) + vector (semantic) combinados. Fusion: RRF (Reciprocal Rank Fusion — simples, robust), weighted. Reranker cross-encoder (Cohere Rerank, BGE-reranker) em top-50. +30% NDCG típico.
Build search: produtos e-commerce. BM25 (title/desc) + vector (semantic) + filters (price/category) + facet aggregation. Reranker pra top-20. Dataset 100k+ items. Meta: NDCG@10 > 0.8, latency < 200ms p95.