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.
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.
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;