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

Форум MySQL

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

 

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

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

тема: точное совпадение слов в поиске
 
 автор: dirol   (10.12.2010 в 16:02)   письмо автору
 
 

Подскажите пожалуйста как сделать точное совпадение слов в поисковом запросе, как на яндексе когда пишешь слово в кавычках к примеру "найти все такие слова"


вот мой запрос с релевантностью

$query = "SELECT all_text, MATCH (all_text, all_text_index) AGAINST ('".$req."') as relevance FROM 
test WHERE MATCH (all_text, all_text_index) AGAINST ('".$req."' IN BOOLEAN MODE) ORDER BY 
relevance DESC LIMIT 0,10";

  $post = mysql_query($query);
  echo "<table class=\"result\">\n";

   if($post){
   $numtot = mysql_num_rows($post);
   if($numtot>0){
    $rezult = "";
    $rezult .= "<ol>";
    while($posts = mysql_fetch_array($post)){
     $rezult .= "<li>".($posts['all_text'])."</a></li>";
        }
     $rezult .= "</ol>";
        }
}
echo " $rezult\n";


подскажите пожалуйста кто знает как сделать точное совпадение слов.

  Ответить  
 
 автор: kosta_in_net   (12.12.2010 в 08:36)   письмо автору
 
   для: dirol   (10.12.2010 в 16:02)
 

точное совпадение слов, или фразы целиком? Просьба "подскажите пожалуйста кто знает как сделать точное совпадение слов" не то же самое, что и "найти все такие слова".
тут http://inachetw.46.com1.ru/search_snr_com_ru/search.htm?text=%CA%EE%EC%EF%E0%ED%E8%FF+NTN-SNR&submit=%CF%EE%E8%F1%EA+%EF%EE+%F1%E0%E9%F2%F3 есть все варианты. Индексируемый сайт на одном сервере, с обычными штмл-файлами и запретом на выполнение скриптов (заказчик сказал "для безопасности"), индексирующая его поисковая система на другом (по крайней мере, так было год назад). Втыкать все это во фреймы - не моя идея. Так что, за это камни в меня не кидать. А вот что-то из "со всеми словами" или "с точной фразой" - это то, что тебе нужно.
Что именно?
вот фрагмент кода:
        if($_GET['param']=='rel'){// самые релевантные
            $searchstring=mysql_real_escape_string($good);
            $sql.= "WHERE MATCH (text) AGAINST ($searchstring) ";
        }elseif($_GET['param']=='any'){// любые из слов
            $searchstring=mysql_real_escape_string($good);
            $sql.= "WHERE text LIKE '%". str_replace(" ", "%' OR text LIKE '%", $good). "%' ";
        }elseif($_GET['param']=='all'){// все слова
            $searchstring=mysql_real_escape_string('+'.str_replace(" ",' +', $good));
            $sql.= "WHERE text LIKE '%". str_replace(" ", "%' AND text LIKE '%", $good). "%' ";
        }elseif($_GET['param']=='eqvival'){// точную фразу
            $searchstring=mysql_real_escape_string($_GET['text']);
            $sql.= "WHERE text LIKE \"%$searchstring%\" ";
        }

Где $_GET['text'] - это запрос из формы, а $good - запрос после удаления слов, короче 3-х символов (чтобы не искать всякие "по", "за", "и", "а" союзы). Поиск ведется в поле text.

Можно вот так записать:
$searchstring=mysql_real_escape_string($good);

switch($_GET['param']){ 
    case 'rel': 
        $sql.= "WHERE MATCH (text) AGAINST ($searchstring) "; 
        break; 
    case 'any': 
        $sql.= "WHERE text LIKE '%". str_replace(" ", "%' OR text LIKE '%", $good). "%' ";
        break; 
    case 'all': 
        $sql.= "WHERE text LIKE '%". str_replace(" ", "%' AND text LIKE '%", $good). "%' ";
        break; 
    default:
        $searchstring=mysql_real_escape_string($_GET['text']); 
        $sql.= "WHERE text LIKE \"%$searchstring%\" ";
}

  Ответить  
 
 автор: Trianon   (12.12.2010 в 12:43)   письмо автору
 
   для: kosta_in_net   (12.12.2010 в 08:36)
 

всё бы ничего, да только LIKE индексы не использует, как я понимаю..

  Ответить  
 
 автор: dirol   (13.12.2010 в 12:27)   письмо автору
 
   для: Trianon   (12.12.2010 в 12:43)
 

у меня FULLTEXT поля для поиска IN BOOLEAN MODE умеет искать по словам и строчка, если запрос идет в кавычках как на яндексе к примеру "Ищем точное совпадение" но с кавычками не передается методом GET вырезаются они чтоли или форматируются , не могу правельно передать методом GET запрос с кавычками.

AGAINST ('".$req."') as relevance FROM
test WHERE MATCH (all_text, all_text_index) AGAINST ('".$req."' IN BOOLEAN MODE)


если руками написать заместо $req , "Ищем точное совпадение" то выводится имено это слово другие не ищет.

  Ответить  
 
 автор: Trianon   (13.12.2010 в 13:24)   письмо автору
 
   для: dirol   (13.12.2010 в 12:27)
 

выведите с помощью echo($req) то, что у Вас ввелось через GET , а там посмотрим

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

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