From: | "Guillermo E(dot) Villanueva" <guillermovil(at)gmail(dot)com> |
---|---|
To: | Hellmuth Vargas <hivs77(at)gmail(dot)com> |
Cc: | pgsql-es-ayuda <pgsql-es-ayuda(at)postgresql(dot)org> |
Subject: | Re: FTS |
Date: | 2016-05-03 16:22:31 |
Message-ID: | CANm+PCD8WLo+_fhOjZrbaARX01itn1cOqMNuEW1zGkEnO81kQg@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
Gracias!
Lo que pasa es que hice unas pruebitas y en el caso de índices comunes, si
despues en la búsqueda le ponés un coalese, si lo utiliza, pero bueno
entiendo cual es el comportamiento en el caso de FTS e índices GIN
particularmente.
Gracias de nuevo
El 3 de mayo de 2016, 11:35, Hellmuth Vargas <hivs77(at)gmail(dot)com> escribió:
> Hola Guillermo
>
> En efecto ese es el comportamiento esperado, el indice solo se puede
> aplicar sobre la expresión de columna exacta que se definió. Al colocar una
> función adicional (en el caso coalesce) esta modificando el valor de la
> columna y sobre este nuevo valor no se genero el indice, sucede lo mismo
> si definimos un indice sobre un valor texto, por ejemplo:
>
> CREATE INDEX idx_tabla_nombre
> ON tabla(nombre);
>
> y luego pretendemos que lo use en una sentencias así:
>
> SELECT * FROM tabla WHERE UPPER(nombre) ='CARLOS'
>
> Si es frecuente la consulta con UPPER debería definir el indice con la
> función UPPER (PostgreSQL soporta esto):
>
> CREATE INDEX idx_tabla_upper_nombre
> ON tabla(*UPPER(*nombre*)*);
>
>
>
> El 3 de mayo de 2016, 07:56, Guillermo E. Villanueva<
> guillermovil(at)gmail(dot)com> escribió:
>
>> Buenos días cómo están?
>> Les comento una experiencia con full text search.
>> En una tabla que tengo unos 120mil registros creé un índice para hacer
>> FTS de la siguiente forma:
>> CREATE INDEX fts_escritodtxt
>> ON tescrito
>> USING gin
>> (to_tsvector('spanish'::regconfig, escritodtxt));
>>
>> cuando hago un explain de la sentencia:
>> SELECT
>> t.escritoid,
>> t.escritofecfirma,
>> t.escritotipojuz
>> FROM
>> tescrito t
>> WHERE
>> to_tsvector('spanish',coalesce(escritodtxt,'')) @@
>> to_tsquery('spanish','hogar & vereda');
>>
>> Me dice que *no utilizará el índice* creado y con una búsqueda
>> secuencial demora aproximadamente 4 minutos.
>> Pero si elimino el coalesce, entonces si usa el índice y el resultado se
>> obtiene en menos de un segundo!!!
>> *¿Es este el comportamiento esperado?* No pasa lo mismo con los índices
>> no fts.
>> Desde ya muchas gracias por sus comentarios
>>
>> Saludos
>>
>> Guillermo
>>
>
>
>
> --
> Cordialmente,
>
> Ing. Hellmuth I. Vargas S.
> Esp. Telemática y Negocios por Internet
> Oracle Database 10g Administrator Certified Associate
> EnterpriseDB Certified PostgreSQL 9.3 Associate
>
>
From | Date | Subject | |
---|---|---|---|
Next Message | heriberto giron | 2016-05-04 22:49:53 | sentencia cluster |
Previous Message | Hellmuth Vargas | 2016-05-03 14:35:00 | Re: FTS |