Buscador usando comillas para detectar palabras exactas

La gente no lo suele implementar en los buscadores pero siempre queda bien hacer que cuando se busca por palabras sueltas y mete varias entre comillas se haga la búsqueda por esas exactas. Por ejemplo si buscamos gatos «bosque siberiano» lo suyo es que haga la consulta:

Where campo like '%gatos%' or campo like '%bosque siberiano%'

Lo primero es la consulta, aunque es un poco más lenta, pero es más sencillo construirla con una expresión regular:

Where campo REGEXP '(gatos|bosque siberiano)'

Y para construir la cadena a ejecutar:

// cargamos en un array las palabras entre comillas
preg_match_all('/".*?"/', $_POST["search"], $matches);
foreach ($matches[0] as  $value) {
   // las palabras encontradas las borramos de la cadena original
   $_POST["search"] = str_replace($value, '', $_POST["search"]);
}
// cargamos en un array las palabras sueltas que no estaban entre comillas  y las unimos a las que si lo estaban 
$palabras = array_merge(explode(' ', $_POST["search"]), $matches[0]);
// eliminamos todos los posibles elementos vacios del array
$palabras = array_filter($palabras, function($value) { return $value !== ''; });
// y los unimos con el separador | que vamos a usar en la consulta
$cadena = str_replace('"', '', implode('|', $palabras));
// y ya tenemos el where
$where .= sprintf(" campo  REGEXP '(%s)'", mysql_escape_string($cadena));
Dejar un comentario?

0 Comentarios.

Deje un comentario


NOTA - Puede usar estosHTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.