Большой Воронежский Форум
» Программирование>регулярные выражения - результаты поиска
ilyeah 15:34 24.07.2007
php поиск по базе данных MySQL
как вывести результаты поиска как в google или тЫndexe
чтоб части всей записи содержащие искомые слова [Ответ]
Userator 09:39 25.07.2007
Меня терзают смутные сомненья как будто ты чтото не дописал [Ответ]
ilyeah 09:49 25.07.2007

Сообщение от Userator:
как будто ты чтото не дописал

мне нужно чтоб результаты поиска отображались не целиком-вся запись из таблицы а только предложения содержащие запросы поиска [Ответ]
maximn 10:07 25.07.2007
воспользуйся встроенной функцией пхп give_me_those_fucking_sentences($db_link, $arr_of_words) [Ответ]
Userator 00:15 26.07.2007
$_GET['search']
переменная ключевых слов для поиска
$reg = str_replace(' ', '.*', $_GET['search');
заменяем пробелы на .*
таблица БД такого вида:
---------------
| id | text|
---------------
делаем запрос к базе по типу:
$query = mysql_query('select * from `tablica` where `text` regexp \''.$reg.'\'');
text - ячейка с текстом который ищем
добавляем в массив $re_arr результат выборки из БД.
while($result = mysql_fetch_assoc($query )){
$result['text'] = explode('.', $result['text']);
превращаем каждое предложение в значение массива.
$re_arr[$result['id']] = $result['text'];
}

Устал писать, что неясно будет спросишь..........
foreach ($re_arr as $ooo => $ii){
foreach ($ii as $go){
$areg = '/'.$reg.'/i';
if(preg_match($areg, $go)){
echo '<pre>';
print($go);
echo '</pre>';
}
}
}
[Ответ]
ilyeah 08:53 26.07.2007
вобщем я чутка изменил а точнее

Сообщение от :
$result['text'] = explode('.', $result['text']);

на

Сообщение от :
$result['text'] = explode('. ', $result['text']);

а то у меня ссылки были и названия файлов в тексте
вобщем вычленяет предложение с искомым словом [Ответ]
Userator 10:17 26.07.2007

Сообщение от ilyeah:
не понял что что есть regexp \''.$reg.'\'' - может ачипятка

не, не опечатка.
значение оператора regexp должно быть в кавычках однарных или двойных,
потипу regexp "bla-bla" или regexp 'bla-bla' я больше люблю одинарные поэтому их и вписал, но так как весь запрос закрыт в одинарные кавычки, то те которые используются у regexp пришлось заслешыть \' дабы PHP не ругался и не принимал ету кавычку как кавычку.
а дальше мы вклиниваем переменную $reg в строку запроса таким образом: '.$reg.'
в результате запрос к базе пойдёт вот таким видом:
select * from `tablica` where `text` regexp 'тут слова'
можно ещё
такой вариант
$query = mysql_query('select * from `tablica` where `text` regexp "'.$reg.'"');
, где жирным выделены двойные кавычки.
тогда запрос пойдёт вот такой:
select * from `tablica` where `text` regexp "тут слова" [Ответ]
Userator 10:18 26.07.2007
что не ясно спрашиваем.... [Ответ]
ilyeah 10:31 26.07.2007
получаеться что порядок слов в запросе при выводе имеет значение это не есть хорошо

вобще спасибо за идею: "разбивать на предложения а потом искать"
у меня запрос на поиск более сложный с релевантностью седня вечером попробую твой метод под свои нужды прикрутить [Ответ]
netwind 17:03 26.07.2007
почитай документацию, полезно будет :
http://dev.mysql.com/doc/refman/5.1/...xt-search.html [Ответ]
ilyeah 08:29 27.07.2007

Сообщение от netwind:
почитай документацию, полезно будет :
http://dev.mysql.com/doc/refman/5.1/...xt-search.html

спасибо канечно что умный такой но ты вабще понял что мне нужно [Ответ]
netwind 11:10 31.07.2007
дык тебе задачу решать или в пхп упражняться?
эти функции ищут в любом порядке, с языком запросов, еще и уровень релевантности высчитывают. [Ответ]
ilyeah 13:06 31.07.2007
искать с релеванантностью я итак умею мне надо красиво вывести найденное [Ответ]
Userator 18:50 03.08.2007
ilyeah, если сделал, то рассказывай как. [Ответ]
shuri 20:29 03.08.2007

Сообщение от ilyeah:
искать с релеванантностью я итак умею мне надо красиво вывести найденное

Извини, красиво это как? [Ответ]
ilyeah 12:22 07.08.2007
это в общем

Сообщение от :
красиво это так что если по запросу найдено сто страниц с тескто выводим
на страницу десять резулятатов не целиком а только куски текста где есть слова из запроса

[Ответ]
ilyeah 16:10 07.08.2007
делюсь (это не финальная версия)

Сообщение от :
$time_start = microtime();
ob_start('highlighter');
if ($result = mysql_query($query)){
echo "<ol>\n";
$ci = 1;
while ( $data = mysql_fetch_assoc($result) ) {
echo "<li value=\"".($start_pos+$ci)."\">$data[question]<br>\n";
if ( strlen( strip_tags(bbReplace($data['answer'])) )>350 ) {
$answer = preg_split('/(\.\s+)|(\.\n+)/', strip_tags(bbReplace($data['answer'])));
$search_words = str_replace(" ", "|", $good_words);
foreach ($answer as $line)
if ( eregi("($search_words)", $line) ) echo "... ".$line."... <br />";
}
else echo bbReplace($data['answer']);
echo "</li>\n";
$ci++;
}
echo "</ol>\n";
}
@ob_end_flush();
$time_end = microtime();
pager($page, $count, $pages_count, $show_link);
$test = $time_end - $time_start;
print "<small>Script works " . round( $test , 4 ) . " seconds</small>";

[Ответ]
Вверх