2010-12-10 15 views
5

Im 'tratando de hacer una búsqueda de texto completo con mysql, para que coincida con una cadena. El problema es que está devolviendo resultados extraños en primer lugar.MySQL Match Texto completo

Por ejemplo, la cadena 'Passat 2.0 TDI':

  AND MATCH (
      records_veiculos.titulo, records_veiculos.descricao 
      ) 
      AGAINST (
      'passat 2.0 tdi' WITH QUERY EXPANSION 
      ) 

está volviendo esto como el primer resultado (los demás están bien):

Volkswagen Passat Variant 1.9 TDI- ANO 2003 

cual es incorrecto, ya que no hay "2.0" en este ejemplo.

¿Qué podría ser?

edición: También, ya que este será probablemente una gran base de datos (que prevén hasta 500.000 registros), será este método de búsqueda sea lo mejor para sí mismo, o sería mejor instalar cualquier otro motor de búsqueda como Esfinge? O en caso de que no lo haga, ¿cómo mostrar resultados relevantes?

Edit2: Para el registro, a pesar de la pregunta que se marca como respondida, el problema con los delimitadores de MySQL persiste, por lo que si alguien tiene una sugerencia sobre cómo escapar delimitadores, sería apreciado y vale la pena los 500 puntos en estaca. El sollution he encontrado para aumentar el conjunto de resultados fue la de sustituir con la expansión CONSULTA EN MODO con BOOLEANA, utilizando operadores para forzar el motor para obtener las palabras que necesitaba, como:

AND MATCH (
records_veiculos.titulo, records_veiculos.descricao 
) 
AGAINST (
'+passat +2.0 +tdi' IN BOOLEAN MODE 
) 

no resolvió en absoluto, pero al menos la relevancia de los resultados cambió significativamente.

Respuesta

5

Por defecto creo mysql sólo índices y coincide con las palabras con 4 o más caracteres. ¿También podría intentar escapar del período? Podría ignorarse o usarlo como un carácter de detención.

+2

+1 No puedo pensar por qué esto fue votado negativamente. Muy cierto. '2.0' escapado o no se ignorará a menos que se haya cambiado la configuración predeterminada del servidor para los índices' FULLTEXT'. – Orbling

+1

@Yoda: lea aquí, especialmente sobre 'ft_max_word_len': http://dev.mysql.com/doc/refman/5.1/en/fulltext-fine-tuning.html – Orbling

+0

¿alguna sugerencia sobre cómo escapar de los caracteres? He intentado usar '\', sin éxito. – yoda

4

¿Cuál es el rango de coincidencia que devuelve para eso? El partido debe contener todas las "palabras", entendí que funcionaba como Google y que solo tiene que coincidir con algunas de las palabras.

Habiendo dicho eso, tenga en cuenta el hecho de agregar WITH QUERY EXPANSION, que ejecuta automáticamente una segunda búsqueda de palabras "relacionadas", que pueden no ser las que ha escrito, pero que los motores de texto completo consideran probablemente relacionadas.

documentación pertinente: http://dev.mysql.com/doc/refman/5.1/en/fulltext-query-expansion.html

+1

¿Por qué se ha votado negativamente? – Orbling

+2

Me preguntó lo mismo. Fijo. Gente estupida. – methodin

+0

@methodin Cheers. – Orbling

7

Desde el MySQL documentation on Fulltext search:

"El analizador FULLTEXT determina dónde empiezan las palabras y al final mediante la búsqueda de ciertos caracteres delimitadores, por ejemplo,‘’(espacio)‘’(coma), y‘’ (período)."

Esto significa que el período delimita el 2 y el 0. Por lo tanto, no está buscando '2.0'; está buscando '2' y '0', y no lo encuentra. CON QUERY EXPANSION probablemente esté causando la aparición de palabras relevantes relacionadas, obviando así la necesidad de que '2' y '0' sean palabras individuales en la clasificación de resultados. Un mínimo de carácter también puede estar siendo aplicado.

+0

alguna sugerencia sobre cómo escapar de los caracteres? He intentado usar '\', sin éxito. – yoda

1

El "." es lo que coincide en 2003 en los resultados de su consulta.

Si va a realizar búsquedas en cadenas de texto de 3 caracteres, debe establecer ft_min_word_len = 3 en su configuración mysql, reiniciar mysql. De lo contrario, una búsqueda de "tdi" arrojará resultados con "TDI-" pero no solo con "TDI", porque las filas con "TDI-" se indexarán, pero "TDI" solo no lo hará.

Después de hacer ese cambio de configuración, tendrá que volver a generar su índice en esa tabla. (Advertencia: su índice podría ser significativamente mayor ahora).

+0

gracias por la entrada, pero ya se ha discutido la mayoría de esas cosas, y el problema persiste. – yoda

Cuestiones relacionadas