From: | Gabriel Ferro <gabrielrferro(at)yahoo(dot)com(dot)ar> |
---|---|
To: | pgsql-es-ayuda(at)postgresql(dot)org |
Subject: | Re: orden de registro |
Date: | 2009-02-11 20:20:52 |
Message-ID: | 932060.1400.qm@web52105.mail.re2.yahoo.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
----- Mensaje original ----
> De: Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>
> Para: Gabriel Ferro <gabrielrferro(at)yahoo(dot)com(dot)ar>
> CC: pgsql-es-ayuda <pgsql-es-ayuda(at)postgresql(dot)org>
> Enviado: miércoles 11 de febrero de 2009, 14:08:16
> Asunto: Re: [pgsql-es-ayuda] orden de registro
>
> Gabriel Ferro escribió:
>
> > El problema es que efectivamente la subconsulta hace un order by
> > usando tsearch complicadito de modo que me da las claves de las
> > personas ordenadas segun un rancking (las mas probables primero). en
> > fin.. buscare otra logica..
>
> Creo que se le puede decir a tsearch que no use ordenamiento por ranking
> (y creo que además es un epsilon más rápido).
> --
epsilon?? que quieres decir con esto?, si te refieres a que la funcion terminara mas rapido sin usar order by, calculo que tienes razon.Pero la cosa es que el sistema tiene que hacerlo ya que si busco la persona "PRADON ALEJANDRA CRISTINA' , la funcion me dara mas o menos asi
"PADRON ALEJANDRA CRISTINA'
"PADRON CRISTINA ALEJANDRA"
"MARTNEZ ALEJANDRA CRISTINA"
"PADRON ALEJANDRA MARIA"
PADRON ESTEFANIA ALEJANDRA"
imaginense que me da como 500 registros... es importante que me de un orden de acuerdo que me muestre las mas parecidas primero...., y estos resultados para nuestro trabajo es normal e importante, no solo buscamos a una persona exacta (tareas de inteligencia criminal)
Les paso la funcion que me sirve para la subconsulta asi se dan una idea (como veran uso ts_rank_cd para ordenar).
CREATE OR REPLACE FUNCTION padrones.buscaraprox_persona(nom text)
RETURNS SETOF respuesta_buscar_persona AS
$BODY$
DECLARE
RESPUESTA respuesta_buscar_persona%ROWTYPE;
nombusca text;
BEGIN
nombusca= regexp_replace( replace(REGEXP_REPLACE(trim(upper(nom)),'( ){2,}', ' '),' ','|'), E'[\\s\':&()!]+','','g');
FOR RESPUESTA IN (
SELECT padrones.personas.clave AS clave
FROM padrones.personas,
to_tsquery('spanish',trim(nombusca)) AS q
WHERE vectornombre @@ q
ORDER BY ts_rank_cd(vectornombre,q) DESC)
LOOP
RETURN NEXT RESPUESTA;
END LOOP;
RETURN;
END;
$BODY$
Yahoo! Cocina
Recetas prácticas y comida saludable
http://ar.mujer.yahoo.com/cocina/
From | Date | Subject | |
---|---|---|---|
Next Message | Fernando Hevia | 2009-02-11 20:30:52 | RE: Tabla temporal |
Previous Message | Gabriel Ferro | 2009-02-11 19:58:40 | Re: funcion que devuelve registros en un where |