2012-09-07 33 views
6

Tengo un problema cuando intento hacer una búsqueda de texto completo en modo booleano usando una cadena con una comilla simple y un comodín asterisco, es decir, "levi's *": parece buscar también para todas las palabras que comiencen con "s", como "lanzas", cuando, hasta donde yo sé, la cita debe considerarse parte de la palabra, mientras que dos comillas simples ('') serían un separador de palabras ... pero tal vez Me equivoco.Consulta de texto completo con una comilla simple

Por favor, observe el ejemplo aquí: http://www.sqlfiddle.com/#!2/3dd3e/2/0 - la segunda fila DEBERÍAMOS estar allí

cómo puedo hacer lo que quiero?

Respuesta

1

esto le da las dos filas de su ejemplo:

SELECT * 
FROM ft 
WHERE MATCH(value) AGAINST ('"levi\'s" lacost*' IN BOOLEAN MODE) 

En http://dev.mysql.com/doc/refman/5.5/en/fulltext-boolean.html al final, habla de coincidencias exactas entre comillas dobles. Entonces, simplemente escapa de la cita simple y listo.

El uso de paréntesis, se puede añadir el asterisco:

WHERE MATCH(value) AGAINST ('(levi\'s)* lacost*' IN BOOLEAN MODE) 
+0

problema es que ninguna de estas consultas se encontraría decir 'levi'strauss', la asterisco después de las comillas dobles no parece hacer nada ("lacost" * no funcionaría también) – Borgtex

+0

Tengo que decir que no he usado 'MATCH()' alguna vez. Yo usaría una expresión regular en su lugar. –

+1

It parece que usar paréntesis ayuda mejor ... (ver respuesta actualizada) –

1

supongo que debe comillas la cadena que tiene que buscar si contiene comillas simples

Ej: MATCH(value) AGAINST ('"levi\'s"* lacost*' IN BOOLEAN MODE)

0

que llevan a cuestas en el comentario de Bart para manejar la comilla simple y todavía tienen la función de búsqueda como como, traté a cada término por separado. Entonces, la lógica es: si un término tiene una comilla simple, envuélvalo con paréntesis, de lo contrario, déjelo. Aquí hay un código PHP que puede ayudar

$term = preg_replace("/[']/", "\'", $term); 
$terms = explode(' ',$term); 
foreach ($terms as &$t) { 
    if (strpos($t, "'")) { 
     $t = "(".$t.")"; 
    } 
} 
$term = implode(' ',$terms); 

mi partido está en contra ('$ término' EN MODO BOOLEANA

Cuestiones relacionadas