Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Поиск по сайту
 
 автор: Sasha   (07.05.2005 в 19:56)   письмо автору
 
 

Не знаю, в тему ли... :)
Сложно ли организовать поиск по сайту самостоятельно?
Уже замучился... :))

   
 
 автор: Artem S.   (07.05.2005 в 20:46)   письмо автору
 
   для: Sasha   (07.05.2005 в 19:56)
 

Смотря, какая структура у сайта. Да и еще сложность зависит от того, где находиться основная информация.

Если нужно сделать простой поиск по словам в статьях, хранящихся в базе данных, где есть название статьи. То нет, не сложно : )

   
 
 автор: JIEXA   (07.05.2005 в 20:57)   письмо автору
 
   для: Artem S.   (07.05.2005 в 20:46)
 

а можно написать скрипт-паук как яндекс. Я на этом форуме выкладывал исходник. Такой подход хорош тем, что без разницы откуда инфа берется :)

   
 
 автор: ZC   (07.05.2005 в 22:41)   письмо автору
 
   для: JIEXA   (07.05.2005 в 20:57)
 

Вот этот исходник о котором рассказывал JIEXA:


CREATE TABLE search_index ( 
  uri varchar(255) NOT NULL default '', 
  title text NOT NULL, 
  description text NOT NULL, 
  text mediumtext NOT NULL, 
  UNIQUE KEY (uri), 
  FULLTEXT KEY (text) 
) TYPE=MyISAM; 

Паук: 

<?php 
$indexed
=array(); // массив, где мы отмечаем уже проиндексированные страницы 
// $uri - стартовый адрес 
function spider($uri='/'$depth=0){ 
  global 
$indexed
  
// URI уже проиндексирован, пропускаем 
  
if($indexed[$uri]) return; 
  
// удаляем из кэша старую версию рассматриваемого URI 
  
mysql_query("delete from search_index where uri='".mysql_real_escape_string($uri)."'"); 
  
// формируем URL для вызова страницы сайта по HTTP 
  
$url='http://'.$_SERVER["HTTP_HOST"].$uri
  
// берем мета-теги. Для упрощения работы у нас сайт заголовок записывает не только в <title>, то и <meta name="title"> 
  
$meta=@get_meta_tags($url); 
  
// либо ошибка, либо не документ. Пропускаем 
  
if(!$meta) return; 
  
// тут еще один момент для оптимизации. Мы 2 раза запрашиваем страницу, т. к. get_meta_tags не может работать со строкой, только с файлом. Можно один раз вызвать страницу по HTTP и сохранить в локальный файл. 
  
$content=file_get_contents($url); 
  
// чистим контент от тегов и html-entity (и заодно от повторяющихся пробелов) 
  
$text=preg_replace('/(s+)|(&[a-zA-Z0-9#]+;)/'' 'strip_tags($content)); 
  
// записываем данные по URI в индекс 
  
mysql_query("insert into search_index set 
       uri='"
.mysql_real_escape_string($uri)."', 
       title='"
.mysql_real_escape_string($meta['title'])."', 
       description='"
.mysql_real_escape_string($meta['description'])."', 
       text='"
.mysql_real_escape_string($meta['title'].
"
.$page['description'].
"
.$text)."'"); 
  
// отмечаем в массиве, что этот URI мы проиндексировали 
  
$indexed[$uri]=true
  
// теперь делаем обход ссылок 
  // тут опять поле для оптимизаторства: мы здесь удаляем все теги кроме <A> и выбираем все, что идет после href= и заключено в двойные или одинарные кавычки 
  
if($depth<3){ 
  
// если мы не слишком глубоко углубляемся в рекурсию 
    
$links=split("href=",strip_tags($content,'<a>')); 
    foreach(
$links as $link){ 
      
$f=substr($link,0,1); 
      
$link=substr($link,1); 
      if(
$f=='"' || $f=="'"){ 
        
$link=substr($l,0,strpos($link,$f)); 
        
// пропускаем ссылки, начинающиеся на http://, javascript: и пр. 
        
if(strpos($link,'http://')===|| strpos($link,'https://')===|| strpos($link,'javascript:')===|| strpos($link,'mailto:')===|| strpos($link,'#')===0) continue; 
      }else{ 
        
//пропускаем ссылки без кавычек 
        
continue; 
      } 
      
// приводим ссылку к абсолютному виду 
      // тут тоже можно пооптимизировать 
      
$diez=strpos($link,'#'); 
      if(
$diez!==null){ 
        
$link=substr($link,0,$diez); 
      } 
      if(
substr($link,0,1)!='/'){ 
        
$link=$uri.$link
      } 
      
// рекурсивный вызов паука на очередную ссылку 
      
spider($link$depth+1); 
    } 
  } 

// начальный вызов паука на корень сайта. Можно начинать его работу, например, и с карты сайта. 
spider('/'); 
// оптимизируем таблицу индекса, а то она знатно раздувается. 
db_query('optimize table search_index'); 
?>   

   
 
 автор: Sasha   (07.05.2005 в 22:52)   письмо автору
 
   для: ZC   (07.05.2005 в 22:41)
 

:))
Вы меня переоцениваете!
Поиск в общем-то поиск по небольшому сайту 5-30 страничек html с разнообразной инфой...которую нужно находить и показывать где она, что-то типа этого... :)

