Foros del Web » Programando para Internet » PHP »

Optimizar Sql para buscador

Estas en el tema de Optimizar Sql para buscador en el foro de PHP en Foros del Web. un saludo cordial a todos. La presente es para ver si me pueden hechar una manita, estoy realizando un buscador para mi web. tengo noticias ...
  #1 (permalink)  
Antiguo 19/06/2009, 14:15
 
Fecha de Ingreso: diciembre-2002
Mensajes: 144
Antigüedad: 21 años, 4 meses
Puntos: 1
Optimizar Sql para buscador

un saludo cordial a todos.

La presente es para ver si me pueden hechar una manita, estoy realizando un buscador para mi web. tengo noticias desde el 2002 hasta la presente, deseo buscar por ante-titulo, titulo, Sumario y la noticia, hay muchas noticias unas 200 mil distribuida por años 2002,2003,2004 etc...... y en promedio de unos mil caracteres cada una.

Bueno estoy utilizando un match against para cuando tenga mas de 2 palabras y un like para una palabra. Las BD son mysql.

El index fulltex lo cree de la siguiente manera

ALTER TABLE n2002 ADD FULLTEXT(Ante-Titulo, Titulo, Sumario, nota); para cada tabla.

Bueno la cuestion cuando busco en una sola base de datos busca rapido pero cuando busco en todas las base de datos se vuelve muy lento de hecho excede los 30 seg disponible para el script en la configuracion del servidor.

Eso aplica para amba sql. Es por esto que las colocos aqui haber como puedo optimizar la sql, Yo utilizo UNION pero no se si se puede hacer de otra manera mas eficiente.

La MATCH AGAINST

(SELECT Ant_Titulo, Titulo , Fecha , MATCH (Titulo, Nota) AGAINST ('sabana de mendoza') AS Score FROM v3_n2002 WHERE MATCH (Titulo, Nota) AGAINST ('sabana de mendoza')) UNION(SELECT Ant_Titulo, Titulo , Fecha , MATCH (Titulo, Nota) AGAINST ('sabana de mendoza') AS Score FROM v3_n2003 WHERE MATCH (Titulo, Nota) AGAINST ('sabana de mendoza')) UNION(SELECT Ant_Titulo, Titulo , Fecha , MATCH (Titulo, Nota) AGAINST ('sabana de mendoza') AS Score FROM v3_n2004 WHERE MATCH (Titulo, Nota) AGAINST ('sabana de mendoza')) UNION(SELECT Ant_Titulo, Titulo , Fecha , MATCH (Titulo, Nota) AGAINST ('sabana de mendoza') AS Score FROM v3_n2005 WHERE MATCH (Titulo, Nota) AGAINST ('sabana de mendoza')) UNION(SELECT Ant_Titulo, Titulo , Fecha , MATCH (Titulo, Nota) AGAINST ('sabana de mendoza') AS Score FROM v3_n2006 WHERE MATCH (Titulo, Nota) AGAINST ('sabana de mendoza')) UNION(SELECT Ant_Titulo, Titulo , Fecha , MATCH (Titulo, Nota) AGAINST ('sabana de mendoza') AS Score FROM v3_n2007 WHERE MATCH (Titulo, Nota) AGAINST ('sabana de mendoza')) UNION(SELECT Ant_Titulo, Titulo , Fecha , MATCH (Titulo, Nota) AGAINST ('sabana de mendoza') AS Score FROM v3_n2008 WHERE MATCH (Titulo, Nota) AGAINST ('sabana de mendoza')) UNION(SELECT Ant_Titulo, Titulo , Fecha , MATCH (Titulo, Nota) AGAINST ('sabana de mendoza') AS Score FROM v3_n2009 WHERE MATCH (Titulo, Nota) AGAINST ('sabana de mendoza')) ORDER BY Score DESC LIMIT 150

LA LIKE

