Ver Mensaje Individual
  #6 (permalink)  
Antiguo 01/06/2010, 19:54
Brian_91
 
Fecha de Ingreso: septiembre-2009
Mensajes: 27
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Motor de busqueda en base a diccionario

Bueno despues, de probar ejemplos en el diccionario con 377 palabras no resulto muy util usar soundex, por que si bien encontraba esas palabras al escribirlas mal tambien me traia otras palabras del diccionario y la busqueda seria incoherente.

Al final lo voy hacer de esta forma:
Código PHP:
$sql="select dicpalabra, match(dicpalabra) against('".mysql_real_escape_string($query)."' IN BOOLEAN MODE) as score from diccionario having score > 0 and instr('".mysql_real_escape_string($query)."', dicpalabra)>0"
Mezclar full textsearch con instr, entonces las palabras que se escriban bien las voy a encontrar y las que tengan algun error de tipeo me las trae el full text search in boolean mode (escritas con cierto margen de error), pero incluso puede ser hasta mejor que el soundex, porque hay varias palabras con el mismo soundex mayormente palabras que tienen 5 o menos letras y sin espacios.

Sino encuentro resultados
Elimino palabras encontradas en el diccionario de la frase buscada y empieso a buscar con soundex las palabras que no encontre en el diccionario de esta forma:
Creo una nueva frase, que tiene el soundex() de cada palabra y las comparo contra el soundex de cada palabra en el diccionario.

Por ej: el soundex dentro del diccionario de "Punta del este" es "P530 D400 E230"

Entonces la sql seria:

select dicpalabra from diccionario where instr("C000 en P530 D400 E230",dicsoundex);
(palabras con menos de 2 letras no ingreso soundex en la frase, incluso es conveniente una lista de palabras a excluir como "en, el, para, con, sin".

Esa sql trae, "Punta del este", "casa" pero tambien tengo otras palabras como "chuy" que tiene el mismo soundex que "casa".

Para "armar el quizás quiso decir", tengo 2 cosas por hacer ordenar por relevancia las palabras obtenidas, y en el diccionario tengo un campo dictipo esto es para separar palabras, es una web de buscar propiedades y tengo los tipos:
categoria("venta,alquiler etc"), tipos("Casa, apartamento..."), Ubicacion("Cuidades, zonas.."), comodidad("Garage, piscina etc")
(El diccionario se alimenta de otras tablas, ciudades, zonas, atributos, categorias, y algunas ingresadas manualmente)

Entonces para armar una frase coherente y decirle al usuario "quizas quisiste decir", lo minimo que tengo que mostrar es el tipo de propiedad luego lo de mas es random:
TIPO +(ubicacion y/o categoria ) es el criterio que uso y si el usuario ingreso alguna comodidad la agrego al final de la frase.

Bueno espero le sirva a alguien. Si hay ideas para mejorar bienvenidas sean !!!

Última edición por Brian_91; 01/06/2010 a las 20:05