Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » Поиск статей по тексту и заголовкам в MySQL

Ответить
Настройки темы
Поиск статей по тексту и заголовкам в MySQL

Аватара для Plutonium 239

Radio-active


Сообщения: 1406
Благодарности: 44


Конфигурация

Профиль | Отправить PM | Цитировать


Нужно сделать поиск статей. В таблице MySQL два столбца: item_name - заголовок статьи и item_text - текст статьи. Нужно сделать поиск статей по этим полям. У меня какой-то бред получается и ума не приложу как это все сортировать как поисковыки обычно сортируют, типа где больше слов найдено то будет выше.
Вот, что у меня получилось:
PHP код: Выделить весь код

$search explode(' '$search_line3); // разделяем поисковый запрос на отдельные слова
$num_s count($search);
for (
$i=0$i<$num_s$i++) // формирование поискового запроса к базе данных
{
if (
$i)
{
$string $string $x " item_name like '%" $search[$i] . "%' or item_text like '%" $search[$i] . "%' ";
}
else
{
$string .= "item_name like '%" $search[$i] . "%' or item_text like '%" $search[$i] . "%' ";
}
}
$query "select *
                from item_text, item_topic
                where item_text.itopic_id = item_topic.itopic_id 
                and ($string)
                limit $in, $s_col"
;
        
