Autor Tema: Problemas con "Full Text Search"  (Leído 31 veces)

0 Usuarios y 1 Visitante están viendo este tema.

marcelah

  • Full Member
  • ***
  • Mensajes: 174
    • Ver Perfil
    • Email
  • Institución: Universidad Nacional de Patagonia San Juan Bosco
  • Nombre y apellido: marcela hidalgo
  • Sistema: Pilaga
  • Teléfono laboral: 0297-4557856/116
Problemas con "Full Text Search"
« : julio 03, 2017, 09:06:01 am »
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:

1)
SELECT d.iddocumento  FROM documentos d
WHERE to_tsvector(d.resumenapublicar) @@ plainto_tsquery('resolucion');

Devuelve dos registros, cuyos id son 76 y 81.

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

nicolasdom

  • Moderador
  • *****
  • Mensajes: 583
    • Ver Perfil
    • SIU
    • Email
  • Institución: SIU
  • Nombre y apellido: Nicolas Dominguez Florit
  • Sistema: SIU-Pampa
Re:Problemas con "Full Text Search"
« Respuesta #1 : julio 03, 2017, 09:34:20 am »
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

marcelah

  • Full Member
  • ***
  • Mensajes: 174
    • Ver Perfil
    • Email
  • Institución: Universidad Nacional de Patagonia San Juan Bosco
  • Nombre y apellido: marcela hidalgo
  • Sistema: Pilaga
  • Teléfono laboral: 0297-4557856/116
Re:Problemas con "Full Text Search"
« Respuesta #2 : julio 03, 2017, 11:44:02 am »
Hola Nicolas ...

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

Marcela

ibisso

  • Moderador Global
  • *****
  • Mensajes: 202
    • Ver Perfil
    • Email
  • Institución: SIU
  • Nombre y apellido: Ignacio Bisso
Re:Problemas con "Full Text Search"
« Respuesta #3 : julio 04, 2017, 04:12:49 pm »
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


marcelah

  • Full Member
  • ***
  • Mensajes: 174
    • Ver Perfil
    • Email
  • Institución: Universidad Nacional de Patagonia San Juan Bosco
  • Nombre y apellido: marcela hidalgo
  • Sistema: Pilaga
  • Teléfono laboral: 0297-4557856/116
Re:Problemas con "Full Text Search"
« Respuesta #4 : julio 05, 2017, 03:13:14 pm »
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





 

Comunidad SIU