Page: blog/busqueda-inteligente

Sistema de Búsqueda Inteligente

Búsqueda Básica

Busca en títulos, descripciones, keywords, tags y contenido:

<?php
// Obtener término de búsqueda
$q = $_GET['q'] ?? '';

if (!empty($q)) {
    // Buscar en todos los contenidos
    $resultados = AntCMSextend::Run()->search($q, '', 20);
    
    if (empty($resultados)) {
        echo '<p>No se encontraron resultados para: ' . htmlspecialchars($q) . '</p>';
    } else {
        echo '<p>Se encontraron ' . count($resultados) . ' resultados</p>';
        
        foreach ($resultados as $resultado) {
            echo '<article>';
            echo '  <h3><a href="' . $resultado['url'] . '">';
            echo      $resultado['title'];
            echo '  </a></h3>';
            echo '  <p>' . AntCMS::short($resultado['description'], 200) . '</p>';
            echo '  <small>' . $resultado['date'] . '</small>';
            echo '</article>';
        }
    }
}
?>

Formulario de Búsqueda

<form action="/buscar" method="GET">
    <input type="search" 
           name="q" 
           placeholder="Buscar..." 
           value="<?= htmlspecialchars($_GET['q'] ?? '') ?>"
           required>
    <button type="submit">🔍 Buscar</button>
</form>

Búsqueda en Carpeta Específica

// Buscar solo en blog
$resultados = AntCMSextend::Run()->search($q, 'blog', 20);

// Buscar solo en noticias
$resultados = AntCMSextend::Run()->search($q, 'noticias', 20);

Destacar Término de Búsqueda

<?php
function destacarTermino($texto, $termino) {
    $patron = '/(' . preg_quote($termino, '/') . ')/i';
    return preg_replace($patron, '<mark>$1</mark>', $texto);
}

foreach ($resultados as $resultado) {
    echo destacarTermino($resultado['title'], $q);
}
?>

Búsqueda con Cache

// Cachear resultados de búsqueda por 10 minutos
$cacheKey = 'search_' . md5($q);
$resultados = AntCMSextend::cache($cacheKey, function() use ($q) {
    return AntCMSextend::Run()->search($q, '', 50);
}, 600);
💡 Tip: La búsqueda es case-insensitive y busca en múltiples campos simultáneamente para obtener los mejores resultados.