А, что можно сделать с пауком конкретнее. Он всё проиндексирует и сложит. А как это достать поиском. И ещё - надо, чтоб индексировался только мой сайт, не выходя на внешние ссылки...или в нём это уже есть
 $links=split("href=",strip_tags($content,'<a>')); 
    foreach($links as $link){ 
      $f=substr($link,0,1); 
      $link=substr($link,1); 
      if($f=='"' || $f=="'"){ 
        $link=substr($l,0,strpos($link,$f)); 
        // пропускаем ссылки, начинающиеся на http://, javascript: и пр. 


?

   
 
 автор: Sasha   (08.05.2005 в 00:08)   письмо автору
15.6 Кб
 
   для: Sasha   (07.05.2005 в 22:52)
 

Нашёл в сети такую штуку, для организации поиска по сайту, у кого будет время и интерес, глянте...

   
 
 автор: cheops   (08.05.2005 в 00:22)   письмо автору
 
   для: Sasha   (07.05.2005 в 22:52)
 

Парочку поисков создавалось также на этом форуме, можно начать раскопки с этих тем
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=1593
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=1625
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=1886

   
 
 автор: Sasha   (08.05.2005 в 16:14)   письмо автору
 
   для: cheops   (08.05.2005 в 00:22)
 

http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=148
Насколько я понимаю, для поиска нужно создать список ключевых слов и ID страниц где они находятся, затем всё засунуть в БД и искать в ней?
Затем выводить страницу, подсвечивая найденное...
Это здорово, примерно то, что надо!
Но вот как это осуществляется?

Теперь поиск можно осуществлять примерно следующим образом:

<?php 
SELECT id FROM base 
WHERE MATCH
(textAGAINST('искомое слово'); 
-- 
или 
SELECT id FROM base 
WHERE MATCH
(textAGAINST('искомое') AND 
MATCH(textAGAINST('слово'); 
-- 
или 
SELECT id FROM base 
WHERE MATCH
(textAGAINST('искомое') OR 
MATCH(textAGAINST('слово'); 

Это что-то не понятно....это и есть поисковик ?


Про вариант поиска в буфере я что-то не совсем понял, что засовывается в буфер, 10 страниц?

   
 
 автор: cheops   (08.05.2005 в 17:59)   письмо автору
 
   для: Sasha   (08.05.2005 в 16:14)
 

Это непонятное полнотекстовый поиск: text - это столбец, проиндексированный индексом FULLTEXT, а аргумент ключевого слова AGAINST - искомое слово.

В буффере уже не поиск осуществляется а подсветка искомых слов.

   
 
 автор: Sasha   (08.05.2005 в 19:44)   письмо автору
 
   для: cheops   (08.05.2005 в 17:59)
 

1) Будет ли это работать с HTML ?

2) Я так понял, что в результате пользователю выдаётся страница с подсвеченными ключевыми словами. А если слова на нескольких страницах?

   
 
 автор: cheops   (09.05.2005 в 00:22)   письмо автору
 
   для: Sasha   (08.05.2005 в 19:44)
 

1) Нет полнотекстовый поиск работает только с текстом помщённым в базу данных, так как это SQL-код.
2) Хм... но ведь посетитель, для того, чтобы просмотреть страницу должен её открыть? Вот тут ключевые слова и подсвечиваются.

   
 
 автор: Sasha   (09.05.2005 в 12:51)   письмо автору
 
   для: cheops   (09.05.2005 в 00:22)
 

1) А, что можно сделать с html, какие варианты организации поиска есть, вот например со скриптом-поисковиком предложенным выше...

2)Наверное это не самый лучший вариант, когда нужно обходить страницы, ищя подсвеченные слова :))

   
 
 автор: Sasha   (10.05.2005 в 13:12)   письмо автору
 
   для: Sasha   (09.05.2005 в 12:51)
 

Никаких идей нету ?

   
 
 автор: cheops   (10.05.2005 в 13:28)   письмо автору
 
   для: Sasha   (09.05.2005 в 12:51)
 

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

   
 
 автор: Sasha   (10.05.2005 в 14:16)   письмо автору
 
   для: cheops   (10.05.2005 в 13:28)
 

Страниц мало 3 группы по 5 страниц. поиск только внутри группы страниц.
информация расположена в ячейках таблицы, возможно ли, чтоб в результате поиска была страница с ячейками табл. в которых были ключевые слова?
Или в результате будут только адреса страниц?

   
 
 автор: cheops   (11.05.2005 в 12:10)   письмо автору
 
   для: Sasha   (10.05.2005 в 14:16)
 

Сначала будут только адреса, затем следует работать с самим файлом, как много в нём информации?

   
 
 автор: Sasha   (13.05.2005 в 00:02)   письмо автору
 
   для: cheops   (11.05.2005 в 12:10)
 

Информации?
Весь html код занимает то 5 до 10 кб.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования