Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Серверные технологии и Flash (http://www.flasher.ru/forum/forumdisplay.php?f=62)
-   -   Поиск по сайту (http://www.flasher.ru/forum/showthread.php?t=110097)

Vitality13 26.03.2008 23:46

Поиск по сайту
 
Здравствуйте.

Помогите разобраться в составлении поиска по сайту.
В составе сайта около 1000 статических страниц HTML. Множество страниц находится в папках. Я хочу сделать поиск по всем страницам с помощью РНР и MySQL. Для это мне необходимо что-то сделать с помощью РНР, что бы занести всю информацию в БД. Подскажите, каким образом нужно обработать информацию со всех страниц, чтобы убрать тэги и поместить в таблицу в БД. (вроде как с помощью буферизации или я ошибаюсь?) Как выглядит этот код и где он должен находиться?

Спасибо.

UnVisible 29.03.2008 19:58

Вот тебе функция которая убирает ХТМЛ и ПХП теги:
strip_tags($text);
Ну а далее, если ты уже решил занести в базу (хотя первый раз слышу чтобы так делали =), лучше наверно будет через explode(' ',$file_content),
или сразу прочитать файл как массив, потом фильтрануть его на уникальность слов, чтобы не повторялись.
Потом занести это дело в базу с полями типа: ID | WORD | URL_PAGE | PAGE_NAME
При заносе следующей страницы проверять нет ли такого слова уже в базе запросом типа SELECT id WHERE word LIKE '%'.mysql_escape_string($word).'%'
Вот и все =)

ПРи поиске, берем текст что ввел клиент, делаем с нево масив слов и генерируем запрос и получаем результат! =)

Vitality13 27.05.2008 22:08

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

"Поиск через БД Mysql
алгоритм следующий:
1. создаем таблицу

CREATE TABLE search (
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
url VARCHAR(200),
content TEXT,
FULLTEXT (content)
);


2. буферизируем ссылку

$url=index.php //Как я понимаю, это начальная страница
$bufer = file_get_contents($url);


3. обрабатываем информацию

$bufer = htmlspecialchars(stripslashes($bufer));


4. записываем в БД

$sql=mysql_query("insert into search (url, content) values ('$url', '$bufer')");


PS необходимо еще будет придумать автоматический обход ссылок по сайту и пункты со 2 по 4 поместить в функцию перехода по ссылкам"

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

Спасибо!

dmx102 03.06.2008 10:14

Я бы советовал смотреть в сторону Яндекс.XML...

ilzhan 13.06.2008 04:38

А я бы посоветовал DataparkSearch Engine и Яndex.Server

Vitality13 21.08.2008 16:22

Здравствуйте

Прошу помочь разобраться в ошибках с поиском.
У меня есть БД MySQL с таблицей такой структуры:
Код:

CREATE TABLE search (
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
url VARCHAR(200),
body TEXT,
FULLTEXT (title)
) TYPE=MyISAM;

Форма для поиска:
Код:

<form action="search.php" method="post" enctype="multipart/form-data" name="form1" id="form1">
<table width="230" border="0" cellpadding="0" cellspacing="0" class="text">
<tr align="center" class="text">
<td width="150"><input name="name" type="text" id="name" value='<?php echo $name; ?>' size="20" maxlength="50" /></td>
<td width="80"><label>
<input type="submit" name="button_search" id="button_search" value="Поиск" />
<input type="hidden" name="scr" value="1">
</label></td>
</tr>
</table>
</form>

Поиск осуществляется по следующему сценарию:
Код:

<?php

  if(isset($_POST['scr']))
  {
  if(empty($name))
{
  echo "<DL><DT>Не введено искомое слово
            <DD>Введите поисковое слово и повторите поиск.</DL>";
  exit();
}
    $name = trim($name);
        $query = "SELECT * FROM search WHERE MATCH(body) AGAINST('$_POST[name]*' IN BOOLEAN MODE)
        GROUP BY id ASC";
      $post = mysql_query($query);
        if($post)
        {
          $num = mysql_num_rows($post);
          if($num>0)
          {
          echo"
              <DL>
              <DT>По поисковому запросу найдено соответствий: $num
              </DL>
              <DL>";
            while($posts = mysql_fetch_array($post))
            {
            echo "<DT><a href=http://".$posts['url'].">".$posts['body']."</a><br>";
            }
                  echo "</DL>";
          }
          else
          {
            echo "<DL><DT>По поисковому запросу ничего не найдено.
            <DD>Попробуйте изменить искомое слово.</DL>";
                        exit();
          }
        }
          }
?>

Поиск сам работает, из базы данных выводится результат. Но есть несколько проблем, которые не могу никак устранить:
1) При не заполненном поле ввода поиска или при отсутствии искомого в БД, выдается ошибка, как прописано в коде, но код, идущий за пхп-кодом не выполняется. Такое ощущение, что после выполнения операции
Код:

exit();
чтение кода прекращается... Но при выполнении поиска и выводе положительного результата в виде ссылки, все нормально. Помогите разобраться.
2) При следующем поиске (другого искомого слова) результат приписывается к предыдущему, вместо его замены... Выходит, что вместе с последним результатом на страницу выводится все то, что искалось до этого.
Помогите найти и устранить ошибки.
И еще кое-что. Возможно ли, чтобы при нахождении единственного результата поиска, осуществить переход сразу на страницу, содержащую искомое, без вывода ссылки-посредника (как сделано в этом коде), ведь в БД хранится запись с полем url, где прописан адрес страницы.

Заранее спасибо!


Часовой пояс GMT +4, время: 05:51.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.