Búsqueda de texto completo en PostgreSQL
  • 09 Feb 2024
  • 3 Minutos para leer

Búsqueda de texto completo en PostgreSQL


Article Summary

La búsqueda de texto completo (FTS) permite un enfoque sofisticado para la búsqueda de texto en Totara, particularmente dentro del catálogo. Los detalles de cómo configurar esto usando PostgresSQL se pueden encontrar en esta página.  

Por defecto, la base de datos PostgreSQL admite la búsqueda de texto completo en frases, palabras y búsquedas parciales desde el comienzo de la palabra (p. ej., "Edu*" devolverá elementos que contienen la palabra "educación").

Idioma

PostgreSQL utiliza la configuración "inglés" para la búsqueda de texto completo (FTS) por defecto. Para obtener una lista de opciones disponibles, consulte los resultados de "SELECCIONAR nombre de archivo contable DE pg_ts_config;". Por ejemplo:

$CFG->dboptions['ftslanguage'] = 'inglés';
 $CFG->dboptions['ftslanguage'] = 'simple';
$CFG->dboptions['ftslanguage'] = 'german';

PostgreSQL no es compatible con japoneses y otros idiomas con palabras muy cortas sin espacios en el medio. Habilita la siguiente configuración para obtener un soporte experimental básico de estos idiomas:

$CFG->dboptions['fts3bworkaround'] = verdadero;
Después de cualquiera de estos cambios, vuelva a completar las tablas FTS ejecutando:
p. p. p. admin/cli/fts_repopulate_tables.php

Longitud mínima del término de búsqueda

PostgreSQL no tiene requisitos específicos de longitud por defecto y puede encontrar todas las palabras, siempre que sean palabras que se encuentran comúnmente en un diccionario. 

Palabras de detención

Las palabras de detención son un conjunto de palabras que se excluirán de las consultas de índice y búsqueda. Dependen del idioma utilizado durante la indexación y la búsqueda, así como de la presencia en el diccionario para la instalación de la base de datos.

Por ejemplo, si un usuario busca "Hoteles en Wellington", el sistema excluirá "in" de la búsqueda.

Se pueden encontrar más detalles sobre las palabras de detención de PostgreSQL en la documentación de ayuda de PostgreSQL.

Búsqueda morfológica

Algo importante para tener en cuenta es que PostgreSQL no admite funciones de idioma avanzadas listas para usar, por lo que tendrás que instalar un diccionario Hunspell específico para el idioma que pretendes usar. Hay algunos lugares desde los que puedes descargar los idiomas, como LibreOffice Extensions y Mozilla Addons.

A continuación, puedes encontrar un ejemplo de cómo habilitar la búsqueda morfológica en PostgreSQL en Ubuntu 18.04 para el idioma sueco. Esta no es una guía definitiva, sino un ejemplo de cómo se puede hacer en un caso en particular. Por favor, consulta la documentación de PostgreSQL para obtener más información.

Por ejemplo, si usamos el idioma sueco, lo siguiente no funcionará de inmediato:

-- Esto regresará {äppelträd} como lexemas en lugar de {äppelträd,äppel,träd} como esperaríamos
seleccionar * de ts_debug('pg_catalog.swedish', 'äppelträd');

Para que PostgreSQL interprete correctamente lo anterior, debes instalar el diccionario sueco Hunspell siguiendo estos pasos:

  1. Ve a Mozilla Addons y descarga el diccionario sueco (haz clic derecho en el botón Añadir a Firefox y haz clic en Guardar enlace como).
  2. Extraer el archivo que se descargó (a veces el archivo descargado no tiene una extensión, por lo que solo se debe añadir .oxt)
  3. Copia los archivos *.aff, *.dic en el tsearch_data directorio de PostgreSQL y cambia el nombre a sv_se.affix y sv_se.dict.
  4. Confirme que los archivos estén codificados en UTF-8. Lo siguiente imprimirá la codificación actual de los archivos: 
archivo -i sv_se.*

Si los archivos no están codificados UTF-8, puedes ejecutar los siguientes comandos (solo reemplaza ISO-8859-1 con la salida de codificación de arriba):

iconv -f ISO-8859-1 -t UTF-8//TRANSLIT sv_se.affix -o sv_se.affix
iconv -f ISO-8859-1 -t UTF-8//TRANSLIT sv_se.dict -o sv_se.

  1. Ejecutar los siguientes comandos en PostgreSQL:
CREATE TEXT SEARCH DICTIONARY sv_hunspell(
 Plantilla = ispell,
 DictFile = sv_se,
 AffFile = sv_se,
 Stopwords = sueco
 );
 
 CREATE TEXT SEARCH CONFIGURATION sv_hunspell(parser = default);
ALTER TEXT SEARCH CONFIGURATION sv_hunspell ALTER MAPPING FOR asciiword, asciihword, hword_asciipart,word, hword, hword_part WITHsv_hunspell;
Lo anterior instalará el diccionario y luego podrá usarlo de la siguiente manera:
-- Esto devolverá los {äppelträd,äppel,träd} lexemes esperados:
seleccione * de ts_debug('sv_hunspell', 'äppelträd');

 

© Copyright 2024 Totara Learning Solutions. All rights reserved. Some content originally obtained via GPLv3 license and continues to be available under GPLv3. All other content is the sole copyright of Totara Learning Solutions. 


¿Te ha sido útil este artículo?

Changing your password will log you out immediately. Use the new password to log back in.
First name must have atleast 2 characters. Numbers and special characters are not allowed.
Last name must have atleast 1 characters. Numbers and special characters are not allowed.
Enter a valid email
Enter a valid password
Your profile has been successfully updated.