F.13. dict_xsyn — ejemplo de diccionario de búsqueda de texto completo de sinónimos #

F.13.1. Configuración
F.13.2. Uso

dict_xsyn (Extended Synonym Dictionary - Diccionario de sinónimos extendido) es un ejemplo de una plantilla de diccionario adicional para la búsqueda de texto completo. Este tipo de diccionario reemplaza las palabras con grupos de sus sinónimos, lo que hace posible buscar una palabra utilizando cualquiera de sus sinónimos.

F.13.1. Configuración #

Un diccionario dict_xsyn acepta las siguientes opciones:

  • matchorig controla si la palabra original es aceptada por el diccionario. El valor predeterminado es true.

  • matchsynonyms controla si los sinónimos son aceptados por el diccionario. El valor predeterminado es false.

  • keeporig controla si la palabra original se incluye en la salida del diccionario. El valor predeterminado es true.

  • keepsynonyms controla si los sinónimos se incluyen en la salida del diccionario. El valor predeterminado es true.

  • rules es el nombre base del archivo que contiene la lista de sinónimos. Este archivo debe almacenarse en $SHAREDIR/tsearch_data/ (donde $SHAREDIR significa el directorio de datos compartidos de la instalación de PostgreSQL). Su nombre debe terminar en .rules (el cual no debe incluirse en el parámetro rules).

El archivo de reglas tiene el siguiente formato:

  • Cada línea representa un grupo de sinónimos para una sola palabra, la cual se indica primero en la línea. Los sinónimos se separan por espacios en blanco, de esta forma:

    palabra sin1 sin2 sin3
    

  • El signo de almohadilla (#) es un delimitador de comentarios. Puede aparecer en cualquier posición de una línea. El resto de la línea será ignorado.

Consulta xsyn_sample.rules, que se instala en $SHAREDIR/tsearch_data/, para ver un ejemplo.

F.13.2. Uso #

La instalación de la extensión dict_xsyn crea una plantilla de búsqueda de texto xsyn_template y un diccionario xsyn basado en ella, con los parámetros predeterminados. Puedes modificar los parámetros, por ejemplo:

mydb# ALTER TEXT SEARCH DICTIONARY xsyn (RULES='my_rules', KEEPORIG=false);
ALTER TEXT SEARCH DICTIONARY

o crear nuevos diccionarios basados en la plantilla.

Para probar el diccionario, puedes intentar:

mydb=# SELECT ts_lexize('xsyn', 'word');
      ts_lexize
-----------------------
 {syn1,syn2,syn3}

mydb# ALTER TEXT SEARCH DICTIONARY xsyn (RULES='my_rules', KEEPORIG=true);
ALTER TEXT SEARCH DICTIONARY

mydb=# SELECT ts_lexize('xsyn', 'word');
      ts_lexize
-----------------------
 {word,syn1,syn2,syn3}

mydb# ALTER TEXT SEARCH DICTIONARY xsyn (RULES='my_rules', KEEPORIG=false, MATCHSYNONYMS=true);
ALTER TEXT SEARCH DICTIONARY

mydb=# SELECT ts_lexize('xsyn', 'syn1');
      ts_lexize
-----------------------
 {syn1,syn2,syn3}

mydb# ALTER TEXT SEARCH DICTIONARY xsyn (RULES='my_rules', KEEPORIG=true, MATCHORIG=false, KEEPSYNONYMS=false);
ALTER TEXT SEARCH DICTIONARY

mydb=# SELECT ts_lexize('xsyn', 'syn1');
      ts_lexize
-----------------------
 {word}

El uso en el mundo real implicará incluirlo en una configuración de búsqueda de texto como se describe en la Chapter 12. Eso podría verse así:

ALTER TEXT SEARCH CONFIGURATION english
    ALTER MAPPING FOR word, asciiword WITH xsyn, english_stem;