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

Форум MySQL

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

 

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

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

тема: Поиск по сайту
 
 автор: Timur   (06.06.2006 в 08:55)   письмо автору
 
 

Не могу придумать как организовать поиск по сайту

   
 
 автор: Football   (06.06.2006 в 09:18)   письмо автору
 
   для: Timur   (06.06.2006 в 08:55)
 

Где храниться информация? В БД или в файлах? Почему поиск хотите вести? По статьям, по новостям?

   
 
 автор: Squadron   (06.06.2006 в 10:38)   письмо автору
 
   для: Football   (06.06.2006 в 09:18)
 

Мне мож тоже попути подскажите:
у меня в бд, поиск желательно бы организовать по словам в новостях

   
 
 автор: kolobokk   (06.06.2006 в 10:53)   письмо автору
 
   для: Squadron   (06.06.2006 в 10:38)
 

необходимо создать полнотекстовый индекс в таблице типа

CREATE TABLE articles (
        id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
        title VARCHAR(200),
        body TEXT,
        FULLTEXT (title,body)
        );


и затем в запросе использовать

SELECT * FROM articles
        WHERE MATCH (title,body) AGAINST ('запрос');

   
 
 автор: Timur   (06.06.2006 в 16:11)   письмо автору
 
   для: kolobokk   (06.06.2006 в 10:53)
 

в запросе указать по какому ключу искать?
А куким образом он будет искать по всему сайту?

   
 
 автор: kolobokk   (06.06.2006 в 17:35)   письмо автору
 
   для: Timur   (06.06.2006 в 16:11)
 

>А куким образом он будет искать по всему сайту?
если сайт редко обновляется, то можно поступить как это делают роботы поисковиков - кэшировать все страницы сайта и результат записывать в таблицу с полнотекстовым ключом и затем делать запрос к этой таблице

   
 
 автор: Squadron   (06.06.2006 в 16:22)   письмо автору
 
   для: kolobokk   (06.06.2006 в 10:53)
 

мож скрипт проще дашь? )

   
 
 автор: Diablo_   (06.06.2006 в 17:31)   письмо автору
 
   для: Squadron   (06.06.2006 в 16:22)
 

Меня эта тема, тоже очень интересует!

   
 
 автор: Squadron   (06.06.2006 в 19:38)   письмо автору
 
   для: Diablo_   (06.06.2006 в 17:31)
 

up

   
 
 автор: Vados   (06.06.2006 в 21:39)   письмо автору
 
   для: Squadron   (06.06.2006 в 19:38)
 

Господа, ну приведите толковый пример!

Нужна Ваша помощь, как же всё таки производится поиск по сайту, объясните последовательно.

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

   
 
 автор: Football   (07.06.2006 в 08:33)   письмо автору
 
   для: Vados   (06.06.2006 в 21:39)
 

Помоему kolobokk уже все написал!

   
 
 автор: Vados   (07.06.2006 в 10:30)   письмо автору
 
   для: Football   (07.06.2006 в 08:33)
 

Ну так а как это сделать, как загнать всю инфо в файл и потом производить оттуда запросы, можно написать подробнее?

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

   
 
 автор: kolobokk   (07.06.2006 в 10:46)   письмо автору
 
   для: Vados   (07.06.2006 в 10:30)
 

>Ну так а как это сделать, как загнать всю инфо в файл и
>потом производить оттуда запросы, можно написать подробнее?

ну удобней не в файл а в БД
алгоритм следующий:
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 поместить в функцию перехода по ссылкам

   
 
 автор: Vados   (07.06.2006 в 10:51)   письмо автору
 
   для: kolobokk   (07.06.2006 в 10:46)
 

Привет!

Спасибо! Скажи, а в HTML коде у меня будет буфферизироваться весь текст. который есть на странице или можно только например заголовок названия статьи?
Как лучше в этом случае поступать?

И где и что необходимо прописывать в HTML коде для буфферизации?!

Спасибо!

З.Ы. Прошу заранее простить за неграмотность!

   
 
 автор: kolobokk   (07.06.2006 в 11:40)   письмо автору
 
   для: Vados   (07.06.2006 в 10:51)
 

