Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Поисковая система
Форумы портала PHP.SU » PHP » Программирование на PHP » Поисковая система

Страниц (1): [1]
 

1. Baton - 21 Сентября, 2006 - 13:37:54 - перейти к сообщению
Ни как немогу сделать нормальную поисковую систему, помогите с технологией поиска
Информация находиться в базе MySql
3. Baton - 25 Сентября, 2006 - 08:49:49 - перейти к сообщению
классно
4. evgenijj - 09 Октября, 2006 - 10:58:39 - перейти к сообщению
Тут пришлось писать систему поиска по каталогу продукции - может кому и пригодится.
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. require "./cfg/general.inc.php";
  4. require "./cfg/connect.inc.php";
  5. require "./functions/mysql.php";
  6.  
  7. // Соединяемся с базой данных
  8. db_connect(DB_HOST,DB_USER,DB_PASS) or die (db_error());
  9. db_select_db(DB_NAME) or die (db_error());
  10.  
  11. // Количество записей результатов поиска на странице           
  12. define("SEARCH_RESULT_ON_PAGE", 5);
  13.  
  14. echo get_html_search();
  15.  
  16. function get_search_form()
  17. {
  18.         $html = "<form name='search' action='".$_SERVER["PHP_SELF"]."' method='GET'>[slash]n";
  19.         $html = $html."Поиск:<input value='Введите слово' name='query' onfocus=[slash]"query.value=''[slash]" size='20' maxlength='64'/>[slash]n";
  20.         $html = $html."<input type='submit' value='Искать'/>[slash]n";
  21.         $html = $html."</form>[slash]n";
  22.         return $html;
  23. }
  24.  
  25. function get_html_search()
  26. {
  27.         if ( !isset($_GET["query"]) or empty($_GET["query"]) )
  28.         {
  29.                 $html = "<h3>Поиск</h3>[slash]n".get_search_form();
  30.         }
  31.         else
  32.         {
  33.                 // Обрезаем строку до длины, указанной в атрибуте maxlength
  34.                 $search = substr( $_GET["query"], 0, 64 );
  35.                 // Убираем пробелы в начале и конце строки поиска
  36.                 $search = trim( $search );
  37.                 // Убираем все "ненормальные" символы
  38.                 $good = preg_replace("/[^\\w\\x7F-\\xFF\\s]/", " ", $search);
  39.                 // Сжимаем двойные пробелы
  40.                 $good = ereg_replace(" +", " ", $good);
  41.                
  42.                 // Получаем корни искомых слов
  43.                 $stemmer = new Lingua_Stem_Ru();
  44.                 $tmp = explode( " ", $good );
  45.                 foreach ( $tmp as $wrd )
  46.                 {
  47.                         // Если слово очень короткое - не используем его в поиске
  48.                         if ( strlen($wrd) < 3 ) continue;
  49.                         $words[] = $stemmer->stem_word($wrd);
  50.                 }
  51.                 // Склеиваем массив $words обратно в строку
  52.                 $search_str = implode( "* ", $words );
  53.                 $search_str = $search_str."*";
  54.                
  55.                 // Составляем запрос к БД, чтобы узнать количество записей в результатах поиска -
  56.                 // это нужно для построения постраничной навигации
  57.                 $search_query = "SELECT COUNT(*)
  58.                                                 FROM ".PRODUCTS_TABLE."
  59.                                                 WHERE MATCH (name, description) AGAINST ('".$search_str."' IN BOOLEAN MODE)>0";
  60.                
  61.                 $res = db_query( $search_query );
  62.                 $total = db_result( $res, 0, 0 );
  63.                
  64.                 // Проверяем передан ли номер текущей страницы - постраничная навигация
  65.                 if ( isset($_GET['page']) )
  66.                         $page = $_GET['page'];
  67.                 else
  68.                         $page = 1;
  69.  
  70.                 // Начальная позиция
  71.                 $start = ($page - 1) * SEARCH_RESULT_ON_PAGE;
  72.                        
  73.                 if ( $total > 0 )
  74.                 {
  75.                         $html = "<h3>Результаты поиска:</h3>[slash]n";
  76.                         $html = $html."<p>Вы искали: ".$good."</p>[slash]n";
  77.                         $search_query = "SELECT productID, name, description,
  78.                                                         MATCH (name, description) AGAINST
  79.                                                         ('".$search_str."' IN BOOLEAN MODE) AS relev
  80.                                                         FROM ".PRODUCTS_TABLE."
  81.                                                         HAVING relev>0 ORDER BY relev DESC LIMIT ".$start.", ".SEARCH_RESULT_ON_PAGE;
  82.                                                                
  83.                         $res = db_query( $search_query );
  84.                        
  85.                         // Это для подсвечивания искомых слов
  86.                         $highlight = implode( "[^-,[:space:]]*|", $words )."[^-,[:space:]]*";
  87.                        
  88.                         $html = $html."<table width='100%' cellspacing='4' cellpadding='2'>[slash]n";
  89.                         $html = $html."<tr bgcolor='#EEEEEE'><th width='5%'>ID</th><th>Наименование</th><th >Описание</th></tr>[slash]n";
  90.                         while ( $result = db_fetch_array( $res ) )
  91.                         {
  92.                                 $html = $html."<tr bgcolor='#F5F5F5' valign='top'>[slash]n";
  93.                                 $html = $html."<td>".$result["productID"]."</td>[slash]n";
  94.                                 // Подсвечиваем искомые слова
  95.                                 $result["name"] = eregi_replace($highlight, "<font color='#cc0000'>[slash][slash]0</font>", $result["name"]);
  96.                                 $html = $html."<td>".$result["name"]."</td>[slash]n";  
  97.                                 // Подсвечиваем искомые слова
  98.                                 $result["description"] = eregi_replace($highlight, "<font color='#cc0000'>[slash][slash]0</font>", $result["description"]);                            
  99.                                 $html = $html."<td>".$result["description"]."</td>[slash]n";                           
  100.                                 $html = $html."</tr>[slash]n";
  101.                         }
  102.                         $html = $html."</table>[slash]n";
  103.                        
  104.                         // Число страниц с результатами поиска
  105.                         $cnt_pages = ceil( $total/SEARCH_RESULT_ON_PAGE );
  106.                        
  107.                         // Постраничная навигация
  108.                         if ( $cnt_pages > 1 )
  109.                         {
  110.                                 $html = $html."<div style='margin-left:4px'>";
  111.                                 for( $i = 1; $i <= $cnt_pages; $i++ )
  112.                                 {
  113.                                         if($i != $cnt_pages)
  114.                                         {
  115.                                                 if($page == $i)
  116.                                                 {
  117.                                                         $html = $html."[".(($i - 1)*SEARCH_RESULT_ON_PAGE + 1)."-".$i*SEARCH_RESULT_ON_PAGE."] ";
  118.                                                 }
  119.                                                 else
  120.                                                 {
  121.                                                         $html = $html."<a href='".$_SERVER["PHP_SELF"]."?page=".$i."&query=".$good."'>[".(($i - 1)*SEARCH_RESULT_ON_PAGE + 1)."-".$i*SEARCH_RESULT_ON_PAGE."]</a> ";
  122.                                                 }
  123.                                         }
  124.                                         else
  125.                                         {
  126.                                                 if($page == $i)
  127.                                                 {
  128.                                                         $html = $html."[".(($i - 1)*SEARCH_RESULT_ON_PAGE + 1)."-".$total."] ";
  129.                                                 }
  130.                                                 else
  131.                                                 {
  132.                                                         $html = $html."<a href='".$_SERVER["PHP_SELF"]."?page=".$i."&query=".$good."'>[".(($i - 1)*SEARCH_RESULT_ON_PAGE + 1)."-".$total."]</a> ";
  133.                                                 }
  134.                                         }
  135.                                 }
  136.                                 $html = $html."</div>[slash]n";
  137.                         }
  138.                        
  139.                 }
  140.                 else
  141.                 {
  142.                         $html = "<h3>Результаты поиска:</h3>[slash]n<p>Ничего не найдено.</p>[slash]n";
  143.                 }              
  144.         }      
  145.         return $html;  
  146. }
  147. ?>
  148.  