(SELECT Ant_Titulo, Titulo, Fecha FROM v3_n2002 WHERE Ant_Titulo LIKE '%sabana de mendoza%' OR Titulo LIKE '%sabana de mendoza%') UNION(SELECT Ant_Titulo, Titulo, Fecha FROM v3_n2003 WHERE Ant_Titulo LIKE '%sabana de mendoza%' OR Titulo LIKE '%sabana de mendoza%') UNION(SELECT Ant_Titulo, Titulo, Fecha FROM v3_n2004 WHERE Ant_Titulo LIKE '%sabana de mendoza%' OR Titulo LIKE '%sabana de mendoza%') UNION(SELECT Ant_Titulo, Titulo, Fecha FROM v3_n2005 WHERE Ant_Titulo LIKE '%sabana de mendoza%' OR Titulo LIKE '%sabana de mendoza%') UNION(SELECT Ant_Titulo, Titulo, Fecha FROM v3_n2006 WHERE Ant_Titulo LIKE '%sabana de mendoza%' OR Titulo LIKE '%sabana de mendoza%') UNION(SELECT Ant_Titulo, Titulo, Fecha FROM v3_n2007 WHERE Ant_Titulo LIKE '%sabana de mendoza%' OR Titulo LIKE '%sabana de mendoza%') UNION(SELECT Ant_Titulo, Titulo, Fecha FROM v3_n2008 WHERE Ant_Titulo LIKE '%sabana de mendoza%' OR Titulo LIKE '%sabana de mendoza%') UNION(SELECT Ant_Titulo, Titulo, Fecha FROM v3_n2009 WHERE Ant_Titulo LIKE '%sabana de mendoza%' OR Titulo LIKE '%sabana de mendoza%') ORDER BY Fecha DESC LIMIT 150


un saludo y esperandio ayuda. La idea es como agilizar en lo posible los resultados.
  #2 (permalink)  
Antiguo 19/06/2009, 14:30
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: Optimizar Sql para buscador

El problema seria mas bien de mysql pero dentro de lo que puedes hacer para que traiga informacion rapido es usar ajax. Pero solo colocas lo que va de los ultimos dos años y en el ajax mientras la persona busca lo que demostro al momento puedes ir agregando y enseñandole un loading de que sigue buscando noticias de viejos años. Ejemplo

La persona busco un search le diste las noticias del 2009 y del 2008, Mientras la persona busca el ajax esta buscando noticias del 2007-2006. Cuando haya buscado, las demuestras mas abajo y sigue el loading porque ahora va a buscar noticias del 2005-2004 y las despliega, pero continua el loading, ahora busca noticias del 2003-2002 y las despliega. Asi la persona mientras va buscando el servidor sigue buscando noticias por pedazos.

Me dejas saber
  #3 (permalink)  
Antiguo 19/06/2009, 14:50
 
Fecha de Ingreso: diciembre-2002
Mensajes: 144
Antigüedad: 21 años, 4 meses
Puntos: 1
Respuesta: Optimizar Sql para buscador

Si entiendo tu idea. El problema seria el score o la probabilidad que sea la noticia me explico. muestro 2009-2008, pero segun el score la probralidad de que la noticia que busques sea del 2002 entonces esta quedaria en posiciones de abajo o mejor dicha de ultima. Por eso seria buena buscar todo y mostrar en orden del score.

De todas manera es un buena idea tendria que pensarse mejor haber si puede realizar por ese metodo.

saludos esperando mas sugerencias
  #4 (permalink)  
Antiguo 19/06/2009, 16:57
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: Optimizar Sql para buscador

Claro es verdad lo del score pero como vi que tienes al final esto

ORDER BY Fecha DESC LIMIT 150

por eso te sugeri por fechas. Pero tienes toda la razon con respecto al porciento.
  #5 (permalink)  
Antiguo 26/06/2009, 15:37
 
Fecha de Ingreso: diciembre-2002
Mensajes: 144
Antigüedad: 21 años, 4 meses
Puntos: 1
Respuesta: Optimizar Sql para buscador

Esa order by funciona para la busqueda LIKE mas no para MATCH AGAINST.

Todavia sigo sin resolver el problema.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:34.