







|
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,
версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
23807
|
|