|
|
|
| Нельзя ли объяснить общий принцип организации поиска.
Есть догадки.
Сайт допустим организован так
<?php
//.........(что там еще)........
include ("top.php");
include ("menu.php");
include ("text.php");
include ("bottom.php");
//.........(что там еще)........
?>
|
Поиск по содержимому всех файлов. Если есть схожие слова, то формируется файл с содержанием ссылок на эти файлы, где они так же include("need_file.php") вместо text.php
Неужели все так грубо???
P.S. Надеюсь некого не запутал | |
|
|
|
|
|
|
|
для: Artem S.
(31.07.2004 в 23:22)
| | У нас-то обычно конетент динамический из базы и мы просто осуществляем поиск по базе данных...
А в файловом варианте обычно поступают проще, просто задерживают вывод, помещая контент в буффер и ищут в нём. Например,
<?php
// Весь вывод направляем в буффер
ob_start();
//.........(что там еще)........
include ("top.php");
include ("menu.php");
include ("text.php");
include ("bottom.php");
//.........(что там еще)........
// занесение содержимого буфера в переменную
$buffer = ob_get_contents();
// очищение буфера вывода и отключение буферизации вывода
ob_end_clean();
/////////////////////////////////////////////////////////////////
// Вот тут осуществляется поиск и если необходимо
// изменяем вид страницы в переменной $buffer
// например заменяем искомые слова жирным
/////////////////////////////////////////////////////////////////
// вывод страницы
echo $buffer;
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(31.07.2004 в 23:34)
| | А как осуществлять поиск по базе данных?
Допустим, я специально создал таблицу, с 2 полями "id" и "text"
Как мне произвести поиск? | |
|
|
|
|
|
|
|
для: Artem S.
(01.08.2004 в 13:06)
| | Ну... база данных MySQL, да?
Будем для простоты считать, что каждый id соответствует отдельной странице, которую можно вывести, обратившись по ссылке index.php?id=45, где 45 – номер записи, сама таблица пусть называется base. Есть два подхода для поиска в текстовых полях:
1) Использование оператора LIKE, который ищет похожие слова
SELECT id FROM base WHERE text LIKE 'искомое слово';
|
Этот запрос вернёт id записи только в том случае, если поле text будет в точности равно фразе "искомое слово". Кроме этого при поиске можно использовать шаблоны: символ подчёркивания соответствует одному любому символу _, а символ процента % любому количеству символов, так запрос
SELECT id FROM base WHERE text LIKE '%искомое слово%';
|
Будет искать фразу "искомое слово" в любом тексте, например, этому запросу удовлетворяет запись "В таблице обязательно должно присутствовать искомое слово, иначе запись не будет возвращена". Оператор NOT LIKE, наоборот, возвращает записи только в том случае, если они не удовлетворяют искомой фразе.
Этот стандартный поиск средствами SQL, который должен работать во всех базах данных, но он больше подходит для небольших текстовых записей, вроде имени, адреса и т.д. Для объёмных записей, например, постов форума, больше применим второй способ.
2) Второй способ основан на полнотекстовом поиске по полям типа TEXT (он не является стандартом SQL и относится к расширениям MySQL). Для того чтобы воспользоваться полнотекстовым поиском, необходимо создать индекс FULLTEXT по полю text таблицы base (этот индекс в настоящее время поддерживается только для таблиц MyISAM). Для того, чтобы в уже созданную таблицу добавить индекс можно воспользоваться оператором ALTER:
ALTER TABLE base ADD FULLTEXT (text);
?>
|
Теперь поиск можно осуществлять примерно следующим образом:
<?php
SELECT id FROM base
WHERE MATCH(text) AGAINST('искомое слово');
-- или
SELECT id FROM base
WHERE MATCH(text) AGAINST('искомое') AND
MATCH(text) AGAINST('слово');
-- или
SELECT id FROM base
WHERE MATCH(text) AGAINST('искомое') OR
MATCH(text) AGAINST('слово');
|
Особенностью полнотекстового поиска по ключу FULLTEXT, является то, что игнорируются так называемые "общеупотребительные" слова. К ним относятся слова, состоящие меньше чем из четырёх символов или встречающиеся в более чем половине записей таблицы.
Кроме этого, начиная с версии 4.0.1 поддерживается так называемый "логический" режим поиска, позволяющий осуществлять "тонкую" настройку поиска.
После того, как запрос выполнен, можно выводить ссылки на найденные страницы, вот примерная схема:
<?php
$query = "…"; // Запрос по первому или второму варианту
$pgs = mysql_query($query);
if(!$pgs)
{
echo "Ошибка в синтаксисе запроса";
exit();
}
// Если результат поиска не пуст выводим ссылки на статьи
if(mysql_num_rows($pgs)>0)
{
while($id = mysql_fetch_array($pgs))
{
echo "<a href=index.php?id=$id>статья</a><br>";
}
}
?>
|
PS В таблицу наверное стоит добавить ещё одно текстовое поле title для названия страницы, тогда его можно подставлять вместо слова "статья" в цикле while. | |
|
|
|
|
|
|
|
для: cheops
(01.08.2004 в 15:54)
| | Спасибо, скоро попробую. Если что с вопросами к вам =) | |
|
|
|
|
|
|
|
для: cheops
(01.08.2004 в 15:54)
| | cheops а можно допустим зделать чтобы "искомое слово" искалось как и искать,поиск,искалось,слова...???
Я такое на одном сайте видел | |
|
|
|
|
|
|
|
для: Адоп Акробат
(21.09.2004 в 15:05)
| | Не понял, что требуется... | |
|
|
|
|
|
|
|
для: cheops
(21.09.2004 в 16:42)
| | Чтобы он искал и похожие слова тоже | |
|
|
|
|
|
|
|
для: Адоп Акробат
(21.09.2004 в 18:36)
| | Если поиск осуществляется при помощи оператора LIKE, то этого эффекта можно добится при помощи запроса
SELECT id FROM base WHERE text LIKE '%иском%' OR text LIKE '%слов%';
|
При полнотекстовом поиске по индексам FULLTEXT поиск следует осуществлять в логическом режиме (IN BOOLEAN MODE):
SELECT id FROM base
WHERE MATCH(text) AGAINST('иском*' IN BOOLEAN MODE) OR
MATCH(text) AGAINST('слов*' IN BOOLEAN MODE);
|
| |
|
|
|
|
|
|
|
для: cheops
(21.09.2004 в 19:44)
| | Спасибо очень пригодится :) | |
|
|
|
|
|
|
|
для: cheops
(31.07.2004 в 23:34)
| | Можно поподробнее про поиск по сайту в варианте с файлами. Или где про ето прочитать можно. Вдруг внезапно это стало очень нужно.
А если нужно искать и по файлам и по базе то каким боком все это реализовывается.
Заранее спасибо. | |
|
|
|
|
|
|
|
для: s1271tvg
(21.09.2004 в 13:28)
| | Организация поиска в файловом варианте осуществляется следующим образом - открываются файлы html или php, содержащие текстовую информацию в их содержимом осуществляется поиск ключевых слов. Формируется список найденых ссылок. При переходе по ссылке вывод в окно браузера задерживается (как показано во втором посте) и при помощи регулярных выражений присходит подсветка ключевого слова на странице, например, за счёт замены в строке $buffer ключевого слова на ключевое слово обрамлённое тэгами <b></b>. | |
|
|
|
|
|
|
|
для: cheops
(21.09.2004 в 16:55)
| | Спасибо что нибудь попробую. | |
|
|
|
|
|
|
|
для: cheops
(21.09.2004 в 16:55)
| | Вроде сделал, причем даже что то заработало. Огромное спасибо. | |
|
|
|