Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Encontrar palabras con al menos 3 caracteres con MATCH AGAINST

Estas en el tema de Encontrar palabras con al menos 3 caracteres con MATCH AGAINST en el foro de Mysql en Foros del Web. Buenas... me dijeron que se puede permitir con búsquedas MATCH AGAINST que contemple palabras con 3 caracteres. Leyendo el manual, no estoy hallando si es ...
  #1 (permalink)  
Antiguo 04/06/2014, 19:53
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 16 años, 1 mes
Puntos: 175
Encontrar palabras con al menos 3 caracteres con MATCH AGAINST

Buenas... me dijeron que se puede permitir con búsquedas MATCH AGAINST que contemple palabras con 3 caracteres.

Leyendo el manual, no estoy hallando si es o no posible, por eso, si alguien me da una mano para saber si es posible, se los agradecería.

Si bien una palabra con 3 caracteres se puede buscar con LIKE, el problema es el siguiente. Tengo en mi base de datos 2 empresas de ejemplo "EL SOL" y "LA CAL".

Si un usuario busca SOL o CAL, seguro lo encuentra, porque me baso en LIKE pero al tener mas de 2 palabras, lo hago con MATCH, y si alguien buscara esas empresas por su nombre "EL SOL" o "LA CAL", el MATCH AGAINST no lo dara como una prioridad..

esta es mi consulta de prueba...

Código MySQL:
Ver original
  1. SELECT id_empresa, nombre_empresa, ciudad
  2. FROM empresas
  3.  
  4. WHERE MATCH(nombre_empresa) AGAINST ('variable_de_busqueda' IN BOOLEAN MODE)

Me dijeron que con el BOOLEAN MODE eso me está limitando, pero no se como emparejarlo para este caso específico, es decir, que funcione a partir de 3 caracteres como relevantes.. no puedo tocar el archivo de configuracion del MYSQL ya que el server es pago y no admiten esos cambios.

Alguna manito si esto es factible.

Sino, bueno, tocará hacer alguna función que cuente la cantidad de palabras, luego cuente la cantidad de caracteres...
__________________
Ayudo con lo que puedo en el foro, y solo en el foro.. NO MENSAJES PRIVADOS.. NO EMAILS NI SKYPE u OTROS.

Antes de hacer un TOPICO piensa si puedes hallarlo en Google o en el Buscador del Foro...
  #2 (permalink)  
Antiguo 05/06/2014, 07:10
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Encontrar palabras con al menos 3 caracteres con MATCH AGAINST

por un lado, es factible reducir la cantidad de caracteres de las palabras a buscar. Pero no es conveniente.
No es conveniente porque mientras menos letras consideras en las palabras, mayor es el índice de resultados erróneos o falsos positivos. El límite de cinco caracteres se ha puesto como estándar porque es la cantidad mínima promedio en diferentes idiomas para reconocer una palabra con cierto nivel de precisión.
Si permitieras poner tres, podrían poner "del", "asi", "eso", y trata de imaginar la cantidad de coincidencias posibles de tales búsquedas. Demasiadas, ¿no?
Además, hay un pequeño problema que debes considerar: Por una simple cuestión performántica, no es conveniente jamás realizar búsquedas donde el nivel de coincidencias se acerque al 50% de los registros.
Cuando una búsqueda en un DBMS cualquiera, tiene resultados próximos o superiores al 50% del total de registros, normalmente los DBMS descartan los índices y hacen un full table scan, porque de ese modo se reduce el tiempo de lectura. Esto sucede entre otras cosas, porque el overhead de la búsqueda, sumado al de la lectura de los registros, se vuelve igual o superior a leer la tabla entera.
¿Se enciente el problema?

Normalmente lo que se hace es meter en las vistas de la aplicación una restricción por JavaScript que no le permita al usuario realizar búsquedas con palabras menores a cierta longitud.
El usuario no tiene por qué hacer cualquier cosa. Es tu obligación como desarrollador lograr que haga cosas que no conspiren contra el sistema.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 05/06/2014, 11:26
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 16 años, 1 mes
Puntos: 175
Respuesta: Encontrar palabras con al menos 3 caracteres con MATCH AGAINST

