Problemas con "Full Text Search"

Buen día

Tengo un proyecto en SIU-Toba, que se conecta a una base PostgreSQL 9.6, consta de varias operaciones pero entre ellas varias consultas.
Necesito utilizar las herramientas de la base para realizar consultas inteligentes, en particular quiero usar “Full Text Search”.

La tabla a la quiero aplicar las consultas es:

CREATE TABLE public.documentos
(
iddocumento integer NOT NULL DEFAULT nextval(‘documentos_iddocumento_seq’::regclass),
idarea integer,
cantidaddiasapublicar integer,
documentoapublicar boolean,
publicarapartirde date,
titulodocumento text,
resumendocumento text,
resumenapublicar text,
usuario character varying(20),
idtipodocumento integer,
fechavigenciadesde date,
fechavigenciahasta date, – Campo válido para normas que tienen caducida automática por fecha
nrodocumento integer,
aniodocumento integer,
fecharegistro timestamp without time zone,
idtipoestado integer,
idareageneradora integer,
CONSTRAINT pk_doc PRIMARY KEY (iddocumento),
CONSTRAINT fk_area FOREIGN KEY (idarea)
REFERENCES public.areas (idarea) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE RESTRICT,
CONSTRAINT fk_tipoestado FOREIGN KEY (idtipoestado)
REFERENCES public.tiposestado (idtipoestado) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE RESTRICT
)
WITH (
OIDS=FALSE
);
ALTER TABLE public.documentos
OWNER TO postgres;

De esta tabla necesito que la base me devuelva todos los registros cuyo campo “resumenapublicar”, incluya la palabra “resolucion” en todas sus formas posibles, mayuscula, minuscula y acentuada o no.

Probé armando las siguientes consultas:

SELECT d.iddocumento FROM documentos d
WHERE to_tsvector(d.resumenapublicar) @@ plainto_tsquery(‘resolucion’);

Devuelve dos registros, cuyos id son 76 y 81.

Si cambio la palabra a buscar por “resolucion” acentuada

SELECT d.iddocumento FROM documentos d
WHERE to_tsvector(d.resumenapublicar) @@ plainto_tsquery(‘resolución’);

Obtengo como respuestas otros 3 registros: 66,84 y 87.

De acuerdo a ejemplos que vi en la web , escriba como escriba la palabra resolución me debería devolver 5 registros 76,81,66,84 y 87.

No entiendo que estoy haciendo o mal, no se si falta que habilite alguna librería o realmente entendí mal el concepto de como funciona “Full Text Search”.

Desde ya gracias por la ayuda.

Marcela

Hola Marcela, probaste utilizando el diccionario español?
Seria:
SELECT d.iddocumento FROM documentos d WHERE to_tsvector(‘spanish’,d.resumenapublicar) @@ plainto_tsquery(‘resolucion’);

Saludos, Nico

Hola Nicolas …

Si probé utilizando el diccionario, pero el resultado es el mismo, discrimina los acentos.

Marcela

Hola Marcela

Fijate si tenes la funcion unaccent con un

select unaccent(‘ílènó pingüino’);

Si no esta instalada, intenta crear la siguiente extension :

CREATE EXTENSION unaccent;

Si te da error, tenes que descargar la extension, fijate con un (sudo apt-get install postgresql-contrib ) pero quizas tu s.o. sea otro

una vez que tengas la funcion unaccent andando OK, proba con:

– poniendo diccionario
SELECT d.iddocumento FROM documentos d WHERE to_tsvector(‘spanish’,unaccent(d.resumenapublicar)) @@ plainto_tsquery(‘spanish’,unaccent(‘resolucion’));

SELECT d.iddocumento FROM documentos d WHERE to_tsvector(‘spanish’,unaccent(d.resumenapublicar)) @@ plainto_tsquery(‘spanish’,unaccent(‘resolución’)); – 76,81

– sin diccionario
SELECT d.iddocumento FROM documentos d WHERE to_tsvector(unaccent(d.resumenapublicar)) @@ plainto_tsquery(unaccent(‘resolucion’));

SELECT d.iddocumento FROM documentos d WHERE to_tsvector(unaccent(d.resumenapublicar)) @@ plainto_tsquery(unaccent(‘resolución’));

cualquier cosa avisa por aca.
saludos
Ignacio

Buen día Ignacio

EL sistema operativo que tengo es Debian7.

Tengo instalado PostgreSQL como binario, así que con el comando CREATE EXTENSION unaccent; solucione el problema y las consultas funcionan bárbaro.
En cambio si el PostgreSQL estuviera instalado por repositorio, tendría primero que utilizar apt-get install postgresql-contrib y luego CREATE EXTENSION.

Muchas gracias por la ayuda

Marcela