Búsqueda de texto completo en PostgreSQL
  • 26 Apr 2022
  • 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 mediante PostgresSQL se pueden encontrar en esta página.  

De manera predeterminada, 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) de forma predeterminada. Para obtener una lista de las opciones disponibles, consulte los resultados de "SELECCIONAR cfgname DE pg_ts_config;". Por ejemplo:

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

PostgreSQL no admite japonés ni otros idiomas con palabras muy cortas sin espacios intermedios. Habilite 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:
php admin/cli/fts_repopulate_tables.php

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

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

Detener palabras

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

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

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

Búsqueda morfológica

Una cosa importante que debe tener en cuenta es que PostgreSQL no admite funciones avanzadas de lenguaje listas para usar, por lo que deberá instalar un diccionario Hunspell específico para el idioma que pretende usar. Hay algunos lugares desde los que puede descargar los idiomas, como LibreOffice Extensions y Mozilla Addons.

A continuación, puede 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. Consulte la documentación de PostgreSQL para obtener más información.

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

-- This will return {äppelträd} as lexemes instead of {äppelträd,äppel,träd} as we would expect
select * from ts_debug('pg_catalog.swedish', 'äppelträd');

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

  1. Vaya a Mozilla Addons y descargue el diccionario sueco (haga clic derecho en el botón Agregar a Firefox y haga clic en el enlace Guardar como).
  2. Extraiga el archivo que se descargó (a veces el archivo descargado no tiene una extensión, así que simplemente agregue .oxt)
  3. Copie los archivos *.aff, *.dic en el tsearch_data directorio de PostgreSQL y cambie el nombre a sv_se.affix y sv_se.dict.
  4. Confirme que los archivos estén codificados con UTF-8. A continuación se imprimirá la codificación actual de los archivos: 
file -i sv_se.*

If the files are not UTF-8 encoded you can execute the following commands (just replace ISO-8859-1 with the encoding output from above):

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

  1. Ejecute los siguientes comandos en PostgreSQL:
CREATE TEXT SEARCH DICTIONARY sv_hunspell(
 Template = ispell,
 DictFile = sv_se,
 AffFile = sv_se,
 Stopwords = swedish
 );
 
 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 WITH sv_hunspell;
Lo anterior instalará el diccionario y luego podrá usarlo de la siguiente manera:
-- This will return the expected {äppelträd,äppel,träd} lexemes:
select * from 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.