#!/usr/bin/env ruby # frozen_string_literal: true # tools/prueba_simple_buscador.rb — Prueba simplificada del sistema de búsqueda # ================================================================================ # Prueba básica del sistema de búsqueda para identificar problemas require 'pg' require 'yaml' # Cargar configuración config_path = File.join(__dir__, 'config', 'database.yml') config = YAML.load_file(config_path)['development'] # Conectar a PostgreSQL puts "🔌 Conectando a PostgreSQL..." conn = PG.connect( host: config['host'], port: config['port'], dbname: config['database'], user: config['username'], password: config['password'] ) puts "✅ Conexión establecida\n\n" # Prueba 1: Consulta SQL simple puts "1. Consulta SQL simple (entradas):" resultados = conn.exec("SELECT id, descripcion, estado FROM bitacoras.entradas LIMIT 3") resultados.each do |row| puts " • #{row['id']}: #{row['descripcion'][0..50]}... (#{row['estado']})" end # Prueba 2: Búsqueda con LIKE puts "\n2. Búsqueda con LIKE 'dashboard':" resultados = conn.exec_params( "SELECT id, descripcion, estado FROM bitacoras.entradas WHERE descripcion ILIKE $1 LIMIT 3", ['%dashboard%'] ) if resultados.ntuples > 0 resultados.each do |row| puts " • #{row['id']}: #{row['descripcion'][0..50]}... (#{row['estado']})" end else puts " • No se encontraron resultados" end # Prueba 3: Consulta con JOIN puts "\n3. Consulta con JOIN (entradas + nodos):" sql = <<-SQL SELECT e.id, e.descripcion, e.estado, n.nombre as nodo_nombre FROM bitacoras.entradas e LEFT JOIN bitacoras.nodos n ON e.nodo_id = n.id WHERE e.estado = '✅' LIMIT 3 SQL resultados = conn.exec(sql) if resultados.ntuples > 0 resultados.each do |row| puts " • #{row['id']}: #{row['descripcion'][0..50]}... (#{row['estado']}) - Nodo: #{row['nodo_nombre']}" end else puts " • No se encontraron entradas completadas" end # Prueba 4: Full-text search (si existe el índice) puts "\n4. Probando full-text search:" begin # Primero verificar si existe la extensión conn.exec("CREATE EXTENSION IF NOT EXISTS pg_trgm") # Búsqueda simple con trigram resultados = conn.exec_params( "SELECT id, descripcion, estado FROM bitacoras.entradas WHERE descripcion % $1 LIMIT 3", ['sistema'] ) if resultados.ntuples > 0 puts " • Búsqueda trigram encontrada #{resultados.ntuples} resultados" resultados.each do |row| puts " - #{row['id']}: #{row['descripcion'][0..50]}..." end else puts " • No se encontraron resultados con trigram" end rescue => e puts " • Error en full-text search: #{e.message}" end # Prueba 5: Estadísticas puts "\n5. Estadísticas de la base de datos:" tablas = ['nodos', 'bitacoras', 'temas', 'entradas'] tablas.each do |tabla| count = conn.exec("SELECT COUNT(*) as total FROM bitacoras.#{tabla}")[0]['total'] puts " • #{tabla}: #{count} registros" end conn.close puts "\n🔌 Conexión cerrada" puts "\n✅ Prueba completada"