Есть статичный старый сайт, с кучами страниц сделанных на 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);
}
?>
Попробуйте использовать кастомный поиск по сайту от гугла. Не уверен, зависит ли база поиска от текущего индекса сайта, но как вариант стоит рассмотреть. Больше информации в документации
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
Всем доброго времени сутокИспользую тему betheme И почему-то слетело корректное отображение товаров Как видно первый товар добавляется корректно,последующие...
Здравствуйте! Помогите пожалуйста разобратьсяЕсть сайт на битриксе
Добрый день! Подскажите пожалуйста, как можно узнать изменилась ли веб страница, не мониторя ее целый день? Например, проверяя контрольную...