Pero si acabo de explicar.. no se trata de limitar la cantidad de caracteres, eso es sencillo, pero que pasa si hay una música que se llama "ASI ES" o una empresa que se llame "EL SOL"... hacerlo por LIKE, lo hice, pero no me es eficiente cuando se introducen cosas como "CUANDO SEA MAÑANA" y el string guardado es "CUANDO QUIERAS QUE SEA MAÑANA"... estoy hablando de una BD limitada, no a un campo tipo TEXT donde existen cantidad de palabras.. y menos cuando existe una empresa que que se llama "LA CAL" y tú buscas por el mismo nombre de la empresa...

Hacer un levensthein con eso? o sea, decirle.. LO QUE INTRODUJISTE ES "LA CAL", TAL VEZ QUISISTE DECIR "LA CAL" por eso busco una alternativa, y yo me hago cargo de la responsabilidad de funcionamiento... si fuera tan solo configurar, joya, pero no tengo acceso ni permisos para que los dueños del HOST hagan esa modificación... si hubiera una alternativa me gustaria conocerla y evaluarla. Pero no estoy hallando como, si eso fuera posible.
__________________
Ayudo con lo que puedo en el foro, y solo en el foro.. NO MENSAJES PRIVADOS.. NO EMAILS NI SKYPE u OTROS.

Antes de hacer un TOPICO piensa si puedes hallarlo en Google o en el Buscador del Foro...
  #4 (permalink)  
Antiguo 05/06/2014, 12:29
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Encontrar palabras con al menos 3 caracteres con MATCH AGAINST

Cita:
Hacer un levensthein con eso? o sea, decirle.. LO QUE INTRODUJISTE ES "LA CAL", TAL VEZ QUISISTE DECIR "LA CAL"
Eso es algortima de programación, no de Base de Datos.
Cita:
por eso busco una alternativa, y yo me hago cargo de la responsabilidad de funcionamiento...
las bases de datos son herramientas de estructura fija, y gran flexibilidad, pero aún así tienen restricciones que se deben conocer. A la base no le importa quien ese hace cargo. El algoritmo propio del DBMS es el que decide y no el programador de la palicación, respecto al método de consulta a usar y las lecturas.
Si quieres modificar su algoritmo deberás tomar el fuente de MySQL y modificarlo.
Cita:
si fuera tan solo configurar, joya, pero no tengo acceso ni permisos para que los dueños del HOST hagan esa modificación... si hubiera una alternativa me gustaria conocerla y evaluarla. Pero no estoy hallando como, si eso fuera posible.
Si no tienes permisos para hacerlo, no hay nada que puedas hacer. Desde el SQL no tienes una solución. Deberás implementarla programando tu mismo, no hay otra salida.

Consulta en el foro del lenguaje que uses.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 06/06/2014, 12:06
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 16 años, 1 mes
Puntos: 175
Respuesta: Encontrar palabras con al menos 3 caracteres con MATCH AGAINST

Gracias por las respuestas.. vere como solucionarlo.

con respecto a
Cita:
Eso es algortima de programación, no de Base de Datos.
Se puede crear un procedure.

Saludos
__________________
Ayudo con lo que puedo en el foro, y solo en el foro.. NO MENSAJES PRIVADOS.. NO EMAILS NI SKYPE u OTROS.

Antes de hacer un TOPICO piensa si puedes hallarlo en Google o en el Buscador del Foro...
  #6 (permalink)  
Antiguo 06/06/2014, 12:10
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Encontrar palabras con al menos 3 caracteres con MATCH AGAINST

Cita:
Se puede crear un procedure.
Si, y terminarías haciendo la misma lógica que en programación, con la diferencia que con SQL tendrás muchísmos menos recursos que los que poseen los lenguajes de diverso tipo, porque el SQL (y todas sus formas proccedurales) están optimizados para trabajar con tablas.
No pierdas de vista que la meta del SQL y las bases de datos es operar con tablas de datos y hacer operaciones con ellas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: caracteres, encontrar, match, menos, palabras, select, sql
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 22:39.