Spaces:
Sleeping
Sleeping
Guilherme Favaron
Major update: Add hybrid search, reranking, multiple LLMs, and UI improvements
1b447de
| -- Migração 002: Otimiza índices para melhor performance | |
| -- Data: 2026-01-22 | |
| -- Descrição: Adiciona índices compostos e otimiza queries comuns | |
| -- Índice composto para busca por session_id + created_at | |
| CREATE INDEX IF NOT EXISTS idx_documents_session_created | |
| ON documents(session_id, created_at DESC); | |
| -- Índice para título (buscas textuais) | |
| CREATE INDEX IF NOT EXISTS idx_documents_title | |
| ON documents USING GIN (to_tsvector('english', title)); | |
| -- Índice para conteúdo (buscas textuais) | |
| CREATE INDEX IF NOT EXISTS idx_documents_content | |
| ON documents USING GIN (to_tsvector('english', content)); | |
| -- Índice para query_metrics por session_id e data | |
| CREATE INDEX IF NOT EXISTS idx_query_metrics_session_created | |
| ON query_metrics(session_id, created_at DESC); | |
| -- Índice para mensagens por chat_id | |
| CREATE INDEX IF NOT EXISTS idx_messages_chat_id | |
| ON messages(chat_id, created_at DESC); | |
| -- Estatísticas de uso (opcional - comentar se não necessário) | |
| -- Cria view materializada para estatísticas rápidas | |
| CREATE MATERIALIZED VIEW IF NOT EXISTS documents_stats AS | |
| SELECT | |
| session_id, | |
| COUNT(*) as total_docs, | |
| AVG(LENGTH(content)) as avg_content_length, | |
| MAX(created_at) as last_upload, | |
| MIN(created_at) as first_upload | |
| FROM documents | |
| GROUP BY session_id; | |
| -- Índice na view materializada | |
| CREATE UNIQUE INDEX IF NOT EXISTS idx_documents_stats_session | |
| ON documents_stats(session_id); | |
| -- Função para refresh da view (chamar periodicamente) | |
| CREATE OR REPLACE FUNCTION refresh_documents_stats() | |
| RETURNS void AS $$ | |
| BEGIN | |
| REFRESH MATERIALIZED VIEW CONCURRENTLY documents_stats; | |
| END; | |
| $$ LANGUAGE plpgsql; | |