Yo mismo estoy haciendo un complejo buscador. Mira, te voy a poner el código que tengo hecho:
    
Código PHP:
Ver original- <? 
- include("datos_usuario_db.php"); 
-   
-   
- $cadenaBusqueda=$_POST['cadenaBusqueda']; 
- $dondeBuscar=$_POST['dondeBuscar']; 
- $resultados[0]=array(); //para mensajes foro 
- $resultados[1]=array(); //para respuestas foro 
-   
- if($dondeBuscar=="todos") { 
-   
-   
-         $sql="SELECT * , MATCH(asunto, mensaje) AGAINST ('$cadenaBusqueda') as Score FROM gap_foro_mensajes WHERE MATCH(asunto, mensaje) AGAINST ('$cadenaBusqueda')  ORDER BY Score DESC"; 
- $variable=0; 
-   
-             if($bandera==0) { $colorFondo="#FFE7D7"; $bandera=1; } else { $colorFondo="#F2D2B7"; $bandera=0; } 
-             $resultados[0][$variable]=array(); 
-             $resultados[0][$variable]['asunto']=$row['asunto']; 
-             $resultados[0][$variable]['id']=$row['id']; 
-             $resultados[0][$variable]['user']=$row['user']; 
-             $resultados[0][$variable]['fondo']=$colorFondo; 
-             $resultados[0][$variable]['fecha']=$row['fecha']; 
-             $resultados[0][$variable]['puntuacion']=$row['Score']; 
-             $resultados[0][$row['asunto']]=$row['id']; 
-   
-             $cadBus=explode(" ",$cadenaBusqueda); 
-                  $func = preg_match("/".$cadBus[0]."{1}.+/is",$row['mensaje'],$matches); 
-              
-             $resultados[0][$variable]['trozo']=$matches[0]; 
-             $resultados[0][$variable]['trozo']=str_replace("'","'",$resultados[0][$variable]['trozo']); 
-             $resultados[0][$variable]['trozo']=str_replace('"',""",$resultados[0][$variable]['trozo']); 
-             $resultados[0][$variable]['trozo']=str_replace('<',"<",$resultados[0][$variable]['trozo']); 
-             $resultados[0][$variable]['trozo']=str_replace('>',">",$resultados[0][$variable]['trozo']); 
-             $resultados[0][$variable]['trozo']=substr($resultados[0][$variable]['trozo'],0,70); 
-             $variable++; 
-         } 
-   
- $totalVariable=$variable; 
-   
-   
-   
-   
-   
-         $sql="SELECT * , MATCH(asunto, mensaje) AGAINST ('$cadenaBusqueda') as Score FROM gap_foro_respuestas WHERE MATCH(asunto, mensaje) AGAINST ('$cadenaBusqueda')  ORDER BY Score DESC"; 
- $cuantosTtoales=$cuantosMsgForo+$cuantasRespForo; 
-   
-   
-   
-             $cadBus=explode(" ",$cadenaBusqueda); 
-             if($bandera==0) { $colorFondo="#FFE7D7"; $bandera=1; } else { $colorFondo="#F2D2B7"; $bandera=0; } 
-             $resultados[1][$variable]=array(); 
-             $resultados[1][$variable]['asunto']=$row['asunto']; 
-             $resultados[1][$variable]['id']=$row['id']; 
-             $resultados[1][$variable]['user']=$row['user']; 
-             $resultados[1][$variable]['fecha']=$row['fecha']; 
-             $resultados[1][$variable]['idmsg']=$row['id_mensaje']; 
-             $resultados[1][$variable]['fondo']=$colorFondo; 
-             $resultados[1][$variable]['puntuacion']=$row['Score']; 
-                  $func = preg_match("/".$cadBus[0]."{1}.+/is",$row['mensaje'],$matches); 
-              
-             $resultados[1][$variable]['trozo']=$matches[0]; 
-             $resultados[1][$variable]['trozo']=str_replace("'","'",$resultados[1][$variable]['trozo']); 
-             $resultados[1][$variable]['trozo']=str_replace('"',""",$resultados[1][$variable]['trozo']); 
-             $resultados[1][$variable]['trozo']=str_replace('<',"<",$resultados[1][$variable]['trozo']); 
-             $resultados[1][$variable]['trozo']=str_replace('>',">",$resultados[1][$variable]['trozo']); 
-             $resultados[1][$variable]['trozo']=substr($resultados[1][$variable]['trozo'],0,100); 
-              
-              
-             $variable++; 
-      
-         } 
-   
-   
- $contenidoAMeter="<tr><td width=100% colspan=2 align=center><table width=100% border=0 cellspacing=0 cellpadding=3><tr><td width=33% align=center>Foro</td><td width=33% align=center>Tutoriales</td><td width=33% align=center>Ejercicios</td></tr></table></td></tr><tr><td width=100% colspan=2 style='font-weight:bold;background-color:#565656;color:white;-moz-border-radius:8px 8px 0px 0px;'>".$cuantosTtoales." resultados en el foro<br><font style=font-weight:normal;font-style:italic;color:#E2E2E2;font-size:8.5pt;>Se filtran las coincidencias de respuestas en las coincidencias de mensajes y se ordena por puntuación de coincidencia</td></tr>"; 
-   
- $totalVariable2=$variable; 
- $j=0; 
- for($i=0;$i<=$totalVariable2;$i++) { 
-   
- $puntuacion=number_format($resultados[$j][$i]['puntuacion'],2,'.',','); 
-   
-     if($j==1) { 
-   
-         $sql="SELECT * FROM gap_foro_mensajes WHERE id=".$resultados[1][$i]['idmsg'].";"; 
-          
-         $asnt=$filita['asunto']; 
-     }//Sin resultados duplicados en las respuestas y mensajes. 
-   
-         if($j==1) { $identificador=$resultados[$j][$i]['idmsg']; } else { $identificador=$resultados[$j][$i]['id']; } 
-         $contenidoAMeter.="<tr style=background-color:".$resultados[$j][$i]['fondo'].";><td width=75%><a href=javascript:; onclick=\\\"javascript:leerMsgForoDesdeIndex(".$identificador.",'1&marcar=".$cadenaBusqueda."');\\\"><strong>".$resultados[$j][$i]['asunto']."</strong></a></td><td width=25% align=center>".$resultados[$j][$i]['user']."</td></tr><tr style=background-color:".$resultados[$j][$i]['fondo'].";><td width=100% style='border-color:#565656;border-width:0px;border-bottom-width:0px;border-style:solid;color:666666;'>...".$resultados[$j][$i]['trozo']."...</td><td width=25% align=right>".$puntuacion."</td></tr>"; 
-     } 
-     if($i==$totalVariable-1) { $j=1; } 
-   
- } 
-   
- } 
-   
-   
- ?><script>parent.document.getElementById("capaResultadosBusqueda").innerHTML="<table cellspacing=0 cellpadding=4 border=0 align=center style=-moz-border-radius:8px;border-color:#565656;border-width:1px;border-style:solid;><?echo $contenidoAMeter;?><tr><TD width=100% colspan=2 style='-moz-border-radius:0px 0px 8px 8px;background-color:<?echo $colorFondo;?>'></TD></tr></table>";</script>