Publicado en March 6, 2010 by Damian
Ando perdido últimamente, y practicamente no actualizo el blog. Eso es debido a que estoy inmerso en un Proyecto grande, con lanzamiento en varios paises al mismo tiempo y ocupo TODO mi tiempo libre y el que no tengo también en el. Pronto (espero) le voy a decir de que se trata.
Volviendo al tema original del post, les voy a enseñar como hacer un buscador por relevancia con mysql.
La forma tradicional que usamos al buscar con mysql es con el comando LIKE
SELECT * FROM anuncios WHERE titulo LIKE '%perro%' OR descripcion LIKE '%perro%'
Esto nos devuelve todos los anuncios que en el titulo o en la descripcion aparezca la palabra ‘perro’ o ‘caraperro’ o cualquier otra que contenga ‘perro’.
Estos resultado podriamos ordenarlos por ejemplo por la fecha de publicación, por el titulo, etc.
Pero que pasa cuando queremos ordenarlo por RELEVANCIA, osea queremos que el anuncio que hable más de perros aparesca primero y asi consecutivamente. Aqui es donde entra en juego la funcion de mysql FULL-TEXT .
Lo primero que tenemos que hacer antes de hacer un query en convertir nuestros campos en full-text .Para ello simplemente hacemos:
ALTER TABLE anuncios ADD FULLTEXT(titulo, descripcion);
Una ves echo esto , a la hora de hacer la QUERY vamos a usar las funciona de fulltext search MATCH y AGAINST de la siguiente manera:
SELECT * FROM anuncios WHERE MATCH(titulo, descripcion) AGAINST ('perro')
Esta línea utiliza la función MATCH … AGAINST … que encuentra el texto buscado, usando consultas similares a como lo hacen los motores de búsqueda. Además, se calcula internamente una puntuación en función de como aparecen y la cantidad de términos buscados dentro de nuestro titulo y descripcion.
¿Como perfeccionar la busqueda?
SELECT * , MATCH (titulo,descripcion) AGAINST ('perro') AS puntuacion FROM anuncios WHERE MATCH (titulo, descripcion) AGAINST ('perro') ORDER BY puntuacion DESC LIMIT 50
Esta consulta devolverá las primeras 50 consultas ordenadas por la puntuación. Jugando un poco con CSS pueden lograr mostrar estrellitas o barras de progreso segun la puntuación, pero ese ya es otro tema aparte.
Como todo esto tiene alguna limitación que otra. Por ejemplo no toma en cuenta palabras con menos de 4 caracteres.
De todas formas es la forma mas eficiente y rapida de buscar , sobre todo con múltiples palabras.
Un saludo y espero que les haya servido
VN:F [1.7.0_948]
Rating: 0.0/5 (0 votes cast)
Links Sponsors
Publicado en December 31, 2009 by Damian
Para detectar el idioma del navegador y hacer una web multilenguaje existen diversos métodos. Yo particularmente suelo usar el siguiente:
Primero creo el archivo lang-functions.php
<?php
/*
=============================================================================
Funcion: detectar_idioma_navegador()
-----------------------------------------------------------------------------
Proposito: Esta funcion detecta el idioma por defecto seleccionado en el navegador del visitante.
Si no se detecta un lenguaje valido, se asigna el selecionado por defecto.
=============================================================================
*/
function detectar_idioma_navegador() {
global $conf;
$languages = preg_replace('/(;q=\d+.\d+)/i', '', getenv('HTTP_ACCEPT_LANGUAGE'));
$bol_language_detected = false;
// Comprobamos si el navegador usa alguno de los idiomas que hemos predefinido.
foreach ($conf['lang_enabled'] as $tmp_arr_language) {
if (preg_match('/' . $tmp_arr_language . '/i', $languages)) {
$tmp_str_language_detected = $tmp_arr_language;
$bol_language_detected = true;
break;
}
}
// Si el navegador usa uno de los idiomas seleccionados, se devuelve el path del fichero de idioma
// En caso contrario, se devuelve el path del idioma original
if ($bol_language_detected) {
return $tmp_str_language_detected;
} else {
return $conf['lang_default'];
}
}
Una vez creado el archivo lo incluyo de la siguiente manera:
include("languages/lang-functions.php");
$conf['lang_default'] = 'es'; // idioma por defecto
$conf['lang_enabled'] = array('es','en');
$conf['lang'] = detectar_idioma_navegador();
if(isset($_GET['lang'])) $conf['lang']=$_GET['lang'];// Podemos crear un link como por ej una bandera para permitir cambiar el idioma al usario
require_once("languages/".$conf['lang'].".php");
Por último nos queda crear los archivos de idiomas de la siguiente forma:
es.php
<? // Spanish language file
setlocale(LC_ALL,'es_ES');
define("_MENSAJE", "HOLA SOY UN MENSAJE EN ESPAÑOL");
?>
en.php
<? // English language file
setlocale(LC_ALL,'es_ES');
define("_MENSAJE", "Hi im a English message");
?>
En la web escribiriamos echo (_MENSAJE); y según el idioma del navegador aparecerá de una forma u otra.
Espero que haya servido de ayuda
VN:F [1.7.0_948]
Rating: 0.0/5 (0 votes cast)
Links Sponsors
Publicado en December 22, 2009 by Damian
SHIPTIMER recibe su primera actualización tras los consejos de nuestros clientes. El changelog de mejoras y correciones es el siguiente:
+ 10-12-09 Añadido número marea a los trabajos .
+ 10-12-09 Opción de abrir varios trabajos desde busquedas.
+ 10-12-09 Se agrega función para borrar trabajos.
+ 10-12-09 El limite de los trabajos ahora es 3000 caracteres y muestra cantidad de caracteres escritos.
+ 11-12-09 Se agrega campo CUIT a los talleres.
+ 20-12-09 Rediseño de materiales, ahora se divide en ordenes de compra y facturas de compra.
+ 22-12-09 Nuevo campo para “observaciones” dentro de las especificaciones técnicas de los barcos.
+ 22-12-09 Ahora se puede cambiar el estado de un trabajo al crearlo.
+ 22-12-09 Ahora se puede asignar ordenes de compra y facturas existentes a trabajos.
Para conocer más acerca del software más completo para la gestion de una flota pesquera visitar la web de Timersys.
VN:F [1.7.0_948]
Rating: 0.0/5 (0 votes cast)
Publicado en December 14, 2009 by Damian
A diferencia de los <input type=”text”> , los campos <textarea> no tienen el atributo de maxlength. Digamos que dado un campo de texto como el siguiente:
<textarea id="descripcion" onkeyup="contar(this);" cols="50" rows="8" name="descripcion"> </textarea><span id="letras">3000/3000 caracteres</span>
Si queremos contar y mostrar los caracteres escritos en un span, tan solo necesitamos esta pequeña función.
function contar(input) {
//Comprobamos que no pase de 3000 caracteres y si pasa, que borre los sobrantes
if (input.value.length >= 3000) {
input.value = input.value.substring(0,3000);
}
//alamacenamos el resto
var resto = 3000 - input.value.length;
//imprimimos los caracteres restantes en el span
var final=document.getElementById('letras');
final.innerHTML=resto+"/3000 caracteres";
}
Como pueden ver, es muy facil y tan solo bastaron unas lineas de javascript. Saludosss
VN:F [1.7.0_948]
Rating: 0.0/5 (0 votes cast)
Publicado en November 13, 2009 by Damian
Si , lo se desapareci de la tierra. La razon es que estuve inmerso en un proyecto.
Es una web de Humor para colgar anécdotas o historias de borracheras o similares. No requiere registro alguno para subir tu anécdota y además se pueden incluir fotos y videos. Tiene ranking de borrachos y se puede votar las mejores y peores historias. Espero que les guste, pasen y vean
VN:F [1.7.0_948]
Rating: 0.0/5 (0 votes cast)