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

Zoek in volledige tekst in MySQL


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 MySQL kun je vinden op deze pagina.

Taalondersteuning

MySQL maakt standaard gebruik van hoofdletter- en accentongevoelige collatie voor het zoeken in volledige tekst (FTS). Je kunt echter een andere collatie opgeven, bijvoorbeeld:

$CFG->dboptions['ftslanguage'] = 'utf8_unicode_ci';
 $CFG->dboptions['ftslanguage'] = 'utf8mb4_0900_as_ci';
 $CFG->dboptions['ftslanguage'] = 'utf8mb4_de_pb_0900_ai_ci';

MySQL 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->dboptions['fts3bworkaround'] = true;

 Na een van deze wijzigingen, vul je de FTS-tabellen opnieuw in en bouw je indexen opnieuw door:

php admin/cli/fts_repopulate_tables.php
 php admin/cli/fts_rebuild_indexes.php

Minimumlengte zoekterm

De standaardlimiet voor MySQL-zoektekens kan worden gewijzigd door het MySQL-configuratiebestand te bewerken:

[mysqld]
 innodb_ft_min_token_size=2
 ft_min_word_len=2

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 sluit het systeem 'in' uit van de zoekopdracht.

Meer details over MySQL stopwoorden kun je vinden in de MySQL help documentatie.

Morfologisch zoeken

Ngram is een ingebouwde MySQL full-text parser. Het bepaalt het begin en het einde van woorden door gebruik te maken van spaties en bepaalde letterreeksen. Dit is gewoonlijk standaard ingeschakeld, maar dit kan afhankelijk zijn van distributie. Het kan twee of meer woorden parseren die afkomstig zijn van samengestelde woorden. Bijvoorbeeld voor het Duitse woord 'Fußballweltmeisterschaft' zal het zoeken op woorden als 'meister', 'schaft', enz. Een full-text index, gemaakt zonder deze plugin te gebruiken, zal het woord niet in kleinere delen kunnen splitsen en de SQL die probeert een trefwoord te zoeken, zoals 'meister', zal het record niet kunnen vinden.

Voor sommige ideografische talen (zoals het voorbeeld hierboven) zal de normale full-text index beperkt zijn tot waar het naar kan zoeken, aangezien er geen scheidingstekens voor die woorden zijn. Dit is waar Ngram nuttig kan zijn. Het is een opeenvolgende reeks van een aantal tekens uit een reeks teksten. De hoofdfunctie van de Ngram-koppeling is het tokeniseren van een reeks tekst in een aaneengesloten reeks N tekens.

In sommige gevallen kan Ngram fout-positieve resultaten opleveren (hoewel ze laag beoordeeld zijn en aan het einde van de lijst verschijnen), dus het wordt aangeraden om te bevestigen dat zoekgedrag past bij jouw behoeften nadat je Ngram-ondersteuning hebt ingeschakeld.

Wijzig je config.php-instelling als volgt om Ngram in te schakelen:

$CFG->dboptions['ftsngram'] = true;

Volgende, uitvoeren:

php admin/cli/fts_rebuild_indexes.php

Deze instelling heeft alleen effect in MySQL.

Ongedetailleerde zoekopdracht

Standaard ondersteunt MySQL diakritica, maar het hangt af van de samenhang en taal die is gedefinieerd in $CFG->dboptions['ftslanguage']. Bijvoorbeeld, wanneer de collatie utf8_general_ciop staat, dan zal de zoekopdracht die ofwel het woord 'första' of 'forsta' bevat een record met het woord 'första' opleveren.

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