>а в HTML коде у меня будет буфферизироваться
>весь текст. который есть на странице или можно только
>например заголовок названия статьи?
>Как лучше в этом случае поступать?

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

>И где и что необходимо прописывать в HTML коде для
>буфферизации?!
ничего нигде прописывать в html не надо

   
 
 автор: Vados   (07.06.2006 в 12:37)   письмо автору
 
   для: kolobokk   (07.06.2006 в 11:40)
 

Спасибо, теперь немного понятно, но только вот какой скрипт писать на PHP для такого поиска, быть может есть пример?!

Спасибо!

   
 
 автор: cheops   (07.06.2006 в 15:06)   письмо автору
 
   для: Vados   (07.06.2006 в 12:37)
 

Да собственно ничего сложно нет, у вас имеется HTML-форма? Пусть например,
<form action=handler.php method=post>
<input type=text name=name><input type=submit value="Искать">
</form>

В обработчике HTML-формы handler.php содержимое введённое в форму будет доступно в элементе $_POST['name']
<?php
  
if (!get_magic_quotes_gpc())
  {
    
$_POST['name'] = mysql_escape_string($_POST['name']);
  }
  
$query "select * from search MATCH(content) AGAINST('$_POST[name]')";
  
$sql=mysql_query($query);
?>

Далее следует обработать результат выборки.

   
 
 автор: Vados   (10.06.2006 в 22:47)   письмо автору
 
   для: cheops   (07.06.2006 в 15:06)
 

Всем привет!

Вот создаю таблицу, как писалось ранее, но при создании таблицы, у меня выдаётся такая ошибка:

SQL-запрос:

CREATE TABLE search(

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



Ответ MySQL:

#1214 - The used table type doesn't support FULLTEXT indexes

Помогите, пожалуйста, заранее спасибо!

   
 
 автор: cheops   (11.06.2006 в 11:06)   письмо автору
 
   для: Vados   (10.06.2006 в 22:47)
 

А у вас таблица какого типа? Дело в том, что полнотекстовый поиск в настоящий момент поддерживается только таблицами типа MyISAM.

   
 
 автор: Vados   (12.06.2006 в 11:31)   письмо автору
 
   для: cheops   (11.06.2006 в 11:06)
 

Всем привет!
Разрулил я немного ситуацию, теперь, всё по порядку:

1) Создал новую базу данных Search, потом написал такой запрос:


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


2) После этого использую форму:


<form action=handler.php method=post>
<input type=text name=name><input type=submit value="Искать">
</form>


3) Сам сценарий handler.php:


<?php
  
if (!get_magic_quotes_gpc())
  {
    
$_POST['name'] = mysql_escape_string($_POST['name']);
  }
  
$query "select * from search MATCH(content) AGAINST('$_POST[name]')";
  
$sql=mysql_query($query);
?> 


4) Файл config.php:


<?php

  $dblocation 
"localhost";
  
$dbname "search";
  
$dbuser "my login";
  
$dbpasswd "my password";
  
// Устанавливаем соединение с базой данных
  
$dbcnx = @mysql_connect($dblocation,$dbuser,$dbpasswd);
  if (!
$dbcnx)
  {
    echo( 
"<P>В настоящий момент сервер базы данных не доступен, поэтому корректное отображение страницы невозможно.</P>" );
    exit();
  }

  if (! @
mysql_select_db($dbname,$dbcnx) )
  {
    echo( 
"<P>В настоящий момент база данных не доступна, поэтому корректное отображение страницы невозможно.</P>" );
    exit();
  }
  
// Небольшая вспомогательная функция, которая выводит сообщение об ошибке
  // в случае ошибки запроса к базе данных
  
function puterror($message)
  {
    echo(
"<p>$message</p>");
    exit();
  }
  echo 
"Результаты поиска:";
?>


Какие мои действия дальше?!
Прошу на пальцах объяснить, так как я ещё никогда не делал поиск по сайту и мне бы очень хотелось в этом разобраться.
Я так понимаю, что необходимо вывести переменную, так как понятное дело сейчас у меня страница выдаёт пустую страницу!
Какую переменную мне необходимо выводить у как мне индексировать свой текст?!