$result mysql_query($query$db) or die ("Query failed : " mysql_error());
while (
$row mysql_fetch_array($resultMYSQL_ASSOC)) // Форматирование результатов поиска
{
echo 
"<tr><td><a class=\"search\" href=\"items/item.php?item=" stripslashes($row['item_id']) . "\">" stripslashes($row['item_name']) . "</a></td></tr>";


у мненя такое чувство, что я все неправильно делаю

Отправлено: 13:24, 12-02-2006

 

Аватара для Plutonium 239

Radio-active


Сообщения: 1406
Благодарности: 44

Профиль | Отправить PM | Цитировать


Переделал запрос
PHP код: Выделить весь код

$query "select item_id, item_topic.itopic_id, itopic_name, item_name, item_date, item_author, item_author_mail, item_text,

        match(item_name, item_text) against ('$search_line') as rel
        from item_text, item_topic
        where item_text.itopic_id = item_topic.itopic_id 
        and ($string)
        order by rel desc
        limit $in, $s_col"


вроде теперь получше стало.
Но как сделать, чтобы выводилось несколько предложений с найдеными словами, как в поисковиках?
У мнея получилось только
PHP код: Выделить весь код

echo str_replace($search[$i], ('<b>' $search[$i] . '</b>'), substr($row['item_text'], (strpos($row['item_text'], $search[$i]) - 100),200)); 



Отправлено: 15:19, 13-02-2006 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Prisoner

Engrossed by the Void


Сообщения: 2229
Благодарности: 60

Профиль | Отправить PM | Цитировать


Если абстрагироваться от кода, то можно выводить из текста найденных строк таблицы 5-6 слов вокруг найденной строки поиска отделяя такие участки друг от друга многоточиями. Причем ограничивать по длине итоговую строку, чтобы результат не был на полстраницы.

-------
Не могу дать более дельный совет - не хватает системных ресурсов...


Отправлено: 10:45, 14-02-2006 | #3


Аватара для Plutonium 239

Radio-active


Сообщения: 1406
Благодарности: 44

Профиль | Отправить PM | Цитировать


Цитата:
Если абстрагироваться от кода, то можно выводить из текста найденных строк таблицы 5-6 слов вокруг найденной строки поиска отделяя такие участки друг от друга многоточиями. Причем ограничивать по длине итоговую строку, чтобы результат не был на полстраницы.
А вот как бы это в коде сделать?

Отправлено: 15:23, 14-02-2006 | #4


Аватара для Prisoner

Engrossed by the Void


Сообщения: 2229
Благодарности: 60

Профиль | Отправить PM | Цитировать


Рабочий день к концу подошел, постараюсь завтра чего-нибудь изобразить.

-------
Не могу дать более дельный совет - не хватает системных ресурсов...


Отправлено: 18:46, 14-02-2006 | #5


Аватара для Plutonium 239

Radio-active


Сообщения: 1406
Благодарности: 44

Профиль | Отправить PM | Цитировать


У меня вот чего получилось:
PHP код: Выделить весь код

if (strstr($row['item_text'], $search_line))

{
    
$a str_replace($search_line, ('<b>' $search_line '</b>'), substr($row['item_text'], (strpos($row['item_text'], $search_line) - 150),300));
    echo 
'...' substr($a, (strpos($a' ') + 1), ((strrpos($a' ') + 1) - (strpos($a' ') + 1))) . '...';
}
else
{
    for (
$i=0$i<$num_s$i++)
    {
        if (
strpos($row['item_text'], $search[$i]) === false) continue;
        
$a str_replace($search[$i], ('<b>' $search[$i] . '</b>'), substr($row['item_text'], (strpos($row['item_text'], $search[$i]) - 150),300));
        echo 
'...' substr($a, (strpos($a' ') + 1), ((strrpos($a' ') + 1) - (strpos($a' ') + 1))) . '...<br>';
    }


Вроде работает, но все равно как-то не так

Отправлено: 18:38, 15-02-2006 | #6


Аватара для Prisoner

Engrossed by the Void


Сообщения: 2229
Благодарности: 60

Профиль | Отправить PM | Цитировать


Вложения
Тип файла: zip decorate.zip
(5.1 Kb, 3 просмотров)

У меня получилось нечто иное. Доработать, конечно придется . Но наброски я на досуге сделал.
Функция вызывается относительно одного слова, что плохо в общем-то. Когда мы "слайсим" массив исходного текста (вырезаем участок слов), можно еще проверять имеют ли последний вырезанный участок и предпоследний - пересечения (array_intersect), если да, то объединять (имплодить их) не символом многоточия, а пробелом. Ну и так далее. Сорри, ничего из-за спешки более дельного изобратить не смог.

-------
Не могу дать более дельный совет - не хватает системных ресурсов...


Отправлено: 15:01, 16-02-2006 | #7


Аватара для Plutonium 239

Radio-active


Сообщения: 1406
Благодарности: 44

Профиль | Отправить PM | Цитировать


если често, то ничего не понял, можно с подробными коментариями, я в этом деле еще чайник причем полный...

Отправлено: 18:16, 16-02-2006 | #8


Аватара для benya

Старожил


Сообщения: 302
Благодарности: 5

Профиль | Сайт | Отправить PM | Цитировать


Тоесть мало найти совпадения в базе данных. Нужно еще вывести результаты поиска в удобной пользователю форме:
Повыделять найденный слова в пределах +- 50 символов, если есть пересечения обьеденить их.
Подсчитать количество совпадений и в зависимости от этого сортировать найденное.
Использовать словарь для грамматического (максимально точного поиска)
Ну и еще много чего другого можно придумать...

Отправлено: 19:25, 16-02-2006 | #9


Аватара для Plutonium 239

Radio-active


Сообщения: 1406
Благодарности: 44

Профиль | Отправить PM | Цитировать


Решил пока остановиться на последнем своем варианте, ишет и ладно...
Цитата:
Ну и еще много чего другого можно придумать...
Это можно и потом доделать.
Кто знает, пожалуйста, высказывайте свои предложения по этой теме.

Отправлено: 17:15, 17-02-2006 | #10



Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » Поиск статей по тексту и заголовкам в MySQL

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Поиск статей vaituk Флейм 1 26-11-2009 13:06
Ошибка - XP Game Edition 2008 не ищет документы Word по тексту, почему? karlson09 Microsoft Windows 2000/XP 3 24-03-2009 20:22
[решено] Фильтры, применяемые к тексту ShadowMas Вебмастеру 3 09-08-2008 12:41
Поиск в MySQL LEXX2002 Вебмастеру 15 09-10-2004 01:04
Поиск файлов по тексту. Belansky Общий по Linux 12 04-06-2003 06:17




 
Переход