|
|
|
| Доброго времени суток.
Встала задача реализовать поиск. Прошу помощи. Сайт на 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] и ударами молотка забивается в доску. | |
|
|
|
|
|
|
|
для: 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-ти, то см. выше. | |
|
|
|
|
|
|
|
для: Aramor
(12.03.2009 в 06:36)
| | Вариант1: в MySQL можно использовать полнотекстовый индекс. Ищется по куску текста, сортируется по релевантности, все как у взрослых. Подсветить слово и вырезать кусочки ДО и ПОСЛЕ можно в пхп, после получения выборки
Вариант2 (щупаю сейчас): http://company.yandex.ru/technology/products/Yandex-Server/shareware.xml (подходит, если сервер свой) | |
|
|
|