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

Форум PHP

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

 

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

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

тема: как реализовать поиск наподобие как в гугле
 
 автор: Aramor   (12.03.2009 в 06:36)   письмо автору
 
 

Доброго времени суток.
Встала задача реализовать поиск. Прошу помощи. Сайт на php, поиск внутри MySQL/

Что реализовано:
Реализован основной механизм поиска:
Пользователь вводит $search в поле поиска, нажимает кнопку и переносится на страницу вывода результатов, где
$search = trim($search);
$search = stripslashes($search);
$search= htmlspecialchars($search);
$result = mysql_query("SELECT * FROM article WHERE name LIKE '%$search%' OR text LIKE '%$search%' ORDER BY date_add", $db);
Далее выводится названия статей с сылкой на саму статью.

Что хочется реализовать:
1. Хочется, чтобы под каждым результатом выводился текст как в поисковике любом, типа кусок текста, допустим двадцать символов до слова и 20 после и само слово подсвечивалось.
2. Хочется, чтобы если пользователь ввёл два или более слова (допустим "доска гвоздь") искались статьи, в которых встречаются оба этих слова, и необязательно одно после другого, а просто в любом месте, и чтобы вывелось под результатом два подсвеченных слова, обрамлённых 20-ю символами справа и слева

Пример:
[URL="http://localhost/article.php?idarticle=2"]Статья про то, как забивать[/URL]
...обычно исполузуется сухая берёзовая [COLOR="Blue"]доска[/COLOR], которая покрывается марилкой с торцов... ...берётся новый блестящий стальной [COLOR="#0000ff"]гвоздь[/COLOR] и ударами молотка забивается в доску.

  Ответить  
 
 автор: Киналь   (12.03.2009 в 08:21)   письмо автору
 
   для: Aramor   (12.03.2009 в 06:36)
 

>1. Хочется, чтобы под каждым результатом выводился текст как в поисковике любом, типа кусок текста, допустим двадцать символов до слова и 20 после и само слово подсвечивалось.

Ну так, так и делайте. Определяете strpos'ом позицию $search в text, прибавляете/отнимаете по 20 и выводите кусок text'а. Можно извернуться и дополнительно поставить условие "разбивать только по пробелам". Слово подстветить -

$search_res = str_replace($search, "<font color='red'$search</font>>", $search_res);


>2. Хочется, чтобы если пользователь ввёл два или более слова (допустим "доска гвоздь") искались статьи, в которых встречаются оба этих слова, и необязательно одно после другого, а просто в любом месте, и чтобы вывелось под результатом два подсвеченных слова, обрамлённых 20-ю символами справа и слева

Разбиваете $search по пробелу и ищете отдельно для каждого слова. Для каждого найденного куска текста проверяете "расстояние" между словами; если меньше 20-ти, то отнимаете 20 от позиции первого слова, а прибавляете к позиции второго. Если больше 20-ти, то см. выше.

  Ответить  
 
 автор: mechanic   (12.03.2009 в 08:49)   письмо автору
 
   для: Aramor   (12.03.2009 в 06:36)
 

Вариант1: в MySQL можно использовать полнотекстовый индекс. Ищется по куску текста, сортируется по релевантности, все как у взрослых. Подсветить слово и вырезать кусочки ДО и ПОСЛЕ можно в пхп, после получения выборки
Вариант2 (щупаю сейчас): http://company.yandex.ru/technology/products/Yandex-Server/shareware.xml (подходит, если сервер свой)

  Ответить  
Rambler's Top100
вверх

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