entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

1voto

FullText query optimización

Buenas soy nuevo en este foro, y estoy algo desesperado tengo una query que no se por donde agarrarla es algo compleja

La query en questión:

SELECT a.id,a.patrocinado1,a.patrocinado2, a.foto_main,a.nombre,a.descript,a.precio,a.modificado,a.filter_9, round( sqrt( ( ( a.filter_11 - 41.6046744) * (a.filter_11 - 41.6046744 ) * 69.1 * 69.1 ) + ( (a.filter_12 - 2.1892674 ) *(a.filter_12 - 2.1892674 ) * 53 * 53 ) ) ) as distance,+(MATCH (a.keywords_busqueda) AGAINST ('+iphone +1' IN BOOLEAN MODE)) +IF(a.nombre like '%iphone 1%',220,0) +IF(a.patrocinado1 IS NOT NULL || a.patrocinado2 IS NOT NULL,100,0)+IF(a.id_usuario < 100 ,-5,0)+IF(a.id_subcategoria = 15 ,-15,0) as rank 
FROM anuncios a 
INNER JOIN anuncios a_geo ON a_geo.id = a.id 
INNER JOIN usuarios u ON a_geo.id_usuario = u.id 
WHERE 1 
AND (MATCH (a.keywords_busqueda) AGAINST ('iphone 1 ' IN BOOLEAN MODE)) 
AND a_geo.id_categoria !=321 
AND a_geo.id_subcategoria!=330 
AND a.id != 9 
HAVING rank > 0 
ORDER BY IF(distance <= 15 ,1,0) desc, IF(distance <= 30 ,1,0) desc, IF(distance <= 45 ,1,0) desc,IF(distance <= 90 ,1,0) desc,rank desc,u.tienda asc, a_geo.modificado desc limit 0,30

Os adjunto el explain,

esta query suele tardar unos 7segundos una barbaridad,

el ft_min_length está seteado a 1 en el my.cnf y uso Amazon RDS con una máquina muy potente

Si la búsqueda se cambia a palabras con más de un cáracter el comportamiento es bastante bueno (0.1s a 0.5s)

1voto

Leonardo-Tadei comentado

Hola,

no aparece el explain en la pregunta.

Aclarame algo: la búsqueda tarda mucho cuando buscás 1 solo caracter, o cuando en la búsqueda aparecen varias palabras pero una tiene 1 solo caracter? Cuántos registros, aproximadamente, tiene la tabla de anuncios?

0voto

spnfury comentado

Hola Leonardo,
La búsqueda va lenta cuando aparecen varias palabras y alguna de ellas tiene 1 carácter,
he conseguido que vaya muy rápido cambiando:
AND (MATCH (a.keywords_busqueda) AGAINST ('iphone 1 ' IN BOOLEAN MODE))
por
AND (MATCH (a.keywords_busqueda) AGAINST ('+iphone +1 ' IN BOOLEAN MODE))

El problema es que de esa manera limito las búsquedas, me gustaria encontrar sin el + pues es muy excluyente

1 Respuesta

0voto

bl4z3r Puntos16850

Si en vez de usar el BOOLEAN MODE, ¿por que no usas NATURAL MODE?

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta