Foros del Web » Programando para Internet » ASP Clásico »

un buscador potente, pero solo me busca la primer palabra

Estas en el tema de un buscador potente, pero solo me busca la primer palabra en el foro de ASP Clásico en Foros del Web. Hola a todos bueno antes que otra cosa feliz navidad y feliz año nuevo, ok. Estoy depurando un buscador que tengo ya la llevo de ...
  #1 (permalink)  
Antiguo 19/12/2005, 20:09
Avatar de speedy  
Fecha de Ingreso: octubre-2004
Ubicación: México
Mensajes: 127
Antigüedad: 20 años, 6 meses
Puntos: 0
Pregunta un buscador potente, pero solo me busca la primer palabra

Hola a todos bueno antes que otra cosa feliz navidad y feliz año nuevo, ok.
Estoy depurando un buscador que tengo ya la llevo de gane y ya esta en mi aplicacion operando, pero tiene un detalle pongo por ejemplo.

jamon a

y solo me busca la palabra jamon

si le pongo o no palabras mas adelante no les hace caso, solo busca la primer palabra, si le pongo por ejemplo

a jamon

me busca todo lo que tenga la letra a ya no le importa lo demas a la derecha.

¿Como puedo colocar el codigo para que me jala todos los registros de acuerdo a las palabras que le ponga? ejemplo:

jamon pavo

para que me jala todos los registros que tengan jamon pero solo los que sean de pavo...

Les pongo el codigo que tengo, muchas gracias por sus comentarios.
Código PHP:
textStr trim(Request.QueryString("s")) ‘lo que se va a buscar
Dim pos1
 Dim pos2
 Dim wordLen
 x 
1
 pos1 
1
 pos2 
instr(1,textSTR,SeperatorSTR)
 if 
pos2 0 then pos2 len(textstr): pos1 0
 Redim Preserve ArraySTR
(x)
 
wordLen pos2 pos1
 ArraySTR
(0) = mid(textstr,1wordLen)
 
 While 
pos1 <> 
  pos1 
pos2
  pos2 
instr(pos2+1,textSTR,SeperatorSTR)
  if 
pos2 0 then 
   
if pos1 0 then 
    pos2 
len(textstr) + 1
   end 
if
  
end if 
 
  if 
pos2 <> 0 then 
   
if pos1 <> 0 then 
    Redim Preserve ArraySTR
(x)
    
wordLen pos2 pos1 1
    ArraySTR
(x) = mid(textstr,pos1 1,wordLen)
    
x=x+1
   End 
if
  
End if
  if 
pos2 => len(textstrthen pos1 

 Wend

 WordCount 
x
' strSQL = "Select TOP 350 * from Anuncios where ComentariosAnuncio like '%" & ArraySTR(0) & "%'"
 strSQL = "Select * from Anuncios where Metapalabras like '
%" & ArraySTR(0) & "%' or NombreNegocio like '%" & ArraySTR(0) & "%'  or Descripcion like '%" & ArraySTR(0) & "%' ORDER BY ServicioContratado DESC, Contador DESC, NombreNegocio"
 
 for x = 0 to Wordcount - 1
  if  lcase(ArraySTR(x)) <> "and" then 
   if x > 0 then 
    strSQL = StrSQL & " AND Descripcion like '
%" & ArraySTR(x) & "%"
   end if
  end if
 next

 strSQL = StrSQL & "
;"
end if 
Saludos.
__________________
Saludos :cool: y Suerte :arriba:
valle del mezquital en el Estado de Hidalgo
  #2 (permalink)  
Antiguo 19/12/2005, 20:16
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 23 años, 3 meses
Puntos: 146
"al vuelo", sería algo como:
Código:
textStr = trim(Request.QueryString("s"))
vecPalabras = split(textStr," ")
sql=""
for i=0 to ubound(vecPalabras)
    sql = " Descripcion like '%" & vecPalabras(i) & "%' and "
next
sql = MID(sql,1 , LEN(sql)-4)
....y concatenar sql a la sentencia sql
lineas mas, lineas menos, la idea es esa.

Saludos
  #3 (permalink)  
Antiguo 20/12/2005, 08:35
 
Fecha de Ingreso: abril-2004
Ubicación: México D.F.
Mensajes: 1.724
Antigüedad: 21 años
Puntos: 4
Puedes simplicar las cosas usando Full-Text Search del sql server, la otra es hacer exactamente lo que te dice myakire . a pesar de que tambien queria hacer un buscador potente algo asi como el corrector ortografico de word termine por hacerlo con un like tradicional concatenandolo.el full text search te ayuda, pero eso si, hay que estar reconstruyendo el catalogo en cada movimiento.
  #4 (permalink)  
Antiguo 21/12/2005, 13:45
Avatar de speedy  
Fecha de Ingreso: octubre-2004
Ubicación: México
Mensajes: 127
Antigüedad: 20 años, 6 meses
Puntos: 0
Pregunta

Hola Myakire y orharo2003 gracias por contestar; ok voy a meter las cosas como me comentas Myakire, solo una pregunta que esta pasando cuando pones:

sql = MID(sql,1 , LEN(sql)-4)
__________________
Saludos :cool: y Suerte :arriba:
valle del mezquital en el Estado de Hidalgo
  #5 (permalink)  
Antiguo 21/12/2005, 13:46
Avatar de speedy  
Fecha de Ingreso: octubre-2004
Ubicación: México
Mensajes: 127
Antigüedad: 20 años, 6 meses
Puntos: 0
Pregunta

el 1 y el -4 que serian como fungen o que pasa en ese caso?, gracias.
__________________
Saludos :cool: y Suerte :arriba:
valle del mezquital en el Estado de Hidalgo
  #6 (permalink)  
Antiguo 21/12/2005, 15:02
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 23 años, 3 meses
Puntos: 146
Bueno, como se esta concatenando siempre el " AND", pues hay que quitárselo al final, por eso el -4

Tendrias despues de dos iteraciones, algo como:
sql = " Descripcion like '%algo%' and Descripcion like '%otra_cosa%' and"

entonces, si lo ejecutas así, claramente te dará error, si cortamos la cadena desde el inicio hasta el final-4 caracteres, quitas el and y el espacio.

sql = MID(sql,1 , LEN(sql)-4)

Saludos


EDITADO

Bueno, lo hice solo para asegurarme, y así quedaría más o menos:

Código:
 vSQL = "SELECT     dbo.Articulos.Id_Arti, ........... WHERE " 
 CadBusqueda = Request("Palabra")
 Palabras = SPLIT(CadBusqueda," ")
 vWhere = ""
 For i=0 To UBound(Palabras)
     Cadena = Trim(Palabras(i))
     if Cadena <> "" Then
        vWhere = vWhere & "(dbo.Articulos.Descripcion LIKE ''%"+Cadena+"%'') AND"
     End If
 Next
 If LEN(vWhere) > 0 Then
    vWhere = MID(vWhere,1,LEN(vWhere)-3)
 End If 
 vSQL = vSQL & vWhere
 response.write vSQL
 response.end
Saludos one more time

PD. El Full-Text Search del Sql Server que apuntó orharo2003 () no lo he usado, pero conociéndolo, seguro simplificaría mucho las cosas, sería bueno ver esa alternativa también.


Última edición por Myakire; 21/12/2005 a las 15:14
  #7 (permalink)  
Antiguo 22/12/2005, 12:56
Avatar de speedy  
Fecha de Ingreso: octubre-2004
Ubicación: México
Mensajes: 127
Antigüedad: 20 años, 6 meses
Puntos: 0
Gracias Myakire este ultimo codigo lo entendi mucho mejor GRACIAS EN VERDAD Y con respecto a la solucion de orharo2003 si seguro es excelente pero es para sql server y ahorita estoy trabajando con access, pero se agradece de todas formas tambien, SALUDOS A TODOS y les comento como me fue, bye.
__________________
Saludos :cool: y Suerte :arriba:
valle del mezquital en el Estado de Hidalgo
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 00:46.