- 09 Feb 2024
- 3 Minutos para leer
Búsqueda de texto completo en PostgreSQL
- Actualizado en 09 Feb 2024
- 3 Minutos para leer
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;
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:
- 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).
- 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)
- Copia los archivos *.aff, *.dic en el tsearch_data directorio de PostgreSQL y cambia el nombre a sv_se.affix y sv_se.dict.
- 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.
- 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;
-- Esto devolverá los {äppelträd,äppel,träd} lexemes esperados:
seleccione * de ts_debug('sv_hunspell', 'äppelträd');