Re: Re[2]: Tiempo de consulta con full text search

From: "Raul Andres Duque" <ra_duque(at)yahoo(dot)com(dot)mx>
To: "Ever Daniel Barreto Rojas" <ebarreto(at)nexusit(dot)com(dot)py>, <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Re[2]: Tiempo de consulta con full text search
Date: 2008-01-03 16:10:29
Message-ID: 012301c84e23$29e87060$5800a8c0@amadeus.net.co
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda


----- Original Message -----
From: "Ever Daniel Barreto Rojas" <ebarreto(at)nexusit(dot)com(dot)py>
To: <pgsql-es-ayuda(at)postgresql(dot)org>
Sent: Thursday, January 03, 2008 11:40 AM
Subject: Re[2]: [pgsql-es-ayuda] Tiempo de consulta con full text search

El 03/01/2008 a las 10:47 a.m., escribiste:
> Una posible idea seria usar indices GIN en vez de GiST. Deberia ser

Donde puedo leer sobre la diferencia entre indices GIN y GIST?

Atentamente,

RAUL DUQUE
Bogotá, Colombia

> bastante mas rapido. El problema es que cuando quieras insertar nuevos
> elementos en la tabla, es lento. (Lo cual vas a observar en UPDATE
> tambien).

Alvaro, hice lo que me comentaste y la velocidad de las consultas
mejoraron, muchas gracias!

Describo lo que hice en caso de que a alguien le surja el mismo
problema:

-- Para crear los campos para Full Text Search

-- aumentamos maintenance_work_mem para que la creacion del indice
-- sea mas rapido, en mi caso, a 600MB
SET maintenance_work_mem TO 614400;

-- Agrego una nueva columna tsvector a mi tabla
ALTER TABLE persona
ADD COLUMN idx_fti_nombrecompleto tsvector;

-- Ahora actualizo la columna con los nombres
UPDATE persona
SET idx_fti_nombrecompleto = to_tsvector('default',
coalesce(per_nombres, '') || ' ' || coalesce(per_apellidos, ''));

-- Hacemos vacuum
VACUUM FULL ANALYZE;

-- Ahora creamos el indice GIN
-- nota que en caso de que se necesita GiST, simplemente cambiar
-- USING gin() por USING gist()
CREATE INDEX idx_fti_nombrecompleto_idx
ON persona
USING gin(idx_fti_nombrecompleto);

-- Hacemos vacuum de nuevo
VACUUM FULL ANALYZE;

En mi caso particular definí un trigger sobre persona (BEFORE
INSERT BEFORE UPDATE) para que actualize automáticamente el campo
tsvector (la definición del trigger se puede ver al principio de
este hilo)

Una vez mas, gracias Alvaro :D

Cordiales saludos,

-------------------
Ever Daniel Barreto Rojas
e.mail: ebarreto(at)nexusit(dot)com(dot)py :: Nexus Information Technologies
web: www.nexusit.com.py
03/01/2008 12:31 p.m.

---------------------
El que se ríe último, es el que piensa más lento.
---------------------

--
TIP 3: Si encontraste la respuesta a tu problema, publícala, otros te lo
agradecerán

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Ever Daniel Barreto Rojas 2008-01-03 16:40:10 Re[2]: Tiempo de consulta con full text search
Previous Message Ever Daniel Barreto Rojas 2008-01-03 16:09:25 Re[2]: Tiempo de consulta con full text search