Zoek in volledige tekst in PostgreSQL
  • 28 Feb 2024
  • 2 Minuten te lezen

Zoek in volledige tekst in PostgreSQL


Article Summary

Full text search (FTS) maakt het mogelijk om tekst te zoeken in Moodle, vooral binnen de catalogus. Details over hoe je dit kunt instellen met PostgresSQL kun je vinden op deze pagina.  

Standaard ondersteunt de PostgreSQL-databank het zoeken in volledige tekst in zinnen, woorden en gedeeltelijke zoekopdrachten vanaf het begin van het woord (bijvoorbeeld "Edu*" zal onderdelen opleveren die het woord "onderwijs" bevatten).

Taal

PostgreSQL gebruikt standaard de 'Engelse' configuratie voor zoeken in volledige tekst (FTS). Zie de resultaten van "KIES cfgname VAN pg_ts_config;" voor een lijst met beschikbare opties. Bijvoorbeeld:

$CFG->dboptions['ftslanguage'] = 'english';
 $CFG->dboptions['ftslanguage'] = 'eenvoudig';
$CFG->dboptions['ftslanguage'] = 'duits';

PostgreSQL ondersteunt geen Japanse en andere talen met zeer korte woorden zonder spaties ertussen. Schakel de volgende instelling in om een experimentele basisondersteuning voor deze talen te krijgen:

$CFG->dbopties['fts3bworkaround'] = waar;
Na een van deze wijzigingen, vul je de FTS-tabellen opnieuw in door:
php admin/cli/fts_repopulate_tables.php

Minimumlengte zoekterm

PostgreSQL heeft geen specifieke standaardlengtevereisten en kan alle woorden vinden, op voorwaarde dat het woorden zijn die gewoonlijk in een woordenboek voorkomen. 

Woorden stoppen

Stopwoorden zijn woorden die niet gebruikt worden in indexen en zoekopdrachten. Ze zijn afhankelijk van de taal die wordt gebruikt tijdens het indexeren en zoeken, evenals de aanwezigheid van het woordenboek voor database-installatie.

Als een gebruiker bijvoorbeeld zoekt naar "Hotels in Wellington", dan zal het systeem "in" uitsluiten van de zoekopdracht.

Meer details over PostgreSQL stopwoorden zijn te vinden in de PostgreSQL help documentatie.

Morfologisch zoeken

Een belangrijk punt om op te merken is dat PostgreSQL standaard geen geavanceerde taalfuncties ondersteunt, dus je moet een specifiek Hunspell-woordenboek installeren voor de taal die je van plan bent te gebruiken. Er zijn enkele plaatsen waar je de talen van kunt downloaden, zoals LibreOffice Extensions en Mozilla Addons.

Hieronder kun je een voorbeeld vinden van hoe je morfologisch zoeken in PostgreSQL op Ubuntu 18.04 kunt inschakelen voor de Zweedse taal. Dit is geen definitieve gids, maar eerder een voorbeeld van hoe het in één bepaald geval kan gebeuren. Raadpleeg de PostgreSQL-documentatie voor meer informatie.

Als we bijvoorbeeld de Zweedse taal kiezen, dan zal het volgende niet standaard werken:

-- Dit zal terugkeren {äppelträd} als lexemes in plaats van {äppelträd,äppel,träd} zoals we zouden verwachten
selecteer * van ts_debug('pg_catalog.swedish', 'äppelträd');

Om ervoor te zorgen dat PostgreSQL het bovenstaande correct kan interpreteren, moet je het Hunspell Zweedse woordenboek installeren door de volgende stappen te volgen:

  1. Ga naar Mozilla Addons en download het Zweedse woordenboek (klik met de rechtermuisknop op de knop Aan Firefox toevoegen en klik op de link Opslaan als).
  2. Extraheer het gedownloade bestand (soms heeft het gedownloade bestand geen extensie, dus voeg .oxt toe)
  3. Kopieer de *.aff, *.dic-bestanden naar de tsearch_data map PostgreSQL en hernoem ze naar sv_se.affix en sv_se.dict.
  4. Bevestig dat de bestanden UTF-8 gecodeerd zijn. Onderstaande zal de huidige encoding van de bestanden afdrukken: 
bestand -i sv_se.*

Als de bestanden niet UTF-8-gecodeerd zijn, kun je de volgende commando's uitvoeren (vervang ISOISO-8859-1 door de encoding output van bovenaf):

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. Voer de volgende opdrachten uit in PostgreSQL:
CREËER TEKST ZOEKDICTIONAIRE sv_hunspell(
 Sjabloon = ispell,
 dictbestand = sv_se,
 AffFile = sv_se,
 Stopwords = Zweeds
 );
 
 CREATE TEKST ZOEKCONFIGURATIE sv_hunspell(parser = standaard);
ALTER TEKST ZOEKCONFIGURATIE sv_hunspell ALTER MAPPING VOOR asciiword, asciihword, hword_asciipart,word, hword, hword_part MET sv_hunspell;
Bovenstaande zal het woordenboek installeren en je kunt het dan als volgt gebruiken:
-- Dit zal de verwachte {äppelträd,äppel,träd} lexemes opleveren:
selecteer * uit 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. 


Was dit artikel nuttig?

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.