- 08 Apr 2024
- 2 Protokoll att läsa
Fulltextsökning i MySQL
- Uppdaterad på 08 Apr 2024
- 2 Protokoll att läsa
Fulltextsökning (FTS) möjliggör en sofistikerad metod för textsökning i Totara, särskilt inom katalogen. Information om hur du ställer in detta med MySQL finns på denna sida.
Språkstöd
MySQL använder fall- och accentokänslig kollation för fulltextsökning (FTS) som standard. Du kan dock specificera en annan kollation, till exempel:
$CFG->dboptions['ftslanguage'] = 'utf8_unicode_ci';
$CFG->dboptions['ftslanguage'] = 'utf8mb4_0900_as_ci';
$CFG->dboptions['ftslanguage'] = 'utf8mb4_de_pb_0900_ai_ci';
MySQL stöder inte japanska och andra språk med mycket korta ord utan mellanslag däremellan. Aktivera följande inställning för att få ett grundläggande experimentellt stöd för dessa språk:
$CFG->dboptions['fts3bworkaround'] = true;
Efter någon av dessa ändringar, fyll i FTS-tabeller igen och bygg om index genom att köra:
php admin/cli/fts_repopulate_tables.php
php admin/cli/fts_rebuild_indexes.php
Minsta söktermlängd
Gränsen för MySQL-standardsöktecken kan ändras genom att redigera MySQL-konfigurationsfilen:
[mysqld]
innodb_ft_min_token_size=2
ft_min_word_len=2
Stoppa ord
Stoppord är en uppsättning ord som kommer att uteslutas från index- och sökfrågor. De beror på språk som används under indexering och sökning, samt närvaro i ordlista för databasinstallation. Om en användare till exempel söker efter ”Hotels in Wellington” så utesluter systemet ”in” från sökningen.
Mer information om MySQL-stoppord finns i MySQL-hjälpdokumentationen .
Morfologisk sökning
Ngram är en inbyggd MySQL fulltext parser. Det bestämmer början och slutet av ord med hjälp av blanksteg och särskilda bokstavssekvenser. Det är vanligtvis aktiverat som standard, men detta kan bero på distribution. Det kan tolka två eller flera ord som härrör från sammansatta ord. Till exempel, för det tyska ordet "Fußballweltmeisterschaft", kommer det att söka med ord som "meister", "schaft" och så vidare. Ett index i fulltext som görs utan att använda denna plugin kommer inte att kunna dela upp ordet i mindre delar, och SQL som försöker leta efter ett nyckelord som "meister" kommer inte att kunna hitta posten.
För vissa ideografiska språk (som exemplet ovan) kommer det normala fulltextindexet att begränsas till vad det kan söka efter, eftersom det inte finns några avgränsare för dessa ord. Det är här Ngram kan vara användbart. Det är en sammanhängande sekvens av ett antal tecken från en sekvens av text. Huvudfunktionen i Ngram-tolkaren i fulltext är att tokenisera en sekvens av text till en sammanhängande sekvens av N-tecken.
I vissa fall kan Ngram ge falskt positiva resultat (även om de är lågt betygsatta och visas i slutet av listan), så det rekommenderas att du bekräftar att sökbeteendet passar dina behov efter att ha aktiverat Ngram-support.
För att aktivera Ngram, ändra din config.php-inställning enligt följande:
$CFG->dboptions['ftsngram'] = true;
Nästa, kör:
php admin/cli/fts_rebuild_indexes.php
Denna inställning har endast effekt i MySQL.
Oaccented sökning
Som standard stöder MySQL diakritiker, men det beror på kollation och språk som definieras i $CFG->dboptions ['ftslanguage']. Till exempel, när kollation är utf8_general_ci, så kommer sökfrågan som innehåller antingen ordet 'första' eller 'forsta' att returnera en post som innehåller ordet 'första'.
© 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.