102 lines
3.0 KiB
Ruby
102 lines
3.0 KiB
Ruby
#!/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"
|