Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
Как оптимизировать поиск в CNCat 2.0 (Сворг) 31/08/2005 - 12:58:00



From: Сворг - 31/08/2005 - 12:58:00
Subject:Как оптимизировать поиск в CNCat 2.0
-----------------
Знаете есть скрипт CNCat 2.0 так вот в нем есть встроенный поиск. Но проблема в том, что он выдает не точный поиск. Например, если искать super good espesial то именно такое сочетание он редко когда поставит первым в результате поиска, а чаще всего оно оказывается на 2-3 странице или еще дальше. Не могу понять почему, ведь по идеи сначало должно показываться точное совпадение, а потом "вариации на тему".

Вот реализация скрипта:

$q=trim($q);
if (empty($q)) {
print "<P><font color=red>".$LANG["emptyquery"]."</font></P>";
$total=0;
}
else {
$q=trim($q);

$order="ORDER BY gin DESC,gout DESC";
if ($o==1) $order="ORDER BY title";
if ($o==2) $order="ORDER BY moder_vote DESC";

$lq=mysql_result(mysql_query("SELECT lower('$q');"),0,0);
$uq=mysql_result(mysql_query("SELECT upper('$q');"),0,0);

$is=0;
/* ID Search */
if (substr($q,0,3)=="id:") {
$likes="lid=".intval(substr($uq,3));
$is=1;
}
/* URL Search */
if (substr($q,0,4)=="url:") {
$tq=trim(substr($uq,4));
if (substr($tq,0,7)!="http://") $tq="http://".$tq;

$likes="UPPER(url) like '".$tq."%'";
$is=1;
}
/* */
if (substr($q,0,6)==""" && substr($q,-6)==""") {
$uq=trim(substr($uq,6,-6));
$lq=trim(substr($lq,6,-6));
$likes.=" OR UPPER(description) regexp '[[:<:]]".$uq."[[:>:]]'";
$likes.=" OR UPPER(title) regexp '[[:<:]]".$uq."[[:>:]]'";
$likes.=" OR UPPER(url) regexp '[[:<:]]".$uq."[[:>:]]'";
$likes=substr($likes,4);
$is=1;
}

/* Simle search */
if ($is==0) {

$likes="";
$ph=explode(" ",$uq);
for ($i=0;$i<count($ph);$i++) {
$pq="%".$ph[$i]."%";
$likes.=" OR UPPER(description) like '$pq'";
$likes.=" OR UPPER(title) like '$pq'";
$likes.=" OR UPPER(url) like '$pq'";
}
$likes=substr($likes,4);
}

$rr=mysql_query("SELECT count(*) FROM ".$db["prefix"]."main WHERE type=1 AND ($likes)") or die(mysql_error());
$total=mysql_result($rr,0,0);

$r=mysql_query("SELECT * FROM ".$db["prefix"]."main WHERE type=1 AND ($likes) $order LIMIT $start,10") or die(mysql_error());


-------------

Я уже и пробовал закомментирвать $order="ORDER BY gin DESC,gout DESC"; (это оно ищет по количеству кликов с каталога и на каталог), но теперь еще хуже стало искать...

Не могу понять как сделать так что бы первым в результатах ответа было точное совпадение.


[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
23807



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |