12.7. Ejemplo de configuración #

Una configuración de búsqueda de texto especifica todas las opciones necesarias para transformar un documento en un tsvector: el analizador que se utilizará para dividir el texto en tokens, y los diccionarios que se utilizarán para transformar cada token en un lexema. Cada llamada de to_tsvector o to_tsquery necesita una configuración de búsqueda de texto para realizar su procesamiento. El parámetro de configuración default_text_search_config especifica el nombre de la configuración por omisión, que es la que utilizan las funciones de búsqueda de texto si se omite un parámetro de configuración explícito. Se puede establecer en postgresql.conf, o establecerse para una sesión individual utilizando el comando SET.

Están disponibles varias configuraciones de búsqueda de texto predefinidas, y puedes crear configuraciones personalizadas fácilmente. Para facilitar la administración de objetos de búsqueda de texto, está disponible un conjunto de comandos SQL, y existen varios comandos de psql que muestran información sobre objetos de búsqueda de texto (Section 12.10).

Como ejemplo crearemos una configuración pg, comenzando por duplicar la configuración incorporada english:

CREATE TEXT SEARCH CONFIGURATION public.pg ( COPY = pg_catalog.english );

Utilizaremos una lista de sinónimos específica de PostgreSQL y la guardaremos en $SHAREDIR/tsearch_data/pg_dict.syn. El contenido del archivo se ve así:

postgres    pg
pgsql       pg
postgresql  pg

Definimos el diccionario de sinónimos de esta manera:

CREATE TEXT SEARCH DICTIONARY pg_dict (
    TEMPLATE = synonym,
    SYNONYMS = pg_dict
);

A continuación, registramos el diccionario Ispell english_ispell, el cual tiene sus propios archivos de configuración:

CREATE TEXT SEARCH DICTIONARY english_ispell (
    TEMPLATE = ispell,
    DictFile = english,
    AffFile = english,
    StopWords = english
);

Ahora podemos configurar las asociaciones para las palabras en la configuración pg:

ALTER TEXT SEARCH CONFIGURATION pg
    ALTER MAPPING FOR asciiword, asciihword, hword_asciipart,
                      word, hword, hword_part
    WITH pg_dict, english_ispell, english_stem;

Elegimos no indexar ni buscar algunos tipos de tokens que la configuración incorporada sí maneja:

ALTER TEXT SEARCH CONFIGURATION pg
    DROP MAPPING FOR email, url, url_path, sfloat, float;

Ahora podemos probar nuestra configuración:

SELECT * FROM ts_debug('public.pg', '
PostgreSQL, the highly scalable, SQL compliant, open source object-relational
database management system, is now undergoing beta testing of the next
version of our software.
');

El siguiente paso es configurar la sesión para utilizar la nueva configuración, que fue creada en el esquema public:

=> \dF
   List of text search configurations
 Schema  | Name | Description
---------+------+-------------
 public  | pg   |

SET default_text_search_config = 'public.pg';
SET

SHOW default_text_search_config;
 default_text_search_config
----------------------------
 public.pg