Заранее спасибо за помощь!

   
 
 автор: cheops   (12.06.2006 в 21:41)   письмо автору
 
   для: Vados   (12.06.2006 в 11:31)
 

Хм... так а вы вроде нигде ничего и не выводите... Теперь нужно обработать результат
<?php 
  
if (!get_magic_quotes_gpc()) 
  { 
    
$_POST['name'] = mysql_escape_string($_POST['name']); 
  } 
  
$query "select * from search MATCH(content) AGAINST('$_POST[name]')"
  
$sql=mysql_query($query); 
  if(!
$sql) exit(mysql_error());
  while(
$result mysql_fetch_array($sql))
  {
     echo 
$result['название_поля']."<>";
  }
?>

   
 
 автор: Vados   (12.06.2006 в 23:20)   письмо автору
 
   для: cheops   (12.06.2006 в 21:41)
 

Хорошо, ну тогда у меня при вводе любого слова для поиска, выводится следующая ошибка:

[b][
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'MATCH(content) AGAINST('Привет')' at line 1
/b]

   
 
 автор: Vados   (13.06.2006 в 08:26)   письмо автору
 
   для: Vados   (12.06.2006 в 23:20)
 

Всем привет!

Прошу помогите с данной проблемой!

Что мне делать?

   
 
 автор: cheops   (13.06.2006 в 10:38)   письмо автору
 
   для: Vados   (12.06.2006 в 23:20)
 

Заключите имя базы данных в обратные кавычки (буква ё в английской раскладке).

   
 
 автор: Vados   (13.06.2006 в 14:33)   письмо автору
 
   для: cheops   (13.06.2006 в 10:38)
 

Спасибо!

А заключать её нужно в файле config.php ?

И ещё, как у меня будет происходить поиск?

То есть весь текст который будет на страницах сайта будет проиндексирован?

Мне нужно что-то дополнительно писать для того, чтобы его индексировать или я уже всё сделал? :-))

Прошу простить за возможную, пока, безграмотность в этом деле!

   
 
 автор: cheops   (13.06.2006 в 22:15)   письмо автору
 
   для: Vados   (13.06.2006 в 14:33)
 

В принципе всё сделано, но если что-то не понравится - пишите (только лучше в новой теме - эта длинная) - будем разбираться дальше...

   
 
 автор: Vados   (14.06.2006 в 06:44)   письмо автору
 
   для: cheops   (13.06.2006 в 22:15)
 

Хорошо, вот только последний вопрос, ошибка, о которой я писал выше не исправилась после того, как я поставил: ''

Что мне делать?!
Только если можно с объяснениями детальнее.

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

   
 
 автор: cheops   (14.06.2006 в 12:46)   письмо автору
 
   для: Vados   (14.06.2006 в 06:44)
 

Хм... только сейчас заметил - у вас же отсутствует ключевое слово WHERE, т.е. вместо
<?php
 $query 
"select * from search MATCH(content) AGAINST('$_POST[name]')";
?>

следует писать
<?php
 $query 
"select * from search WHERE MATCH(content) AGAINST('$_POST[name]')";
?>

   
 
 автор: Vados   (15.06.2006 в 08:51)   письмо автору
 
   для: cheops   (14.06.2006 в 12:46)
 

Спасибо огромное!

Действительно помогло, но а как дальше быть?

Почему при вводе слова в форме поиск, у меня ничего не ищется?

Просто при нажатии на кнопку поиск - пустая страница!

Где мне нужно хранить данные, то есть свои тексты, для того, чтобы найти их поиском?

Я так понимаю в БД, которую я создал?!

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

   
 
 автор: cheops   (15.06.2006 в 11:26)   письмо автору
 
   для: Vados   (15.06.2006 в 08:51)
 

А что у вас сейчас в базе данных - какой текст?

PS Давайте как-то перебираться в новую тему, так как эта уже достаточно длинная...

   
Rambler's Top100
вверх

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