Pregunta

Utilizo la siguiente llamada para obtener información de una base de datos:

select * 
from submissions 
where 
   match( description ) against ('+snowboard' in boolean mode ) 
   and (!disabled or disabled='n') 
order by datelisted desc limit 30

Lo que significa que todo con 'snowboard' en la descripción se encuentra. Ahora aquí está el problema:

select *
from submissions 
where 
  match( description ) against ('+snowboard +mp4' in boolean mode ) 
  and (!disabled or disabled='n') 
order by datelisted desc limit 30

ignorará el +mp4 por alguna razón y devolverá lo mismo que la primera consulta

select * 
from submissions 
where 
   match( description ) against ('+mp4' in boolean mode ) 

no devuelve nada, así que básicamente parece que se ignora en la búsqueda

¿Alguien sabe cómo trabajar en torno a este comportamiento?

¿Fue útil?

Solución

El modo booleano de MySQL solo coincidirá con palabras que son más largas que una cierta longitud. y mp4 es demasiado corto. Tendrías que recompilar mysql para cambiar el umbral

Editar: Resulta que esto ahora se puede configurar a través del archivo de configuración, ver http://dev.mysql.com/doc/refman/5.0/en/fulltext-fine-tuning.html Para referencia de Furhter

Otros consejos

Su problema es la longitud mínima de la palabra, que de forma predeterminada es de 3 caracteres. Prueba lo mismo con +snowboard +scooter Y verás que funciona. (Suponiendo que no tenga scooters en su base de datos, por supuesto).

Ver Ajuste la búsqueda de texto completo mysql Sobre cómo cambiarlo:

Las longitudes mínimas y máximas de las palabras a indexar se definen por el ft_min_word_len y ft_max_word_len Variables del sistema. (Consulte la Sección 5.1.4, "Variables del sistema del servidor".) El valor mínimo predeterminado es cuatro caracteres; El máximo predeterminado depende de la versión. Si cambia cualquier valor, debe reconstruir sus índices de texto completo. Por ejemplo, si desea que se puedan buscar palabras de tres caracteres, puede establecer la variable ft_min_word_len colocando las siguientes líneas en un archivo de opción:

[mysqld] ft_min_word_len=3

Luego reinicie el servidor y reconstruya sus índices de texto completo. Tenga en cuenta particularmente los comentarios sobre MyisAmchk en las instrucciones que siguen esta lista.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top