|
|
|
| Не могу придумать как организовать поиск по сайту | |
|
|
|
|
|
|
|
для: Timur
(06.06.2006 в 08:55)
| | Где храниться информация? В БД или в файлах? Почему поиск хотите вести? По статьям, по новостям? | |
|
|
|
|
|
|
|
для: Football
(06.06.2006 в 09:18)
| | Мне мож тоже попути подскажите:
у меня в бд, поиск желательно бы организовать по словам в новостях | |
|
|
|
|
|
|
|
для: 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 ('запрос');
|
| |
|
|
|
|
|
|
|
для: kolobokk
(06.06.2006 в 10:53)
| | в запросе указать по какому ключу искать?
А куким образом он будет искать по всему сайту? | |
|
|
|
|
|
|
|
для: Timur
(06.06.2006 в 16:11)
| | >А куким образом он будет искать по всему сайту?
если сайт редко обновляется, то можно поступить как это делают роботы поисковиков - кэшировать все страницы сайта и результат записывать в таблицу с полнотекстовым ключом и затем делать запрос к этой таблице | |
|
|
|
|
|
|
|
для: kolobokk
(06.06.2006 в 10:53)
| | мож скрипт проще дашь? ) | |
|
|
|
|
|
|
|
для: Squadron
(06.06.2006 в 16:22)
| | Меня эта тема, тоже очень интересует! | |
|
|
|
|
|
|
|
для: Diablo_
(06.06.2006 в 17:31)
| | up | |
|
|
|
|
|
|
|
для: Squadron
(06.06.2006 в 19:38)
| | Господа, ну приведите толковый пример!
Нужна Ваша помощь, как же всё таки производится поиск по сайту, объясните последовательно.
Заранее спасибо! | |
|
|
|
|
|
|
|
для: Vados
(06.06.2006 в 21:39)
| | Помоему kolobokk уже все написал! | |
|
|
|
|
|
|
|
для: Football
(07.06.2006 в 08:33)
| | Ну так а как это сделать, как загнать всю инфо в файл и потом производить оттуда запросы, можно написать подробнее?
Заранее спасибо! | |
|
|
|
|
|
|
|
для: 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 поместить в функцию перехода по ссылкам | |
|
|
|
|
|
|
|
для: kolobokk
(07.06.2006 в 10:46)
| | Привет!
Спасибо! Скажи, а в HTML коде у меня будет буфферизироваться весь текст. который есть на странице или можно только например заголовок названия статьи?
Как лучше в этом случае поступать?
И где и что необходимо прописывать в HTML коде для буфферизации?!
Спасибо!
З.Ы. Прошу заранее простить за неграмотность! | |
|
|
|
|
|
|
|
для: Vados
(07.06.2006 в 10:51)
| | >а в HTML коде у меня будет буфферизироваться
>весь текст. который есть на странице или можно только
>например заголовок названия статьи?
>Как лучше в этом случае поступать?
будет буферизироваться весь текст
если надо чтобы поиск шел только по заголовкам
можно из переменной $bufer при помощи рег. выражений вырезать текст заголовка и помещать его в таблицу для последующего использования в поиске
>И где и что необходимо прописывать в HTML коде для
>буфферизации?!
ничего нигде прописывать в html не надо | |
|
|
|
|
|
|
|
для: kolobokk
(07.06.2006 в 11:40)
| | Спасибо, теперь немного понятно, но только вот какой скрипт писать на PHP для такого поиска, быть может есть пример?!
Спасибо! | |
|
|
|
|
|
|
|
для: 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);
?>
|
Далее следует обработать результат выборки. | |
|
|
|
|
|
|
|
для: 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
Помогите, пожалуйста, заранее спасибо! | |
|
|
|
|
|
|
|
для: Vados
(10.06.2006 в 22:47)
| | А у вас таблица какого типа? Дело в том, что полнотекстовый поиск в настоящий момент поддерживается только таблицами типа MyISAM. | |
|
|
|
|
|
|
|
для: 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 "Результаты поиска:";
?>
|
Какие мои действия дальше?!
Прошу на пальцах объяснить, так как я ещё никогда не делал поиск по сайту и мне бы очень хотелось в этом разобраться.
Я так понимаю, что необходимо вывести переменную, так как понятное дело сейчас у меня страница выдаёт пустую страницу!
Какую переменную мне необходимо выводить у как мне индексировать свой текст?!
Заранее спасибо за помощь! | |
|
|
|
|
|
|
|
для: 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['название_поля']."<>";
}
?>
|
| |
|
|
|
|
|
|
|
для: 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
(12.06.2006 в 23:20)
| | Всем привет!
Прошу помогите с данной проблемой!
Что мне делать? | |
|
|
|
|
|
|
|
для: Vados
(12.06.2006 в 23:20)
| | Заключите имя базы данных в обратные кавычки (буква ё в английской раскладке). | |
|
|
|
|
|
|
|
для: cheops
(13.06.2006 в 10:38)
| | Спасибо!
А заключать её нужно в файле config.php ?
И ещё, как у меня будет происходить поиск?
То есть весь текст который будет на страницах сайта будет проиндексирован?
Мне нужно что-то дополнительно писать для того, чтобы его индексировать или я уже всё сделал? :-))
Прошу простить за возможную, пока, безграмотность в этом деле! | |
|
|
|
|
|
|
|
для: Vados
(13.06.2006 в 14:33)
| | В принципе всё сделано, но если что-то не понравится - пишите (только лучше в новой теме - эта длинная) - будем разбираться дальше... | |
|
|
|
|
|
|
|
для: cheops
(13.06.2006 в 22:15)
| | Хорошо, вот только последний вопрос, ошибка, о которой я писал выше не исправилась после того, как я поставил: ''
Что мне делать?!
Только если можно с объяснениями детальнее.
Заранее спасибо! | |
|
|
|
|
|
|
|
для: 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]')";
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(14.06.2006 в 12:46)
| | Спасибо огромное!
Действительно помогло, но а как дальше быть?
Почему при вводе слова в форме поиск, у меня ничего не ищется?
Просто при нажатии на кнопку поиск - пустая страница!
Где мне нужно хранить данные, то есть свои тексты, для того, чтобы найти их поиском?
Я так понимаю в БД, которую я создал?!
Заранее спасибо! | |
|
|
|
|
|
|
|
для: Vados
(15.06.2006 в 08:51)
| | А что у вас сейчас в базе данных - какой текст?
PS Давайте как-то перебираться в новую тему, так как эта уже достаточно длинная... | |
|
|
|