Re: orden de registro

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/

In response to

Responses

Browse pgsql-es-ayuda by date

  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