From: | Daniel Egea <degea(at)plq(dot)es> |
---|---|
To: | Gabriel Ferro <gabrielrferro(at)yahoo(dot)com(dot)ar> |
Cc: | pgsql-es-ayuda(at)postgresql(dot)org |
Subject: | Re: orden de registro |
Date: | 2009-02-12 08:14:38 |
Message-ID: | 4993DA6E.8080104@plq.es |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
Gabriel Ferro escribió:
> ----- 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/
> --
> TIP 7: no olvides aumentar la configuración del "free space map"
>
>
De todas maneras, en tu consulta inicial... si haces un select ... from
... where x in (select...), ese IN es un saco y desde que uses IN ya
pierdes la ordenación. Si quieres mantenerla podrías devolver, como
resultado de tu función, el 'ts_rank_cd(vectornombre,q) as orden' y, en
lugar de usar un IN, pensar en cómo usar un where o una join para poder
usar 'orden' como campo 'order by desc'
Saludos
From | Date | Subject | |
---|---|---|---|
Next Message | Emanuel Calvo Franco | 2009-02-12 12:21:10 | Re: [arpug] Versión del instalador oficial para Windows en Español |
Previous Message | Mariano Reingart | 2009-02-12 04:00:35 | Versión del instalador oficial para Windows en Español |