|
|
|
| Подскажите пожалуйста как сделать точное совпадение слов в поисковом запросе, как на яндексе когда пишешь слово в кавычках к примеру "найти все такие слова"
вот мой запрос с релевантностью
$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";
|
подскажите пожалуйста кто знает как сделать точное совпадение слов. | |
|
|
|
|
|
|
|
для: 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%\" ";
}
|
| |
|
|
|
|
|
|
|
для: kosta_in_net
(12.12.2010 в 08:36)
| | всё бы ничего, да только LIKE индексы не использует, как я понимаю.. | |
|
|
|
|
|
|
|
для: 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 , "Ищем точное совпадение" то выводится имено это слово другие не ищет. | |
|
|
|
|
|
|
|
для: dirol
(13.12.2010 в 12:27)
| | выведите с помощью echo($req) то, что у Вас ввелось через GET , а там посмотрим | |
|
|
|