|
автор: neo (16.08.2005 в 23:05) |
|
| Допустим я делаю поиск по сайту. Скрипт находит в тексте слово и теперь я хочу вывести на экран это слово и еще два слова, стоящих перед найденным и пять после. Как это сделать. | |
|
|
|
|
|
|
|
для: neo
(16.08.2005 в 23:05)
| | А слово чем ищите регулярными выражениями или ещё чем, не могли бы вы привести алгоритм поиска? Может проще прямо во время поиска вырезать информацию? | |
|
|
|
|
автор: neo (16.08.2005 в 23:40) |
|
|
для: cheops
(16.08.2005 в 23:20)
| |
$result = db_query("SELECT * FROM ".CONTENT_SITE.";") or die (db_error());
while ($row = db_fetch_row($result)){
if(stristr("$row[8]", "$word")){
$substr_count = substr_count("$row[$i]","$word[$q]");
$sort[$row[$i]]=$estimation*$substr_count;
}
|
$row[8] - это большой длок текста.
Я ещё вот, что хотел узнать. В теме "поиск по сайту..." написаны функции для поиска слов в базах данных mysql. Такой вопрос: они чувствительны к ригистру или нетю И где о них можно узнать по подробней. Мне какую-нибудь ссылку, где есть все про mysql. | |
|
|
|
|
|
|
|
для: neo
(16.08.2005 в 23:40)
| | Нет, в MySQL строки не чувствительны к регистру, если не указывается специальное слово BINARY и не используется тип BLOB для хранения строк. | |
|
|
|
|
автор: neo (17.08.2005 в 01:20) |
|
|
для: cheops
(17.08.2005 в 01:11)
| | Вы не ответели на предыдущие вопросы. И еще как вы думаете может мне стоит мндексировать каждое слово отдельно, т.е. в отдельную строку в mysql, а потом средствами mysql искать слова. Но я думаю база данных будет огромная. Как это отразится на скорости поиска. Простите за ошибки в выше приведенном коде. | |
|
|
|
|
|
|
|
для: neo
(17.08.2005 в 01:20)
| | Думаю вам нужно воспользоваться типом TEXT и проиндексировать каждый столбец индексом FULLTEXT, а далее искать информацию при помощи полнотекстового поиска - так получится проще и быстрее. | |
|
|
|
|
|
|
|
для: neo
(16.08.2005 в 23:40)
| | >И где о них можно узнать по подробней. Мне какую-нибудь ссылку, где есть
>все про mysql.
Вы можете воспользоваться русским манулом, который доступен на официальном сайте MySQL
http://dev.mysql.com/doc/mysql/ru/index.html
Если вы его хотите скачать к себе на машину - посмотрите тему http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=4513, а то часто бывает путаница с ним.
PS Он не много устаревший, местами даже много, но для начала самое оно - начинайте с третьей главы - там отличный турториал, я в своё время именно с него и начинал своё знакомство с MySQL. | |
|
|
|
|
автор: neo (17.08.2005 в 00:33) |
|
|
для: neo
(16.08.2005 в 23:05)
| | И еще как вы думаете может мне стоит мндексировать каждое слово отдельно, т.е. в отдельную строку в mysql, а потом средствами mysql искать слова. Но я думаю база данных будет огромная. Как это отрахится на скорости поиска. Простите за ошибки в выше приведенном коде. | |
|
|
|
|
|
|
|
для: neo
(17.08.2005 в 00:33)
| | Дело в том, что в MySQL имеется полнотекстовый поиск, т.е. она сама может индексировать ключевые слова и действует это не плохо, именно им мы пользуемся для поиска на данном форуме. Это конечно требует затрат на жёстком диске, но они в полне терпимые (объём возрастает в два раза).
При поиске по MySQL можно следовать двумя путями,
1) либо воспользоваться полнотекстовым поиском по полям типа TEXT проиндексированных индексом FULLTEXT
2) либо отталкиваться от операторов LIKE и REGEXP
Вот как мне кажется наиболее интересные темы по поиску:
http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=514
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=148
http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=807
http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=5311
Я думаю вам будет интересно их почитать, если у вас появятся вопросы - вы можете их смело задавать, только лучше в виде отдельной темы в соответствующем разделе http://www.softtime.ru/forum/index.php?id_forum=3 - постараемся вам обязательно помочь. | |
|
|
|
|
автор: neo (17.08.2005 в 02:00) |
|
|
для: cheops
(17.08.2005 в 01:15)
| | Извините пожалуйста но первоначальный вопрос, на который вы так и не ответили, не совсем подходит к форуму mysql - Я делаю поиск по сайту. Скрипт находит в тексте слово и теперь я хочу вывести на экран это слово и еще два слова, стоящих перед найденным и пять после. Как это сделать.
$result = db_query("SELECT * FROM ".CONTENT_SITE.";") or die (db_error());
while ($row = db_fetch_row($result)){
if(stristr("$row[8]", "$word")){
а сдесь должна быть функция вывода текста
}
}
|
$ text - большой блок текста | |
|
|
|
|
|
|
|
для: neo
(17.08.2005 в 02:00)
| | Сложно ответить без структуры таблицы, значения CONTENT_SITE, того, какую роль играет $text (в коде его нет). Нужно больше информации. | |
|
|
|
|
автор: neo (17.08.2005 в 21:14) |
|
|
для: cheops
(17.08.2005 в 02:57)
| | Вот структура базы данных:
db_query("CREATE TABLE ".CONTENT_SITE." (id INT, id_url INT, url VARCHAR(255), title TEXT, meta_tags TEXT, h_tags TEXT, strong_tags TEXT, u_tags TEXT, content TEXT)") or die (db_error());
|
Извините не $ text, а $row[8] - большой блок текста.
И у меня тут возник еще один дополнительный вопрос:
В smarty есть модификатор truncate - обрезает переменную по указанной длине, во 2-ом параметре указывается текст, который надо добавить в конец строки, функция будет пытаться вырезать слово. Есть ли подобная функция в php. | |
|
|
|
|
|
|
|
для: neo
(17.08.2005 в 21:14)
| | Попробуйте воспользоваться скриптом
<?php
preg_match("|([\w]+[\s]+){2}".$word."([\s]+[\w]+){5}|i",$row[8],$out);
echo $out[0];
?>
|
| |
|
|
|