Re: FTS

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
>
>

In response to

  • Re: FTS at 2016-05-03 14:35:00 from Hellmuth Vargas

Browse pgsql-es-ayuda by date

  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