А класс для извлечения корней русских слов можно взять на сайте Дмитрия Котерова:
http://forum[dot]dklab[dot]ru/php/advise[dot][dot][dot]RussianWord[dot]html
5. Мух - 12 Декабря, 2008 - 15:53:30 - перейти к сообщению
Здравствуйте! У меня тут проблема с куском кода:
CODE (text):
скопировать код в буфер обмена
  1. require "./cfg/general.inc.php";
  2. require "./cfg/connect.inc.php";
  3. require "./functions/mysql.php";


Пишет
Цитата:
Warning: main(./cfg/connect.inc.php): failed to open stream: No such file or directory in W:\www\searchings.php on line 3

Fatal error: main(): Failed opening required './cfg/connect.inc.php' (include_path='.;W:\usr\local\PHP\includes;W:\usr\local\PHP\pear') in W:\www\searchings.php on line 3


Я так понял, что у меня нет этих трех файликов - general.inc.php, connect.inc.php и mysql.php, правильно?
Поиск юзал, таких файлов не нашлось.. (я использую phpMyAdmin, через Uniserver).
6. Ыыы - 12 Декабря, 2008 - 16:08:09 - перейти к сообщению
Цитата:
Я так понял, что у меня нет этих трех файликов

Спасибо поржал Улыбка
7. Champion - 12 Декабря, 2008 - 16:09:30 - перейти к сообщению
Это верно, таких файликов увас нет. Во всяком случае по тому, пути, который указан
8. valenok - 12 Декабря, 2008 - 17:28:21 - перейти к сообщению
Мух это кусочек системы поиска по каталогу.
у вас не каталог
9. Мух - 12 Декабря, 2008 - 18:46:59 - перейти к сообщению
Улыбка Я наверно неправильно выразился, мне нужно сделать поисковую систему для базы, созданной в phpMyadmin. Эта прожка сможет искать по такой базе?.
10. Вездеход - 12 Декабря, 2008 - 19:19:59 - перейти к сообщению
Мух нет канешно же )
11. Shock - 13 Декабря, 2008 - 15:37:13 - перейти к сообщению
phpMyAdmin тут воооообще роли не играет. Это только скрипт для управления Mysql.
12. Гость - 13 Декабря, 2008 - 16:55:43 - перейти к сообщению
Цитата:
Базы, созданной в phpMyadmin
Да хоть в командной строке mysql [.exe]
Более того, насколько мне известно, PHP настолько всеядлив, что лдинакво работае и с MySQL, и с LiteSQL, и с другими. Это неважно. Напишите сами свой класс для работы с базой данных, ибо это дело 5 минут, так сказать Улыбка

 

Powered by ExBB FM 1.0 RC1