Как сделать поиск по статичному сайту?

275
02 июня 2017, 14:07

Есть статичный старый сайт, с кучами страниц сделанных на html. Вопрос в том как реализовать более менее быстрый поиск? В какую сторону смотреть? Так же сделал на php скрипт который просто ищет текст в файлах но работает ооочень медленно, мб есть какие то способы индексации страниц или что вроде того.

<?php
ini_set('max_execution_time', 900);
if(!isset($_GET['s'])) {
    die('You must define a search term!');
}
$search_in = array('html', 'htm');
$search_dir = '.';
$countWords = 15;
$files = list_files($search_dir);
$search_results = array();
foreach($files as $file){
    $contents = file_get_contents($file);
    preg_match_all("/\<p\>(.*)".$_GET['s']."(.*)\<\/p\>/i", $contents, $matches, PREG_SET_ORDER);
    foreach($matches as $match){
        $match[1] = trim_result($match[1]);
        $match[2] = trim_result($match[2], true);
        $match[1] .= '<span style="background: #ffff00;">';
        $match[2] = '</span>'.$match[2];
        preg_match("/\<title\>(.*)\<\/title\>/", $contents, $matches2);
        $search_results[] = array($file, $match[1].$_GET['s'].$match[2], $matches2[1]);
    }
}
?>
    <html>
    <head>
        <title>Search results</title>
    </head>
    <body>
    <?php foreach($search_results as $result) :?>
        <div>
            <h3><a href="<?php echo $result[0]; ?>"><?php echo $result[2]; ?></a></h3>
            <p><?php echo $result[1]; ?></p>
        </div>
    <?php endforeach; ?>
    </body>
    </html>
<?php
function list_files($dir){
    global $search_in;
    $result = array();
    if(is_dir($dir)){
        if($dh = opendir($dir)){
            while (($file = readdir($dh)) !== false) {
                if(!($file == '.' || $file == '..')){
                    $file = $dir.'/'.$file;
                    if(is_dir($file) && $file != './.' && $file != './..'){
                        $result = array_merge($result, list_files($file));
                    }
                    else if(!is_dir($file)){
                        if(in_array(get_file_extension($file), $search_in)){
                            $result[] = $file;
                        }
                    }
                }
            }
        }
    }
    return $result;
}
function get_file_extension($filename){
    $result = '';
    $parts = explode('.', $filename);
    if(is_array($parts) && count($parts) > 1){
        $result = end($parts);
    }
    return $result;
}
function trim_result($text, $start = false){
    $words = split(' ', strip_tags($text));
    if($start){
        $words = array_slice($words, 0, $countWords);
    }
    else{
        $start = count($words) - $countWords;
        $words = array_slice($words, ($start < 0 ? 0 : $start), $countWords);
    }
    return implode(' ', $words);
}
?>
Answer 1

Попробуйте использовать кастомный поиск по сайту от гугла. Не уверен, зависит ли база поиска от текущего индекса сайта, но как вариант стоит рассмотреть. Больше информации в документации

READ ALSO
Некорректно отображаются товары

Некорректно отображаются товары

Всем доброго времени сутокИспользую тему betheme И почему-то слетело корректное отображение товаров Как видно первый товар добавляется корректно,последующие...

168
вывести второе значение из массива

вывести второе значение из массива

Подскажите, есть такой массив:

249
Как менять порядок вывода баннеров для отдельных разделов сайта (Битрикс)?

Как менять порядок вывода баннеров для отдельных разделов сайта (Битрикс)?

Здравствуйте! Помогите пожалуйста разобратьсяЕсть сайт на битриксе

353
как узнать изменилась ли веб страница?

как узнать изменилась ли веб страница?

Добрый день! Подскажите пожалуйста, как можно узнать изменилась ли веб страница, не мониторя ее целый день? Например, проверяя контрольную...

183