No tenés ni idea de cuanto me acabás de ayudar, muchas gracias,
Full Text Search en MySQL
Hace mucho que no hago un post para programadores, pero hoy vuelvo y con un poco de SQL que muchos no tienen tan claro...
Para el que le interese hacer un buscador en MySQL hay una herramienta que tienen en todos sus MySQL y que pocos usan.
La maldita costumbre del "Like" hace que se olviden de usar índices y full text search, acá les dejo un poco como es la idea.
Si tenemos una tabla con nuestras noticias donde hay un título y un cuerpo principal de la nota, titulo y cuerpo, primero hay que asegurarse que sean Varchar o TEXT , no usar BLOB para esto, no sirve.
Luego hay que crear el índice:
ALTER TABLE notas ADD FULLTEXT(titulo, cuerpo);
ahí se crea el índice para la búsqueda, esto puede ocupar un poco más de espacio pero lo importante se ve en el resultado de la búsqueda. Más rápida y eficiente que un Like, simplemente funciona como un buscador y no como una comparación sencilla y costosa como el like.
Buscamos así:
SELECT * FROM notas WHERE MATCH(titulo, cuerpo) AGAINST ('Paleta')
donde 'Paleta' es nuestra palabra de búsqueda nos podrá traer inclusive frases o más de una palabra (el like se muere si le hacen eso)
Pero si además quieren ordenarlo por "rating" u orden de importancia de la búsqueda:
SELECT * , MATCH(titulo, cuerpo) AGAINST ('Paleta') as Score FROM notas WHERE MATCH(titulo, cuerpo) AGAINST ('Paleta') ORDER BY Score DESC
(obviamente nunca usen *, ahí pongan los campos que van a usar)
Score tiene un valor que no se bien como se calcula pero nos da un orden coherente de lo que se encontró tal cual hacen algunos buscadores que imprimen un porcentaje o un valor de "acierto"
Inconvenientes:
El límite de búsqueda está configurado en el MySQL y por lo general es de 4 caracteres, así que si quieren buscar algo simple como... PHP! no lo van a poder encontrar y no va a emitir ningún resultado. Sucede eso con las búsquedas demasiado simples que resulten en un 50% de las posibilidades de encontrar, directamente da resultado nulo. Así que ese es el único detalle en contra pero a favor que busca muy rápido y más eficientemente además de que el resultado es el que queríamos.
Info completa:
http://www.mysql.com/doc/en/Fulltext_Search.html
http://www.zend.com/zend/tut/tutorial-ferrara1.php
Otros posts que podrían llegar a gustarte...
Comentarios
-
menos mal que le sirve a alguien! yo ya lo estoy implementando en el buscador del PostRev (este CMS) y funciona muy bien, espero que no sea servidor-violatorio demasiado, si el índice fue bien creado no debería ser lento para nada
-
Has hecho alguna prueba para buscar sobre archivos de texto, incluyendolos en una columna de mysql??
-
no sobre archivos de texto porque el full text search no funciona sobre un BLOB si no que solo sobre campos del tipo TEXT
-
Hola...me preguntaba si conoces alguna forma de hacer full text search pero en postgres, agradezco cualquier respuesta...!!!
-
Para cambiar el límite inferior de tamaño de las palabras basta con editar el fichero my.cnf y añadir la línea
ft_min_word_len = 3 # longitud mínima de palabra: 3 caracteres
Tras esto hay que re-crear el índice fulltext, lo que se consigue con
REPAIR TABLE tabla QUICK;
Más información en la documentación de MySQL.
-
ojo con eso, que cuanto más chica es la palabra mínima, más grande es el índice y más lenta la búsqueda, con el agravante de "violación de servidor" que te mandás en cada search
-
Fabio;
Has echo una consulta com mas de dos campos, por ejemplo
$consulta=$db->Execute("SELECT * FROM $sql_usuarios WHERE MATCH(usuario, nombre, apellido, email, calle, descripcion) AGAINST (´$keys´)");
Porque solamente me encuentra si existe un usuario, no me busca por los demas campos.
Sabes que puedo estar haciendo mal?
Gracias.
-
Hola esta bueno el buscador, una consulta.
Suponete que quero buscar las ocurrencias de las palabras "php mysql", como hago para que solo me devuelva los registrso en los cuales estan las 2 palabras, y no 1 de las 2???? se puede???
muchas gracias por tu ayuda.
Alejandro
-
Alejandro, ahí vas a tener que buscar en la ayuda de MySQL pero si, se que se puede con ciertos parámetros para indicar cómo querés que sea la búsqueda
http://dev.mysql.com/doc/mysql/en/Fulltext_Search.html
-
Hola Pablo. Permíteme felicitarte por esa contribución tuya tan importante a los que comenzamos a programar en PHP. Quisiera pedirte por favor, me indiques una manera de paginar los registros de un Select, tengo mi tabla clientes y desearia mostrarlo de 1 en 1 mediante el Clic a unas imagenes de Flechas ( |>, >>|). Gracias por tu ayudadita.
Cordialmente: Luis Herrera, Ecuador
-
Hola Puis ah, es que soy Fabio
para paginar, en MySQL tienes la función Limit.
limit 0 , 20 te mostrará, comenzando desde el registro 0 los primeros 20 resultadoos
SELECT * FROM USUARIO LIMIT 0,20
mostrará los primeros 20 usuarios, si el LIMIT es 20,20 mostrará los siguientes 20 y así.
de esta forma es fácil hacer un paginador.
-
que tal favio
mirad que yo ya he estado haciendo pruevas con lo que voz nos enseñas en este post, y como dices aun no tengo muy enclaro esto del mysql y lo de php, me gustaria si fueras un poco mas amable en explicarlo con mas piedritas para los que no le entendamos, a mi parecer no se si toy wey o algo me falta el buscador ya lo hice jalar pero no me busca nada no se si tenga que crear un indice en la base de datos o sabe.
-
jesus, el índice se crea, como explico en el texto, con esto: ALTER TABLE notas ADD FULLTEXT(titulo, cuerpo);
-
Hola amigos,este codigo es muy bueno,nada q ver con el Like, pero quiero hacerles presente algo, un detalle del MATCH, cuando buscas en varios campos este MATCH toma prioridades x cada campo y no realiza una busqueda total en todos los campos y es x eso q a veces no encuentra un dato q supuestamente deberia encontrar en cierto campo, hagan sus pruebas y veran. Pero cual es la solucion.... pues deben crear un multicampo en MySQL q contenga todos los campos donde se realizara la busqueda, esto les da opcion a q solo busq un campo y no varios, al buscar un solo campo, ahi si realizara una busqueda completa.Ok. Bueno nos vemos y espero les ayude este dato. Bye.
-
Hola, yo solo quiero preguntar si en php hay alguna forma de sacar el valor de ´score´. Y otra preguntilla, si me podeis decir como cambiar el ft_min_word_len en windows, porque lo he intentado de mil formas y nada.
Muchas gracias y muy bueno el articulo .
-
Hola, te felicito por el dato, ya que me ha ayudado en un sitio que estoy desarrollando. Pero tengo una consulta respecto del tema "Multicampos" que mensionó JuanK.
He tenido el problema descrito por él, pero no he encontrado la forma de unir los campos. Supongo que es con un AS ????.
Por favor si puedes aclarármelo...... Gracias.
-
Hola
Mi problema es el siguiente quiero realizar busquedas en jsp y mysqlfront lo que pasa que hago mi select y quiero unir con mas select pero en mysqlfront no hay la palabra o en comendo union y mis tablas que tengo estan relacionadas desde ya muchisimas gracias por la ayuda
-
Hola a todos, quería agradecerles a todos por esta muy buena solución y agregarle un detalle con respecto a la cantidad de palabras a buscar, yo esto lo solucioné con PHP de la sig. manera:
$vector_palabras = explode(" ", $_POST);
if (count($vector_palabras) == 1){
$armo_select = "SELECT * FROM tabla WHERE campo1 LIKE ´%$vector_palabras%´ or campo2 LIKE ´%$vector_palabras%´ ORDER BY campon DESC";
}
else{
$armo_select = "SELECT *, MATCH (campo1, campo2) AGAINST (´$_POST´) AS coincidencia FROM tabla WHERE MATCH (campo1, campo2) AGAINST (´$_POST´) ORDER BY coincidencia DESC";
}
$result = mysql_query("$armo_select");
// creo que todos ya se dieron cuenta de o que hice, pero por si las brujas...
Primero separo las palabras que se cargaron en el formulario con un EXPLODE() luego me fijo cuantas palabras separadas por espacio " " hay en lo que se cargó en el form. COUNT($array), si es 1 palabra hago un LIKE y si son más de una hago un MATCH.
en el select del MATCH puse tambien un campo AS para ordenar la busqueda por coincidencias el orden que le dí es DESC, así coloca primero las de mayor coincidencia.
Espero les siva como me sivio a mi..
-
Hola Fabio, muchas gracias muy útil.
Una cosa, ¿para sacar el valor score una vez hecha la consulta? Como lo hago.
Gracias de antemano
-
holafabio un favor como hago para hacer busquedas sencillas donde se usen varios criterios juntos y separados
-
Que "muy bien" trabaja !
Me solucionó muchos dias de pruebas y de busqueda en internet. de verdad es un gran aporte. Gracias!
-
:s
nesecito llamar en php una base de datos y traerme los ultimos años de cada revista pero cada revista publica uno o dos numeros al año u cuando me la traigo por año pero me trae con el primer numero del año y no el ultimo.
como hago para traerme el año pero con el ultimo numero en PHP y MySql
-
Haciendo referencia al mensaje que anexo en la parte posterior de mi POST, he leido la ayuda de MySQL y no encuentro como hacerlo, alguna idea de como buscar las ocurrencias de las palabras ej: "php mysql"???, muchas gracias
-------------------------------------------------
Hola esta bueno el buscador, una consulta.
Suponete que quero buscar las ocurrencias de las palabras "php mysql", como hago para que solo me devuelva los registrso en los cuales estan las 2 palabras, y no 1 de las 2???? se puede???
muchas gracias por tu ayuda.
Alejandro
<a href></a><a href></a><img src><img src><a href></a><a href></a><a href></a><a href></a><a href></a>
-
Pedro, no creo que lo puedas resolver con Full Text Search, si no con el viejo Like
select * from pepito where texto like ´%php%´ AND texto like ´%mysql%´
la condición AND obliga a que se den ambas coincidencias, pero el uso de like %% hace que sea muy lenta e ineficiente la búsqueda.
-
Sí que es posible conseguirlo, Alejandro. Full Text incorpora operadores lógicos que puedes añadir a las palabras usando el modo el BOOLEAN MODE. Puedes añadir un símbolo "+" antes de cada palabra para forzar que la encuentre, o un * como comodín, p.e. Encontrarás más referencias en la documentación de Mysql.
-
Me he identificado con el tema, estoy estudiando en la universidad y mi trabajo final de curso trata sobre esto, simular un buscador en ftps, es decir indexo todos los ficheros y directorios de los ftps de la red en una base de datos y luego solo seria implementar un buscador para esa base de datos. Mi pregunta es la siguiente: que tal si la consulta que necesito hacer a mi base de datos requiere acceder a informacion de varias tablas y no a una solo como en todos los ejemplos que he encontrado del tema? Que tal si dentro de la clausula where necesito chequear otras cosas, por ejemplo que un campo de la tabla1 coinsida con uno de la tabla2.
Por otra parte si alguien me pudiera ayudar en esto, es que necesito una funcion php que me permita saber de un ftp sus directorios y ficheros. He usado la funcion ftp_rawlist, pero para todos los ftp no funciona de la misma forma. Ya he implementado mi biscador con el Like, pero cuando especifico cadenas modelos de mas de 4 o mas caracteres, por ejemplo:%acrob% no me devuelve ningun resultado, existiendo en la BD elementos que cumplen el criterio. Lo mismo sucede si especifico un elemento sin caracteres especiales como el %, sencillamente el nombre, en este caso se supone el Like funcione como un =, pero en mi caso no, no se por qué?
-
Hola.. algien me puede decir o explicar detalladamente como hago una encuesta en php con mysql.
como hago referencias(foren key) en mysql usando php?
-
Hola, he utilizado las instrucciones que ponen aqui y me resulta cuando ago la busqueda de una sola palabra, pero para 2 o mas no me genera ningun resultado. Les agradeceria si me pudieran ayudar, este es el codigo:
-
Karlos Hill:
tendrás que buscar más en la ayuda de MySQL yo lo uso poco y por lo general si me da resultados para más de una palabra
-
<strong> HOLA AMIGOS ME PODRIAN AYUDAR EN PROGRAMAR UN BUSCADOR EN PHP PARA BUSCAR INFORMACION EN BD EN MYSQL SON VARIAS TABLAS . DESDE YA AGRADEZCO SU AYUDA . ELVIS </strong>
-
Estoy con un problemita, no puedo hacer funcionar esto. Alguien me puede dar un consejo.
Aca les paso el código
´´){
$result = mysql_query("SELECT nombreEmpresa, MATCH(nombreEmpresa) AGAINST (´%$busqueda%´) as Score FROM empresas WHERE MATCH(nombreEmpresa) AGAINST (´%$busqueda%´) ORDER BY Score DESC LIMIT 0,20
; ", $link);
echo " Empresa:".mysql_result($result, 0, "nombreEmpresa")."<br>";
} else {
echo " Busqueda es vacia"
}
endif;
?> <strong></strong><em></em>
-
No se copio bien el codigo aca se los mando
´´){
ALTER TABLE empresas ADD FULLTEXT(nombreEmpresa);
$result = mysql_query("SELECT nombreEmpresa, MATCH(nombreEmpresa) AGAINST (´%$busqueda%´) as Score FROM empresas WHERE MATCH(nombreEmpresa) AGAINST (´%$busqueda%´) ORDER BY Score DESC LIMIT 0,20
; ", $link);
echo " Empresa:".mysql_result($result, 0, "nombreEmpresa")."<br>";
} else {
echo " Busqueda es vacia"
}
endif;
?>
-
hola fabio por favor borra el comentario de luis, es un compañero de clases y por accidente tomo mi codigo y no quiero que tenga acceso a mi base de datos te lo pido por favor $conexion = mysql_connect(*******); si lo ve mi jefe es capaz y me bota
-
Podrina mandarme los Codigo De Fuente a mi email del Buscador lo nececito Gracias, mi email es [email protected]
-
Sin crear el indice, esto funciona? Es que lo que se arregla con hacer el buscador, se estropea por el otro lado creando el indice, ya que haze que todo vaya lento :s
-
¿lento? si ese índice hace que funcione lento el problema es otro, ¿sobre que plataforma está ese mysql? teniendo en cuenta que el índice se crea una vez y se agranda solamente cuando se agrega un registro en esa tabla, no debería ser lento, todo lo contrario, este índice es para hacerlo más rápido.
ahora bien, si el server mysql corre en un Pentium de 200Mhz con 32Mb de RAM el problema es el hardware, no el índice!
-
Hola estoy haciendo un filtro para filtrar palabras fuera de tono...
Pero tengo un problema mi filtro ya filtra si alguien pone capullo pero no si para burlar al filtro pone uncapullo todo junto... alguna idea?
Gracias de antemano
-
A Luchi
creo q te falta un ; en el ultimo echo
le eche un ojo asi no mas
cita:
******************************************************
No se copio bien el codigo aca se los mando
´´){
ALTER TABLE empresas ADD FULLTEXT(nombreEmpresa);
$result = mysql_query("SELECT nombreEmpresa, MATCH(nombreEmpresa) AGAINST (´%$busqueda%´) as Score FROM empresas WHERE MATCH(nombreEmpresa) AGAINST (´%$busqueda%´) ORDER BY Score DESC LIMIT 0,20
; ", $link);
echo " Empresa:".mysql_result($result, 0, "nombreEmpresa")."
";
} else {
echo " Busqueda es vacia"
}
endif;
?>
-
hola
cuandom hago una consulta me da este error
//-*-*-*consulta SQL: Documentación-*-*-*
SELECT * ,
MATCH (
usuario, apellidos
)
AGAINST (
´palabra´
) AS Score
FROM fotos
WHERE MATCH (
usuario, apellidos
)
AGAINST (
´palabra´
)
ORDER BY Score DESC
LIMIT 0 , 30
MySQL ha dicho: Documentación
#1191 - Can´t find FULLTEXT index matching the column list
-
te está indicando que nunca creaste el índice, te falta el ALTER TABLE para modificar la estructura y agregarle el índice full text
-
A ver a ver, para los que quieren buscar varias palabras en un campo y q coincidan todas (ej: "mysql php") solo tienen q encerrar entre comilla simples y luego dobles lo q desean buscar (ej: ´ " mysql php" ´ y ahi tendran el resultado exacto, esto prueben en la base y veran q todo va bien ...ahora si desean hacerlo desde php con un campo de busqueda ahi es otra cosa o sea mas o menos de esta forma:
la palabra a buscar la ponen entre comillas en la barra de busqueda(ej: "mysql php ") y en el codigo d busq queda asi -- AGAINST(´" . stripslashes (str_replace (""", """,$var_busq)) . "´--
-
Para hacer busqueda de dos palabras en una misma columna tienes que usar los conectores booleanos ejemplo +palabra1 +palabra 2 o bien para encontrarlas exactamente puedes usar "palabra1 palabra2"
mira http://www.phpfreaks.com/tutorials/129/0.php
-
Muy bueno el código, gracias por el aporte.
Una consulta, que no me parece muy complicada, pero no doy con el clavo para solucionarla.
El editor carga notas en la tabla correspondiente desde un frontend, por ej. la palabra "apícola".
Luego al procesarse, finalmente se almacena "apícola" en la tabla.
El problema es que los usuarios no utilizan acentos en sus busquedas, y por ello no se devuelven resultados en las busquedas al no encontrar incidencias.
Como hago para que se se busque una palabra sin acento, y se devuelvan los resultados CON y SIN mayuscluas almacenados.
parte de mi codigo:
$query_search= ´SELECT * FROM tb_empresa_textos WHERE MATCH(empresa_texto_descripcion, empresa_texto_desc_comercial ) AGAINST ("´.$palabra.´")´;
GRACIAS y Espero su ayuda
-
estube leyendo su sitio y la verdad me parecio muy interesante, yo neceisto realizar un buscador dentrode mi sitio de dreamweaver tu podrias ayudarme
-
Alguien puede decirme como hacer una consulta para conectar conectar varias tablas usando mysql y php, los parametros de la cosulta son $idrubro, $idsubrubro y $idempresa, pertenecientes a las tablas rubro, subrubro y empresa respectivamente.
-
me olvidaba los campos de las tablas son:
rubro{idrubro(PK), descripcion}
subrubro{idsubrubro(PK), idrubro(FK), descripcion}
empresa{idempresa, nombre empresa, idrubro(FK), idsubrubro(FK)}
los campos que voy a mostrar son rubro.descripcion, subrubro.descripcion, empresa.nombre_empresa
-
Jack, te recomiendo que busques un tutorial de SQL y revises la parte de "JOINS"
en la sección de descargas de este site tenés uno sencillo, <a href="http://www.fabio.com.ar/descargas.php?id_descarga=13&id_categoria_descarga=2">click aquí</a>
-
En primer lugar, gracias fabio por la data que es muy bueno, el problema que tengo que cuando busco numeros, por ejemplo ´6000´ no los encuentra, sera que eh hecho algo mal?
Desde ya gracias
-
skropper
el problema está, seguramente, en el tamaño mínimo de palabra que busca. Eso se configura en el MySQL y es un problema clásico del Full Text Search ya que por lo general indexa palabras de más de 3 caracteres, y en algunos casos está configurado para más de 4. 6000 tiene 4 caracteres, puede que no esté indexado.
hay una variable en la configuración de mysql que es:
ft_min_word_len=3
el valor es el que modifica esta propiedad, cuanto más chico más "lento" y grande el índice, así que ojo y cuidado porque puede traer problemas
-
querido fabio segui tu recomendacion de agrandar el ft_min_word_len a 3 pero sigo teniendo el mismo problema, si por ejemplo pongo ´03.04.05´ o ´06/05´ no sale nada si en cambio cuando pongo solo texto.
gracias y disculpen las molestias.
-
Hola que tal, espero se encuentre muy bien....
Quisiera saber si tienen algun ejemplo de como subir archivos desde un formulario y luego poder bajarlos cuando sea necesario ... soy nuevo en esto del php y espero que me entiendan
muchas gracias
-
Gracias Fabio!!!! Muy bueno el articulo. Tenia hecho un buscador con LIKE que daba lastima...
Saludos
Martun
-
Hola
Excelente artículo, hace bastante tiempo que leo tu blogm y e sla primera vez que poesteo. Me asaltan algunas dudas, que espero poder solucionar, pero las dejaré como inquietud.
1.- Me imagino que al crear un nuevo indice, estamos agregando información extra a la base de datos, consideremos que esta base de datos crece exponencialmente, como será el costo de agregar un nuevo índice (fuera de los que estan por el modelo que aplicamos).
2.- El tiempo de busqueda en una tabla de 10 registro no es el mismo que en una con 10millones. Me gustaria investigar mas sobre ese aspecto.
3.- Hasta el momento solamente se mencionan ventajas al realizar este método de busqueda, consideremos que todo tiene desventajas, cuales serian estas
4.- Generalmente, las bases de datos, no tienen una o dos tablas, generalmente tienen 5 como mínimo, donde estas 5 almacenan datos ( no consideremos las tablas de referencia, que por sí no necesitan mucha busqueda) se tendria que realizar una busqueda para cada tabla.. o se pueden generar Joins para usar el mecanismo mencionado anteriormente
5.- COn respecto a la pregunta anterior.. como realizo los joins con tablas referenciales ?? por ejemplo, si tenemos una tabla EMPLEADO, y en la otra CARGO, y queremos que busque en todos los empleados que tienen cargo administrador, jefe o secretaria... no vale hacer la busqueda por el Identificador del cargo. (Quizas esta búsqueda quedaria mejor con joins, pero es un ejemplo)
Eso se me ocurre por el momento, espero todos los comentarios
Saludos
Jotamachuca
-
Se me olvidó un pequeño gran detalle :-)
Los acentos.. dependiendo de la configuración regional del server, de la base de datos, de los datos, del cliente, dependeran muchas de nuestras búsquedas.
Imaginemos el siguiente supuesto. Ingreso un artículo, donde la palabra principal es iniciación (con acento). El motor lo guarda (por seguridad ante el cambio) como iniciación, pero por un bug en el campo nombre se guarda tal cual. Supongamos tambien, que por una mala configuración del los caracteres locales (puede pasar), se guarda en el campo nombre como "iniciación", pero el acento de la o, se guarda como ... cualquier cosa.
Ahora cuando realizo las búsquedas.. como se podria optimizar esto, de manera de encontrar este artículo ???
a) Cambiar todos los acentos, independiente del campo que sea
b) Eliminar todos los acentos
c) Este tio sta loko y nunca tendré ese problema, asi que todo lo que escribió es paja molida :-)
Eso :-)
Saludos !!!
Jotamachuca
-
Jotamachuca: vamos por partes
1.- tal cual, crece exponencialmente el espacio usado en la DB
2.- es obvio eso, pero también depende del motor de base de datos y el tipo de tabla (ej: InnoDB, MyISAM) creo que en la web de MySQL se explica un poco mejor cual sirve para cantidades de millones.
3.- las desventajas, creo que nombro alguna arriba, están en el tamaño de la búsqueda: si está configurado a 4 caracteres no podés buscar palabras más chicas, si tenés una de 3, por ejemplo FTP no te la va a encontrar nunca porque la palabra menor es de 4 letras.
4.- los joins sólo si vas a buscar en texto, este tipo de búsqueda: FULL TEXT SEARCH, es para texto! no para buscar algo que fácilmente podrías desplegar en un combo.
5.- más o menos lo mismo que lo anterior. Si buscás por el apellido del empleado usás el FULL TEXT pero para el campo que define el cargo (que por lo general es una cantidad limitada) te conviene hacer un combo y el join lo hacés por un ID en particular. ¿quien buscaría el cargo tratando de adivinar? no tipearías "carlos perez, gerente", lo último lo buscás en un combo y listo.
6.- para los acentos recomiendan usar UTF-8 así lo puede ver cualquier motor en cualquier idioma, yo todavía uso ISO. Igualmente no he leído la documentación de MySQL a full como para saber cómo resuelve el tema de los acentos y si los pasa a "sin acento" como hace Google, no creo que sea tan complejo MySQL 5 ya no lo sé.
-
Hola:
Bueno estoy haciendo un sistema en el cual debo de hacer uan busqueda, puede que sea po un asolapalabra o por fecha, encontre un ejemplo en esta direccion www.programacion.com pero tengo un problema es qu mi mysql que estoy utilizando es el 4.1 y no me dejar utilizar el fulltext asi que o se uqe onda si me pueden aydar se los agradeceria mucho.:s
-
Disculpen mis faltas de otografia, y todo lo que me de la busqueda se debe de poner en una tabla con scrollbar
Gracias
-
Maritza, el MySQL 4.1 soporta perfectamente Full Text Search. Lo que puede suceder es que no esté habilitado en tu servidor, pero desde la versión 4.0 funciona perfecto incluyendo 4.0, 4.1 y 5.0
-
Oye he leido que no se puede el fulltext para campos BLOB y como se le haria para sacarlos dela based edatos en un abusqueda?
-
Hola
Gracias Fabio por responder... te cuento que tengo una tabla con 1millon de registros , en el cual metí texto y basuras varias para hacer pruebas... espero escribir un documento como hice eso, para que sirva a alguien mas.
Con respecto al punto de la integridad que puse y las llaves foraneas y toda esa vaina :-), creo que no me entendiste mucho :-(...
Estoy claro que la busqueda si se a que corresponde, seria mejor con un combo... yo pensaba en un nivel superior. Consideremos que tengo 3 tipos de contenidos distinto que deseo consultar.
Noticias (ID_NOTICIA, ID_TIPO_NOTICIA, TITULO, NOTICIA)
Articulos (ID_ARTICULO, ID_TIPO_ARTICULO, TITULO, ARTICULO, ENLACE, OTRO)
Publicaciones (ID_PUBLICACION, TITULO, ID_AUTOR, ID_TIPO_PUBLICACION, RESUMEN, PUBLICACION).
Y donde ID_TIPO_NOTICIA, ID_TIPO_ARTICULO, ID_AUTOR, ID_TIPO_PUBLICACION son las llaves foraneas de tablas referenciales y poseen la siguiente estructura
TIPO_**** (ID_TIPO_**** , NOMBRE_TIPO_*****)
(Es solo un ejemplo, se que esto puede mejorarse, pero no nos coloquemos quisquillosos)
SI en tipo de noticia aparece "Base de datos" y tengo un articulo que tiene por titulo "base de datos" , y una publicacion de tipo "Base de Datos" ... como hago la busqueda????
Ahora me entiendes???? Si justo se da la casualidad, que en estos tres contenidos no mencionno la palabra "Base de Datos" , pero si estan relacionados en sus tablas referenciales.. y coloco al buscar "Base de Datos"... se estan perdiendo 3 articulos distintos (1 noticia, 1 articulo, 1 publicacion), siendo quizas que esas son las que justo necesitaba :-(
Espero que me entiendas mi comentario.. ese es el punto ..
COn respecto al rendimiento veré que onda con el millon de registros, aca te presento la estructura del cuento.
mysql> describe ARTICULO;
+-------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+----------------+
| ID_ARTICULO | int(11) | | PRI | NULL | auto_increment |
| ID_TIPO | int(11) | | | 0 | |
| NOMBRE | varchar(255) | YES | MUL | NULL | |
| ARTICULO | text | YES | | NULL | |
| CREACION | date | YES | | NULL | |
| ESTADO | char(1) | YES | | NULL | |
| VISITA | int(10) | YES | | NULL | |
+-------------+--------------+------+-----+---------+----------------+
Para maritza, quizas estos links te sirvan
http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html
http://www.zend.com/zend/tut/tutorial-ferrara1.php
http://www.mysql-hispano.org/page.php?id=15
Saludos a todos...
-
Jotamachuca, una idea que se me ocurre es que realices tres búsquedas unidas por "UNION", en MySQL 5 es más fácil gracias a los stored procedures , pero aún en 4 o 4.1 se puede hacer.
sí o sí son tres consultas si querés que lo haga bien y sea más manejable. porque cada una tendrá su propio índice y sus propios problemas.
cuando mostrás los resultados los armás en una misma tabla para que parezcan de una misma consulta.
en esa tabla y con un millón de artículos, si la idea es usar full text search, será lento sin dudas, pero más rápido que sin índice.
de hecho, en el weblog está hecho así actualmente, por eso el límite del tamaño de palabra es necesario para utilizarlo.
-
Lo de la UNION lo habia pensado,... el asunto es que no se me ocurre como hacer lo de las tablas foraneas..
En el ejemplo cuando haga la busqueda por noticias, la tupla tendria un aspecto así...
ID_NOTIICIA | ID_TIPO_NOTICIA | NOTICIA
1 | 1 | Primera Noticia
y en la tabla TIPO_NOTICIA
ID_TIPO_NOTICIA | TIPO_NOTICIA
1 | Base de Datos
La transformación del 1 de la tabla NOTICIA a que asuma que es Base de Datos es la complicación :-)
Se me ocurre algo asi (OJOOOOO Estoy escribiendo lo que pienso.. apuesto mi craneo a que este query no resulta )
SELECT *
FROM NOTICIA , TIPO_NOTICIA
WHERE NOTICIA.ID_TIPO_NOTICIA = TIPO_NOTICIA.ID_TIPO_NOTICIA
AND MATCH( TIPO_NOTICIA, NOTICIA ) AGAINST (´Base de Datos´)
ORDER BY Score DESC
Esop... bueno, hasta ahora no he investigado sobre eso... pero por lo que veo, se que me traerá problema :-)
Gracias por responder, y ocupar tu tiempo y tu espacio
-
Gracias Jotamachuca por las direcciones , ya me salio mi busqueda, y pues a ver que otra cosa me piden , gracias
-
Hola, Felices fiestas!!! Alguien me podria ayudar a aprender a crear bases de datos con SQL o algo por el estilo? Estoi aprendiendo a programar en PHP, gracias...!!!
-
hola me parece muy buena la informacion q dan me parece muy clara y entendible hasta para mi q no soy muy buena en eso
Ahora quisiera saber si me pueden ayudar con eliminar estoy viendo php y ya vamos por el buscador y se parece mucho a lo q esta explicado en la pagina ahora nos mandaron hacer el Eliminar <strong></strong> y no se como hacerlo si me pueden ayudar se los agradeceria. Gracias!.
-
<strong>Hola...!!!</strong> Alguien me podria aiudar kon este error porfavor???:
Error al ejecutar consulta: The used table type doesn´t support FULLTEXT indexes
se ke dice ke ke no soporta el FULLTEXT, pero si pudes aiudarme a hacer ke lo soporte o ke puedo hacer ia ke he utilizado los ejemplos ke aki ponen para aprender un poko i solo este kodigo no me a funcionado!!! aiudaaaa , gracias...!!!
-
Hola a todos
Un punto que no habia considerado.. o que no he visto, es el tamaño adicional que se incluye en la tabla al crear este índice FULLTEXT......
Por que hablo de esto.. simple
Para probvar los ejemplos creé una tabla con un número considerable de registros ( 826.401para ser mas exactos), de los cuales la tabla tiene la sig. estructura
+-------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+----------------+
| ID_ARTICULO | int(11) | | PRI | NULL | auto_increment |
| ID_TIPO | int(11) | | | 0 | |
| NOMBRE | varchar(255) | YES | | NULL | |
| ARTICULO | text | YES | | NULL | |
| CREACION | date | YES | | NULL | |
| ESTADO | char(1) | YES | | NULL | |
| VISITA | int(10) | YES | | NULL | |
+-------------+--------------+------+-----+---------+----------------+
Cual es el punto.. a la tabla se le creó el índice en los campos NOMBRE y ARTICULO... cual fue mi sorpresa al ver que la tabla creció de un tamaño 573.3 MB a uno de 1.6G app. ... o sea el indice FULLTEXT adiciono 850megas de pura estructura.... jejejeje
Creo que es un punto a considerar.. cuando se tienen tablas con bastantes datos.. para prevenir el crecimiento y quedar sin espacio.. aunque en la actualidad por el valor de los discos duros..
Esop
Seguiré investigando
Saludos
-
Muy bueno, aunque lamentablemente para hacer algo mas efectivo y que sirva para hacer realmente un script que sea útil haya que combinar el LIKE con las FULLTEXT, pero bueno, a lo mejor en un futuro no muy lejano nos quitan complicaciones mejorando estos aspectos.
Saludos.
-
Amigos una pregunta?
Quien de ustedes "a logrado" paginar los resultados de este tipo de consulta FULLTEXT de esta manera :
3</strong> 4 5 6 7 SIGUIENTES>>
Sera que hay alguna persona que lo aya logrado?
Yo nunca e tenido problema para paginar resultados de busquedas sencillas.. pero esta FULL TEXT, vaya que me a estado reventando la cabeza...
Gracias y Saludos.-
-
Lex Castillo, el problema que tenés es porque FULLTEXT está soportado solamente para tablas definidas como MyISAM, no hay soporte para InoDB todavía.
Acá paso el link con el reporte de bug en la página de mysql que explica esto:
http://bugs.mysql.com/bug.php?id=6713
-
hola buen dia
me gustaria que me sacaran de mi duda
yo tengo una pagina la cual quiero implementar un buscador para buscar articulos que se encuentran en las paginas, los articulos no se encuentran en un a base de datos solo en la pagina como le puedo hace me sirve esto.
-
Hola, haber si alguien me puede ayudar con esto, que me quibra la cabeza desde hace dias....
necesito hacer una busqueda pero de varias palabras en distintos campos.
por ejemplo, tengo la tabla
nombre| edad |apellido
--------------------------
dato1 dato2 dato3
dato5 dato2 dato3
dato1 dato2 dato3
dato1 dato2 dato3
Nesicito hacer que una busqueda me arroje todos los registros que cumplan con cada uno de los criterios.
Si yo buscara por nombre=dato y edad=dato2 y apellido=dato3
me entregara esto:
dato1 dato2 dato3
dato1 dato2 dato3
dato1 dato2 dato3
Alguien tiene alguna idea de esto??...como lo puedo hacer?..
Eso, desde ya muchas gracias.
P.D.:favio, buenisimo el articulo.
Saludos, Leo.
-
como se hace una consulta de la sgte forma:
al presionar la tecla tab o pasar de un text a otro ejecutar una conculta con codigo PHP
-
????ejecutar una consulta al press tab, osea pasar de un text a otro.
??????????????????????????????????????
-
He utilizado el buscador y me ha funcionado casi al 100% a no ser porque yo en el formulario de busqueda agregue un select donde se elige en que campo realizar la busqueda. Estos campos son de la misma tabla y yo lo envio junto al valor del campo busqueda desde una pagina x.php a buscar.php. Necesito saber donde colocar el valor que me da el select.
Si alguien pudiera ayudarme... muchisimas gracias.
Matias
-
me encuentro con el preblema q habia comentado juanK en el mensaje 18; de eso ya hace algún tiempo pero..podría explicarme alguien por favor el tema del multicampo??
esq me realiza la buskeda pero no de forma completa, hay datos q no me los encuentra y debería...Sabe alguien como puedo solucionarlo??
Gracias
-
mysql se vuelve muy lenta cuando intento realizar la siguiente consulta:
SELECT * FROM (Fecha RIGHT JOIN objetivos ON (fecha.Mes = objetivos.mes) AND (fecha.Ano = objetivos.ano) ) LEFT JOIN Facturacion ON objetivos.codigo = facturacion.codigo where facturacion.tipo 9 "
luego de un tiempo prolongado me arroja el resultado, pero tarda muchisimo, tenes idea que puede pasar??. Yo he probado el mismo sql en Acces y anda rapidisimo
-
Christian, dudo que Access sea una base de datos , el problema, sin dudas, lo tenés porque no estás usando índices y estás haciendo un right join combinado con un left join, sumado a un * en el select. es medio rara tu consulta, el from fecha para joinear con objetivos, no sería mejor hacer el select de objetivos, join fecha join facturacion? pensá que para un right+left join hace producto cartesiano de las tablas, es una bestialidad...
-
fabio felicidades por tu articulo me ha ayudado muchisimo, pero tengo otro problema y espero que me ayudees.
estoy haciendo una busqueda de archivos lo que hago es que un usuario mande cualquier archivo al servidor para despues consultarlo, entonces tengo una base en mysql en donde guarda el nombre del archivo , para despues consultarla y asi poder hacer el link a ese archivo.
ya funciona pero cuando los nombres de archivos tiene acentos ocurre algo raro .simplemente no funciona que podria ser?¿
-
Hola, una consultilla si puede ser...
Tengo una base de datos en la que guardo palabras con y sin acentos. El problema es que al querer hacer busquedas en la base de datos de palabras con acentos, si la palabra esta con acento y sin acento en la base de datos, me devuleve las dos, en lugar de 1.
¿Como puede solucionarse?
Un saludo
-
Buenas al leer esta información que me parece buenisima; ya que yo estoy en busqueda de información porque tengo que realizar una busqueda de unos expedientes pdf que tengo primero que digitalizar esto para crear un sistema de archivo para buscarlo mediante la cedula pero no se como realizarlo y se me a convertido en un obstáculo. Le agraceria una pronta ayuda... gracias
-
Hola; tengo un problema, estoy realizando un directorio, necesito poder buscar por ejemplo los datos de las empresas de una ciudad, tengo un buscador este me llama un archivo que me muestra la informacion, inclui el paginador, pero este me funciona solamente en la primera pagina, cuando le solicito ver la pagina siguiente no me muestra ningun dato. ( Basicamente necesito saber como hago esta paginacion) Gracias
-
Excelente trabajo. Tengo una duda que ya se habia planteado, es solo que eh buscado por todos los rincones de google y nomas no encuentro la respuesta.
Es acerca de los acentos, ke en el post 67 tu pones: <em>"Igualmente no he leído la documentación de MySQL a full como para saber cómo resuelve el tema de los acentos y si los pasa a "sin acento" como hace Google, no creo que sea tan complejo MySQL 5 ya no lo sé."</em>
Alguien ya lo a leído a full este script que sepa como hacerlo?.
Solamente encuentro códigos php y necesitaría mysql puesto que asi es la base de datos y cambiarle a UTF no es una opción.
Gracias
-
oh ya, ay una funcion que se llama Replace, en la que se le agrega la letra que se va a remplazar dependiendo de la base de datos. o sease ´í´,´i´ en caso de buscar Rodríguez.
Por si a alguien le interesa, por ahi va la idea
-
hola... muy util la informacion... una pregunta: estoy haciendo un buscador por keywords para una biblioteca, asi que debo anexar a cada item de la base de datos (libros) los distintos tags que vendrian siendo las unidades de sus indices... la pregunta es... donde deberia ubicar esto dentro de la base de datos? sera que si creo un campo llamado keywords y separo las palabras por comas, la busqueda MySQL las tomara como palabras diferentes? o como una gran frase? espero que me puedan responder pronto porque esto es de mi tesis de grado =/ gracias
-
oye Fabio o a cualquiera de mis hermanos por ahi me podrian facilitar el sistema de Búsqueda con la BD y el Indice porfavor se lo agradecere mucho
-
hola desearia saber como hacer para buscar o en contrarel numero de dni con el nombre completo de la persona es urgente por fabor gracias o si hay algun programita para hacerlo atte noelia
-
bueno amigo muy buen a la explicacion pero bueno jeje pero hice que el INUTIL de LIKE busque frases jejej y estaba ahciendo prueba y el LIKE me encuentra los resultados muy rapidos el triple mas que el MATCH ya que hice las pruebas con una base de datos con mas de 18470 registros
pero bueno solo les queria decir que para que algo haga algo solos e necesita un poco de inventiva jejej bueno mejor le quito la grasa a l script para que sea rapido entendible y en español
-
Bueno de antemano muchas gracias por la ayuda, pero estoy teniendo un problema...en algunas tablas de mi bd funciona muy bien con campos text y varchar...pero en otras no...no se si es la cantidad de campos o el tipo de campo....porque le hecho es que no devuelve ningun error...pero tampoco arroja los resultados que debe arrojar de hecho no bota ningun resultado si me puedes explicare porque pasa esto te lo gradezco.
-
Hola cordial saludo y feliz 2007,
tengo un problema con el siguiente codigo
While($row=mysql_fetch_object($result))
al hacer una busqueda me da como resultado esto:
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in c:appservwwwesultado-buscar.php on line 169
-
hola a todos nesecito ayuda para crear un procedimiento almacenado en mysql este es mi procedimiento:
delimiter //
create procedure sp_procedimi(in des varchar(30))
begin
select*from tabla where descrip like des+´%´;
end;
//
pero sale error espero me ayuden
mi correo es [email protected]<strong></strong><strong></strong><a href></a>
-
Loco! que man tan teso como decimos en Colombia, mira, el score lo que hace es calcular qué resultados son los más acertados y los ennumera de mayor a menor, es decir, si buscas "la fruta es roja" los primeros resultados que te botará seran:
en el arbol de manzanas "<strong>la fruta es roja</strong>"... etc y de ultimo colocara:
<strong>la</strong> belleza de el arbol de manzana, es que su <strong>fruta</strong> es muy <strong>roja</strong>. ves?
Aun asi, me ayudaste resto, anoche me quede hasta las 2 de la madrugada tratando de hacer esto xD
-
El uso de este buscador es lo mismo que usar Google
<strong>+</strong>palabra : busca las coincidencias con
-
Si se quieren hacer consultas de texto completo lo mejor es usar herramientas indexer/searchers externas. Ahora mismo para mysql lo mejor que hay es <a href="http://sphinxsearch.com">sphinx</a>.
El motor fulltext de mysql tiene un rendimiento decente mientras una tabla no sea grande.
Si os interesa el tema fulltext disponeis un manual de <a href="http://www.compuglobalhipermega.net/mysql/instalacion-configuracion-sphinx/"> instalacion y configuración de sphinx en castellano</a> y también un ejemplo completo de <a href="http://www.compuglobalhipermega.net/motores-busqueda/buscador-wikipedia/">buscador de wikipedia</a> hecho con esta herramienta.
Un saludo
-
Soy... demasiado principiante como para guiarme de esa explicacion
Despues de probar y probar pude hacer un "Catálogo de Productos" administrable para wohrquimica.com.ar y una seccion de Novedades también administrable. Ahora estoy queriendo hacer un buscador de productos, que sólo encuentre en NOMBRES de los productos.
En fin..
Fabio.. sos una masa, veo qe soy el único bruto qe no lo puedo hacer. Ya me voy a poner... y sé qe lo voy a poder hacer... (con paciencia y materia gris)
Saludos! (Y)
-
Me funciona bien el full text pero cuando desde mi formulario en php tiene dos campos de búsqueda no me resulta solo me busca por una
-
como seria si tengo 2 tablas relacionadas x decir para una biblioteca table1= libros y table 2 capitulos?
-
un poco tarde jejeje pero no se si todavía está abierta esta discusión? estaba buscando algo sobre pasar la relevancia a porcentaje pero no en base al mas relevante, sino a los terminos de busque y cómo obtiene esa relevancia.... jjchmweb encontraste lo que buscabas?
-
Una consulta con respecto al tema, tambien es un poco tarde, pero mas vale tarde que nunca..
Como hago para buscar trozos de palabras: por ejemplo: si se me ocurre buscar carpas, como hago para que tambien encuentre carpa, o al revez, si busco carpa que tambien me encuentre carpas
Gracias..
-
Che Gracias No sabés cuanto me sirve
Estoy haciendo un mini CMS con blog y eso y me faltaba la búsqueda
Saludos!
-
Encuentro esto después de haber intentado ya muchas cosas, pero alfin lo logre e incluso eh encontrado más recursos de cómo emplear MATCH AGAINST, para quién requiere más info. puede contactarme en [email protected]
-
Cleiton Alves dijo:
Esse código funciona em tabelas innoDB?
no, en MyISAM, para innodb no hay Full Text Search pero se puede hacer algún intento de tener dos tablas, una la original, InnoDb, y otra la copia para búsquedas con MyISAM
-
Hola cómo están? Fabio justo estoy con un buscador y me interesó tu aporte para ver si lo aplico. Porque estoy teniendo problemas con mi código que es este:
"NOMBRE_DE_" LIKE ´%USER_VARIABLE%´
En realidad el problema que tengo es: en mi base de datos tengo en el campo NOMBRE_DE_ "Don Carlos S.A." por ejemplo, y si buscan "don carlos" la búsqueda no encuentra nada, supuestamente con los "%" estaría solucionado pero bueno, no funciona.
-
Hola,
Entiendo que lo que aquí se explica es para tablas MyISAM.
Me han dicho que lo ideal es hacer búsquedas con tablas de tipo MyISAM, y no hacer búsquedas en tablas de tipo InnoDB.
El caso es que las tablas que utiliza el buscador son las mismas tablas que actualizan los usuarios, es decir, que los usuarios pueden insertar registros. Si los usuarios pueden insertar registros, entonces lo ideal es que las tablas sean InnoDB.
Resumiendo: ¿cómo lo puedo hacer para que en las tablas se puedan insertar y hacer búsquedas? He pensado en hacer todas las tablas de la base de datos con InnoDB y duplicar el contenido de aquellas que utiliza el buscador, poniendo la información en otras tablas MyISAM, pero si hago esto estoy haciendo que la base de datos crezca, no sé si de forma innecesaria.
Muchas gracias y saludos
-
Hola, tengo un problema al crear el indice, aparece un error diciendo que el tipo de tabla usada no soporta indices fulltext, no se si saben algo de eso.
Saludos,
-
por si os vale de algo he encontrado otro tutoral con este tema:
http://deckerix.tuxfamily.org/leerArticulo.php?post=92
-
Una alternativa para indexar el contenido de campos de texto de una base de datos es Apache Lucene:
http://lucene.apache.org/
Básicamente es una API disponible para varios lenguajes (original para Java pero con ports para .NET, python, C y creo algunos más) que te permite indexar cualquier fuente de texto (puede ser un archivo de texto simple incluso) con un poco más de flexibilidad que el full text search directo de una BD.
Podés definir tus propios tokenizadores (los que se encargan de cortar el texto en cachos, cada uno de los cuales se corresponde con una de las palabras a indexar) que corten el texto no simplemente por espacios en blanco e incluso realizar normalización de términos (lo que se conoce como stemming, que si buscas por "auto" y "autos" te devuelva los mismos documentos para ambas búsquedas), entre muchas otras funcionalidades.
Recomiendo que le peguen un vistazo todos aquellos que deban incorporar full text search en algún proyecto en el que estén laburando.
Saludos.
-
voy a probarlo, gracias x tu aporte, estoy iniciando en php y tengo un conocimiento medio medio de base de datos.
Gracias x los aportes
-
Dejo un artículo que aporta una crítica al tema:
http://www.grok.in/blog/2008/11/05/full-text-search/
Saludos y gracias.
-
FLACOOOOOOOOOO me salvast la vida jajajaja
GRACIASSSSSSSSSSS!!!!
si qres pasate por la pagina asi vez como qdo
www.beshop.com.ar
MIL GRACIASSSSSSSSS
agus
-
Hola! queria saber si pueden ayudarme:
Tengo una BD de musica y queria ver como hago cuando por ejemplo tengo el mismo nombre de artista, de tema y de cd "Juan Carlos", y cuando me ingresan por teclado el dato ponen "juna Carlos" (o sea, lo ponen mal), porque quiero que muestre todas las filas donde coincida con alguno de todos aunque haya puesto mal una de las palabras, o sea que busque igual aunque una de las palabras este mal. Y aparte, que busque en todas las tablas que necesite al mismo tiempo.
Ojala me puedan ayudar!
-
Mai dijo:
Hola! queria saber si pueden ayudarme:
Tengo una BD de musica y queria ver como hago cuando por ejemplo tengo el mismo nombre de artista, de tema y de cd Juan Carlos, y cuando me ingresan por teclado el dato ponen juna Carlos (o sea, lo ponen mal), porque quiero que muestre todas las filas donde coincida con alguno de todos aunque haya puesto mal una de las palabras, o sea que busque igual aunque una de las palabras este mal. Y aparte, que busque en todas las tablas que necesite al mismo tiempo.
Ojala me puedan ayudar!
primero lo que te ingresen podés cortarlo en pedazos, es decir, cada palabra por separado
luego hay varias formas, hay una función para las palabras que "suenan a" en MySQL: http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_soundex
no es muy eficiente pero puede servir para casos extremos.
así podés hacer una consulta por el match certero
si no recibe nada una consulta por el like
y si no llega nada una por el soundex
o una sola consulta con UNION entre las tres querys y luego un GROUP BY para agruparlas.
-
Hola fabio, podrias enviar a mi correo el archivo, para hacer las modificaciones, lo que pasa es que no soy programador.
muchas gracias
-
ola fabio todo bien con match() y against(), trate tambien explode() pero no consigo el resultado que busco que es parecido al buscador que tiene por decirlo la pagina de la libreria el sotano, alli ingreso por ejemplo :
cien años garcia y me da como resultado solos los titulos de "gabriel garcia marquez" garcia que contienen "cien años (de soledad)".
en mi buscador con los parametros ya explicados en uno u otro caso me da una laaaaaaaaaaaaaaarga lista de garcias y cien y años.
Que estoy haciendo mal ya que las busquedas por palabras y fraces no coinciden con los resultados esperados?
gracias de antemano.
-
Bueno ya encontre la respuesta a la pregunta que hice antes aqui va por si le sirve a alguien.
(Long. del texto - Long. del texto sin los términos) / Long. del texto
Me costo entender este calculo, pero cuando se entiende es increíble el resultado parece mágico.
Es toda la cadena adonde se busca, que pueden ser la suma de varias columnas menos toda la cadena nuevamente pero sin los términos de búsqueda dividido los términos de búsqueda. Yo puse una condición en laa relavancia > 0.8 para que solo me traiga resultados con más de un 80% de las palabras que se estan buscando.
-
Luciano dijo:
Bueno ya encontre la respuesta a la pregunta que hice antes aqui va por si le sirve a alguien.
(Long. del texto - Long. del texto sin los términos) / Long. del texto
Me costo entender este calculo, pero cuando se entiende es increíble el resultado parece mágico.
Es toda la cadena adonde se busca, que pueden ser la suma de varias columnas menos toda la cadena nuevamente pero sin los términos de búsqueda dividido los términos de búsqueda. Yo puse una condición en laa relavancia > 0.8 para que solo me traiga resultados con más de un 80% de las palabras que se estan buscando.
buen tip
-
como modificar el ft_min_word_len a 2 caracteres ya que lo hago desde el archivo my.ini y reinicio el servicio de mysql pero al hacer la consulta SHOW VARIABLES LIKE ´ft_min_word_len´ me sigue mostrando que el ft_min_word_len es igual a 4... espero ayuda. saludos