Crear un buscador interno

  • Autor Autor zarakatajamember
  • Fecha de inicio Fecha de inicio
zarakatajamember

zarakatajamember

Préstamo
Épsilon
Verificación en dos pasos activada
Verificado por Whatsapp
¡Ha verificado su Paypal!
Verificado por Binance
Buenas! como estan! Tengo una web que la hice enteramente en php. ejemplo
dominio.com/categoria1/articulo1.php
dominio.com/categoria1/articulo2.php
dominio.com/categoria1/articulo3.php
dominio.com/categoria2/articulo1.php
dominio.com/categoria2/articulo2.php
dominio.com/categoria2/articulo3.php

y asi sucesivamente. Queria crear un buscador. Obviamente no tiene una base de dato, pero me gustaría hacer un buscador interno. Como enlazo el buscador creado en html, css y jquery para que busque dentro de toda la web. Quizás es una consulta tonta, pero la verdad no lo se.
 
Seria prácticamente usando

PHP:
$texto = file_get_contents('http://dominio.com/categoria1/articulo1.php'

para extraer en una variable el texto de todos tus archivos php.

Y con strpos para encontrar en la cadena (que obtuviste con file_get_contents) el texto que buscas.

PHP:
$encontrar=strpos($texto,'Palabra a ser buscada');
if ($encontrar)
{
    echo 'encontrado';
}

Algo asi sería
 
Me parece exageradamente poco eficiente, pero creo que lo mejor sería iterar sobre las categorías, luego sobre los artículos y buscar la cadena requerida, para mayor eficiencia lo mejor sería usar fgets para ir línea por línea en lugar de extraer todo el contenido, acá por encima, no sé si funcione y si lo hace tendrías que adaptarlo

PHP:
<?php
    function searchLineByLine($file, $str){
        if(!file_exists($file))
            return false; // Si no existe el archivo, devolvemos falso
        $handler = fopen($file, 'r'); // El handler del archivo en solo lectura
        while(($line = fgets($handler)) !== false){ // Mientras existan nuevas líneas
            if(strpos($line, $str)!==false){ // Comparador estricto, porque puede ser 0 si está al inicio de la líena
                return true;
            }
        }
        return false;
    }
    $Buscar = "TEXTO A BUSCAR";
    $Match = []; // Array que contendrá los archivos que, valga al redundancia, contengan {$Buscar}
    $Categories = new FilesystemIterator('/PATH/TO/CATEGORIES',FilesystemIterator::SKIP_DOTS); // Creamos un iterador
    foreach($Categories as $singleCategory){ // Iteramos
        if(!$singleCategory->isDir())
            continue; // Si la categoría no es un directorio, ignoramos
        $Articles = new FilesystemIterator($singleCategory->getPathname(),FilesystemIterator::SKIP_DOTS); // Iterador de artículos
        foreach($Articles as $singleArticle){
            if($Article->isDir())
                continue; // Si es directorio, ignoramos el artículo
            if(searchLineByLine($Article->getPathname(), $Buscar))
                $Match[] = $Article->getPathname(); // Si encontramos coincidencia, lo agregamos a la lista de matches
        }
    }
 
No es una pregunta tonta, hacer búsquedas en texto es toda una ciencia, si alguien lo pudiese hacer bien se haría millonario.... espera, Google ya lo hizo. Puede lidiar con faltas de ortografía, sinónimos, y contexto ( por ejemplo si buscas "café" ¿es un lugar a donde ir a tomar ese brebaje o un color?)
Puedes usar Google adaptado a tu sitio https://support.google.com/programmable-search/answer/4513751?hl=es&ref_topic=4513742
 
@OmarCoder cuando dices "exageradamente poco eficiente" te refieres a que no conviene o al comentario anterior?
@jmdoren investigare sobre el tema, quizás es lo mas fácil de hacer. Me pregunto si google testeará la interacción de los usuarios e influirá en el seo
 
Hay que ver de acuerdo a lo mas conveniente posible.

Puede haber casos que si buscas linea por linea de cada archivo, nunca termine el giro (con el pasar del tiempo).

Hay muchas formas de buscar, pero creo que debes en mi opinion analizar y ver que te conviene, si vale la pena tanto esfuerzo en vez de hacer un simple select en la base de datos.

👌
 
Si no usas una base de datos relacional, deberias trasladarlos a un JSON (que seria tu base de datos) y desde ahi realizar las consultas.
No es para nada optimo buscar en archivos teniendo en cuenta la escalabilidad del proyecto
 
Atrás
Arriba