Joomla Slim Zoeken gebruiken
Slim Zoeken (Smart Search) is de zoekmachine die standaard in Joomla zit. Het is snel, gerangschikt op relevantie, ondersteunt filters en meerdere talen, en is al geïnstalleerd, toch behandelen veel Joomla-site-eigenaren zoekfunctionaliteit nog steeds als een bijzaak.
Dit artikel legt uit hoe Smart Search echt werkt. Het behandelt de basis voor website-eigenaren en redacteuren, de praktische configuratie voor beheerders en de technische details voor ontwikkelaars. Je leert hoe de index wordt opgebouwd, hoe de query-engine resultaten rangschikt, hoe meertalige zoekopdrachten werken en hoe je Smart Search uitbreidt met je eigen contenttypes.
Smart Search is de geïndexeerde, gefacetteerde, meertalige zoekmachine binnen Joomla
Het doel is simpel: je helpen Joomla Smart Search goed genoeg te begrijpen zodat je bezoekers een zoekervaring krijgen die daadwerkelijk vindt wat ze zoeken.
1. De basis
1.1 Wat is Smart Search?
Smart Search is Joomla's moderne zoekmachine voor websites. De component heet com_finder, daarom noemen ontwikkelaars het vaak Finder.
Smart Search:
- Wordt standaard meegeleverd sinds Joomla 2.5.
- Bouwt een zoekindex op in de database.
- Zoekt in die index in plaats van direct in contenttabellen.
- Geeft gerangschikte en filterbare resultaten terug.
- Vervangt de oude
com_search, die in Joomla 4.0 uit de core is gehaald.
De oude Search voerde live een
LIKE '%keyword%'-query uit op#__content. Smart Search bouwt een echte zoekindex die bij opslaan wordt bijgewerkt.
1.2 Twee zoeksystemen, ken het verschil
Als iemand het nog heeft over "de Search-module" in Joomla, bedoelen ze vrijwel zeker Smart Search. De twee systemen verschillen enorm:
| Functie | Legacy Search (com_search) | Smart Search (com_finder) |
|---|---|---|
| Strategie | Live SQL LIKE |
Vooraf opgebouwde index |
| Snelheid | Traag op grote websites | Snel, index-opzoekingen |
| Rangschikking | Geen of basis | Gewogen relevantie |
| Filters | Geen | Taxonomieën, datums, types |
| Autocomplete | Nee | Ja |
| Stemming | Nee | Ja, per taal |
| Synoniemen | Nee | Nee, zie sectie 5.5 |
| Status in Joomla 6 | Verwijderd | De standaard |
1.3 Tijdlijn van Joomla-versies
Smart Search maakt al meer dan tien jaar deel uit van Joomla. De status van zoekfunctionaliteit per Joomla-versie:
| Joomla-versie | Status van zoeken |
|---|---|
| 1.5 - 2.4 | Alleen legacy com_search |
| 2.5 | Smart Search geïntroduceerd |
| 3.x (tot en met 3.3.12) | Beide systemen naast elkaar geleverd |
| 4.0 | Smart Search vernieuwd, namespaces, DI, CLI finder:index. Legacy com_search uit de core gehaald; sites die vanaf 3.x zijn bijgewerkt behielden de hunne, en er bleef een losse Search-extensie beschikbaar |
| 5.0 | De ondersteuning van de losse Search-extensie stopt; Smart Search is de enige zoekfunctie voor nieuwe en bijgewerkte sites |
| 6.x | Smart Search verder verfijnd, gemoderniseerde beheerinterface, snellere indexeerder |
1.4 Waar vind ik Smart Search?
In de Joomla 6-backend bevindt Smart Search zich op verschillende plekken:
Componenten → Slim Zoeken (beheer van geïndexeerde items + filters)
Componenten → Slim Zoeken → Inhoudsschema's (taxonomie-structuren & nodes)
Componenten → Smart Search → Filters (opgeslagen filtersets)
Systeem → Beheer → Plugins (Smart Search contentplugins)
Systeem → Beheer → Modules (de zoekmodule)
De frontend-zoekpagina bevindt zich op /index.php?option=com_finder, meestal gekoppeld aan een menu-item van het type Smart Search → Zoeken.
1.5 De vier bouwstenen
Smart Search bestaat uit vier onderdelen. Begrijp deze vier en de rest is configuratie.
| Onderdeel | Rol |
|---|---|
| Indexer | Doorloopt content en schrijft termen naar de index. |
| Index | De databasetabellen die termen, links en taxonomieën opslaan. |
| Query-engine | Verwerkt de zoekopdracht van de bezoeker en rangschikt overeenkomsten. |
| Plugins | Adapters voor contenttypes, artikelen, contacten, categorieën, tags enzovoort. |
1.6 De vijf onderdelen van een werkende configuratie
Een complete Smart Search-installatie gebruikt vijf verschillende onderdelen. Elk onderdeel kan afzonderlijk worden ingeschakeld:
| Onderdeel | Wat het doet |
|---|---|
Smart Search-component (com_finder) |
De backend-beheerinterface. |
Smart Search-module (mod_finder) |
Het zoekveld op elke pagina. |
| Smart Search-menu-item | De resultatenpagina. |
Smart Search-plugins (plg_finder_*) |
Eén adapter per contenttype. |
Contentplugin (plg_content_finder) |
Houdt de index synchroon bij tijdens opslaan. |
2. Smart Search instellen
2.1 Schakel de plugins in
Ga naar Systeem → Beheer → Plugins en zoek op finder. Schakel alleen de plugins in die je echt nodig hebt:
| Plugin | Doel |
|---|---|
plg_content_finder |
Werkt de index automatisch bij wanneer een artikel wordt opgeslagen. |
plg_finder_content |
Indexeert artikelen. |
plg_finder_categories |
Indexeert categorieën. |
plg_finder_contacts |
Indexeert contacten. |
plg_finder_newsfeeds |
Indexeert nieuwsfeeds. |
plg_finder_tags |
Indexeert tags. |
Alleen ingeschakelde plugins dragen bij aan de index. Schakel uit wat je niet gebruikt zodat de index compact en sneller blijft.
2.2 Bouw de index voor de eerste keer op
Ga naar Componenten → Smart Search en klik op Indexeren in de toolbar.
- Joomla doorloopt elk ingeschakeld contenttype en schrijft termen naar de indextabellen.
- Een voortgangsbalk toont het aantal items per type.
- De eerste uitvoering op een grote website kan enkele minuten duren. Nieuwe indexeringen na contentwijzigingen zijn incrementeel.
Je kunt de index ook via de command line opbouwen, wat PHP-time-outs voorkomt:
php cli/joomla.php finder:index
2.3 Opschonen en opnieuw opbouwen
In het onderdeel Onderhoud staat een knop Purge waarmee de indextabellen worden geleegd (#__finder_links, #__finder_links_terms, #__finder_terms, #__finder_taxonomy, #__finder_taxonomy_map en de twee tokentabellen). Opgeslagen filters, de lijst met veelvoorkomende woorden, het typeregister en het zoeklog blijven staan. Voer daarna opnieuw Indexeren uit om alles opnieuw op te bouwen.
Gebruik Purge wanneer:
- Je contenttype-plugins hebt ingeschakeld of uitgeschakeld.
- Je een taalinstelling hebt gewijzigd.
- Je een grote contentopschoning hebt afgerond.
- De rangschikking vreemd lijkt en je niet weet waarom.
2.4 Plaats de zoekmodule
Ga naar Systeem → Beheer → Modules → Nieuw → Smart Search en plaats de module op een zichtbare positie, meestal in de header.
De belangrijkste parameters zijn:
| Parameter | Wat het bepaalt |
|---|---|
| Search Filter | Een opgeslagen filter dat op elke zoekopdracht vanuit deze zoekbox wordt toegepast. |
| Show Label | Toont het label boven het invoerveld. |
| Show Autocomplete | JavaScript-autocomplete-suggesties terwijl de bezoeker typt. |
| Show Advanced Search Link | Link naar de volledige resultatenpagina. |
| Set ItemId | Forceert een menu-item-ID voor de resultatenpagina. |
2.5 Maak de resultatenpagina aan
Ga naar Menu's → Hoofdmenu → Nieuw en kies het menu-itemtype Smart Search → Zoeken. De zoekmodule verstuurt zoekopdrachten naar dit menu-item.
De parameters van het menu-item bepalen:
- Het aantal resultaten per pagina.
- Of filter-checkboxes worden weergegeven.
- Of beschrijvingen, afbeeldingen of metadata worden getoond.
- Of gevonden termen worden gemarkeerd.
- De sorteervolgorde: relevantie, titel, startdatum, adviesprijs of verkoopprijs.
3. Binnen de index
3.1 De Smart Search-tabellen
Smart Search slaat zijn gegevens op in een kleine set speciale tabellen:
#__finder_links één rij per geïndexeerd item (artikel, contact, ...)
#__finder_links_terms link ↔ term, met gewicht en context
#__finder_terms elke unieke term in de index
#__finder_terms_common stopwoorden ("de", "het", "en", ...) per taal
#__finder_tokens MEMORY-engine, tijdelijke tokens tijdens indexeren
#__finder_tokens_aggregate MEMORY-engine, geaggregeerde tokens tijdens indexeren
#__finder_taxonomy taxonomie-structuren (Type, Categorie, Taal, ...)
#__finder_taxonomy_map link ↔ taxonomie-node
#__finder_types register van geïndexeerde contenttypes
#__finder_filters opgeslagen filtersets gekoppeld aan modules of menu-items
#__finder_logging log van zoektermen (populaire zoekopdrachten)
Er zijn twee logische lagen:
- Links, wat geïndexeerd wordt.
- Terms, de doorzoekbare woordenschat die met gewichten teruggekoppeld wordt naar links.
De tabellen
#__finder_tokensen#__finder_tokens_aggregategebruiken deMEMORY-storage-engine van MySQL. Ze draaien in RAM en worden tussen indexeeracties gewist. Als het indexeren van een grote website tegenmax_heap_table_sizeaanloopt, verhoog dan deze MySQL-instelling en wijzig niet de storage-engine.
3.2 De taxonomieboom
Smart Search bouwt automatisch een taxonomie op van elk geïndexeerd item. Deze taxonomie-structuren verschijnen voor bezoekers als filter-checkboxes op de resultatenpagina:
Tak Voorbeelden
───────────── ────────────────────────
Type Artikel, Categorie, Contact, Nieuwsfeed, Tag
Categorie Websitecategorieën (hiërarchisch)
Taal nl-NL, en-GB, *
Auteur Gebruiker die het item heeft gemaakt
Tag Tags op het item
3.3 Gewogen velden
Wanneer Smart Search een item indexeert, valt elk veld onder een van vijf contexten, en elke context heeft een gewichtsvermenigvuldiger die je in de componentopties kunt aanpassen. Daarom scoort een overeenkomst in de titel hoger dan een overeenkomst in de hoofdtekst.
De koppeling loopt niet per veld maar per context, en dat is belangrijk: velden die dezelfde context delen, hebben exact hetzelfde gewicht.
| Context | Welke velden | Standaardvermenigvuldiger |
|---|---|---|
| Path Path Text Weight Multiplier |
path, alias |
2.0 - de hoogste in de core |
| Title Title Text Weight Multiplier |
title, subtitle, id |
1.7 |
| Metadata Metadata Weight Multiplier |
meta, list_price, sale_price; de contentplugin voegt metakey, metadesc, metaauthor, author en created_by_alias toe |
1.2 |
| Body text Body Text Weight Multiplier |
summary (introtekst), body (volledige tekst) |
0.7 |
| Misc. Misc. Text Weight Multiplier |
comments |
0.3 |
Uit die tabel volgen drie dingen die makkelijk verkeerd worden begrepen:
- Introtekst en volledige tekst wegen even zwaar. Beide vallen onder
TEXT_CONTEXT. Een trefwoord boven de readmore zetten doet niets voor de ranking - het verandert alleen wat een bezoeker als eerste ziet. - Meta-keywords en meta description wegen even zwaar, om dezelfde reden: het is allebei metadata.
- De URL-alias weegt zwaarder dan de titel. Met 2.0 tegen 1.7 is de path-context het zwaarste in de index. Een nette alias met je trefwoord erin is daarmee een van de goedkoopste ranking-winsten binnen Smart Search.
Tags staan niet in deze tabel. Het zijn geen gewogen velden: een adapter geeft ze door aan addTaxonomy(), waardoor ze een filtertak worden (sectie 3.2) in plaats van iets waartegen een term scoort.
3.4 Taal en stemming
Elke geïndexeerde term krijgt een taal toegewezen. Tijdens het zoeken:
- Bepaalt de actieve websitetaal welke stemmer wordt gebruikt.
- Wordt "running" teruggebracht naar de stam
runen matcht het ook met "run", "runs" en "running". - De stemmer werkt per taal, Nederlands, Engels, Frans, Duits en andere talen hebben allemaal hun eigen regels.
Naar bovenStel de taal van een artikel correct in. Een Nederlands artikel dat in een Engelse index terechtkomt, gebruikt de verkeerde stemmer en krijgt daardoor een slechtere relevantiescore.
4. Zoeken als bezoeker
4.1 De querysyntaxis
Smart Search ondersteunt een kleine querytaal, en die is het waard om precies te kennen, want de syntaxis die mensen van Google gewend zijn geldt hier grotendeels niet. Let op: de operatoren zijn vertaalde teksten. Op een Nederlandstalige site typt een bezoeker en, of en niet:
| Syntaxis | Betekenis |
|---|---|
joomla menus |
Zoekt items die zowel joomla als menus bevatten. Dit is de standaard. |
joomla en menus |
Hetzelfde, maar uitgeschreven. |
joomla of menus |
Zoekt items die één van beide woorden bevatten. |
joomla niet menus |
Zoekt op joomla en sluit menus uit. |
"joomla menus" |
Zoekt op de exacte woordgroep. |
Twee dingen werken niet, hoewel ze in veel adviezen opduiken:
joomla -menus. Het minteken is geen uitsluit-operator. Gebruikniet.menu*. De asterisk bereikt de query-engine nooit: de tokenizer verwijdert elk teken buiten letters, accenttekens, cijfers en aanhalingstekens, dusmenu*komt binnen als de gewone termmenu. Wildcards zijn in plaats daarvan een site-brede instelling, niets wat een bezoeker intypt - zie 4.2.
Haakjes bestaan niet, je kunt termen dus niet groeperen. Houd zoekopdrachten eenvoudig.
De operatoren komen uit de taalbestanden, het zijn geen vaste Engelse woorden.
COM_FINDER_QUERY_OPERATOR_NOTis "not" inen-GBen "niet" innl-NL. In welke taal de site ook draait, de operator is het woord van die taal.
4.2 Fuzziness, wat je wel en niet krijgt
Smart Search is geen typo-tolerante fuzzy zoekmachine zoals Algolia. Wat het wel biedt:
- Stem-gebaseerde fuzziness, "running" vindt "run" via de stemmer per taal.
- Een site-brede instelling Word Match, onder
Componenten → Smart Search → Opties, met drie waarden:- Match exactly - de standaard. De term moet een heel geïndexeerd woord zijn.
- Match words beginning with the search term - wordt
LIKE 'term%', dus menu vindt ook menus en menubar. - Match words containing the search term anywhere - wordt
LIKE '%term%'. Het breedst en het traagst, want de index kan niet worden gebruikt.
- Geen edit-distance,
joomalvindt geen "joomla". Een verkeerd gespelde zoekopdracht levert nul resultaten op. - Geen synoniemen,
CMSvindt geen "content management system". Sectie 5.5 legt uit wat je in plaats daarvan kunt doen.
Omdat Word Match site-breed is, is gedeeltelijk matchen jouw beslissing en niet die van de bezoeker. Zoeken mensen steeds op enkelvouden en vinden ze niets, pas dan de instelling aan in plaats van ze te vertellen dat ze een asterisk moeten typen.
4.3 Autocomplete
Wanneer autocomplete is ingeschakeld in de module, doorzoekt Joomla #__finder_terms terwijl de bezoeker typt:
- Suggesties komen uit geïndexeerde termen, niet uit eerdere zoekopdrachten.
- Stopwoorden worden overgeslagen.
- De lijst houdt rekening met de actieve taal, alleen termen in de actieve taal worden voorgesteld.
4.4 De resultatenpagina
Een standaard resultatenpagina toont:
- Het aantal resultaten en een gepagineerde lijst.
- De titel, klikbaar, met gemarkeerde zoektermen.
- De beschrijving of intro, met gemarkeerde zoektermen.
- Badges voor type, categorie en datum.
- Een filter-sidebar voor Type, Taal, Categorie, Auteur en Tag.
Elk resultaat heeft een relevantiescore, standaard verborgen.
4.5 Filters, twee soorten
| Type | Hoe het wordt opgebouwd |
|---|---|
| Statische taxonomiefilters | Automatisch gegenereerde checkboxen voor Type, Categorie, Tag enzovoort. |
| Opgeslagen filters | Door beheerders gedefinieerde filtersets gekoppeld aan een module of menu-item. |
Een opgeslagen filter wordt vooraf toegepast. Bijvoorbeeld: "dit zoekveld zoekt alleen binnen Events" of "deze resultatenpagina toont alleen pagina's met de tag Joomla 6".
4.6 Opgeslagen filters in detail
Ga naar Componenten → Smart Search → Filters → Nieuw. Selecteer de taxonomie-nodes die je wilt gebruiken, bijvoorbeeld Categorie: Events plus Taal: nl-NL, en sla op. Kies daarna dit filter in de dropdown van een zoekmodule of menu-item.
Veelvoorkomende toepassingen:
- Een zoekveld per sectie, "Zoek alleen in de blog".
- Gescheiden zoekresultaten per taal op een meertalige website.
- Een knowledgebase-zoekfunctie die nieuwsartikelen uitsluit.
5. Onderhoud
5.1 De index actueel houden
Gebruik idealiter twee strategieën tegelijk:
- Indexeren bij opslaan,
plg_content_finderindexeert één item opnieuw bij opslaan of publiceren. - Geplande herindexering, een cronjob die periodiek alles opschoont en opnieuw indexeert.
Er is geen Smart Search-taakplugin in de core - plugins/task/ bevat negen plugins en geen daarvan indexeert. Het CLI-commando bestaat wel, dus stuur dat aan vanuit een systeem-cronjob:
# Elke nacht uitvoeren om 03:30
30 3 * * * cd /var/www/site && php cli/joomla.php finder:index
5.2 Statistieken
Ga naar Componenten → Smart Search → Statistics. Deze pagina toont:
- Het totaal aantal geïndexeerde items per type.
- De grootte van de index.
- Het aantal termen.
- Recente zoekopdrachten (indien logging is ingeschakeld).
Een groeiende index gecombineerd met een dalend aantal termen wijst meestal op duplicaten of verwijderde items die nog steeds geïndexeerd zijn. Voer dan een Purge en herindexering uit.
5.3 Zoeklogging, waar bezoekers echt naar zoeken
Zet in de Smart Search-componentopties Gather Search Statistics op Yes. Joomla logt vervolgens elke zoekopdracht in #__finder_logging. Bekijk de populairste zoekopdrachten via Componenten → Smart Search → Search Terms.
Deze gegevens zijn goud waard voor SEO en contentstrategie:
- Veelgebruikte zoekopdrachten zonder resultaten wijzen op een content gap.
- Veelgebruikte zoekopdrachten waarbij bezoekers afhaken wijzen op slechte ranking van resultaten.
Behandel het zoeklogboek als een backlog. Elke populaire zoekopdracht zonder resultaten is een onderwerp waarover je content zou moeten schrijven.
5.4 De index optimaliseren
Ga naar Componenten → Smart Search → Maintenance → Optimise. Dit:
- Verwijdert kapotte links en verweesde koppelingen tussen termen en links.
- Telt opnieuw in hoeveel links elke term voorkomt en verwijdert daarna elke term die op nul uitkomt.
- Verwijdert verweesde taxonomie-koppelingen en -nodes.
- Voert
OPTIMIZE TABLEuit op de finder-tabellen om ze te defragmenteren.
Voer Optimise uit na een grote bulkimport of een zware contentopschoning.
5.5 Synoniemen, en waarom Joomla ze niet heeft
Smart Search heeft geen ondersteuning voor synoniemen. Er is geen synoniemveld in de Smart Search-opties, geen synoniementabel in de database en geen synoniemstap in de query-parser. Een bezoeker die op CMS zoekt, vindt geen pagina die alleen maar content management system zegt.
Dat verrast mensen die Solr- of Elasticsearch-gedrag verwachten. Smart Search zoekt elke term op in #__finder_terms, en het enige dat de zoekopdracht verbreedt is de stemmer per taal plus de instelling Word Match.
Drie manieren om het gat te dichten met alleen core:
- Word Match, in
Componenten → Smart Search → Options → Smart Searchkies je Match exactly (de standaard), Match words beginning with the search term of Match words containing the search term anywhere. De ruimere instellingen zorgen ervoor datmenuook menubar vindt, maar ze verbreden elke zoekopdracht op de website, waardoor de relevantie daalt en de query trager wordt. - Meta Keywords, de contentplugin indexeert de Meta Keywords van een artikel in de meta-context, gewogen met Metadata Weight Multiplier (standaard 1.2). CMS, content management system in de Meta Keywords van één artikel zetten is de praktische synoniemtruc per item, en bij het opslaan van het artikel wordt het meteen opnieuw geïndexeerd.
- Schrijf de variant in de tekst, noem de afkorting één keer in de inleiding. Dat helpt ook menselijke lezers en zoekmachines.
Heb je echt synoniemgroepen, weging per term of tolerantie voor typefouten nodig, dan heb je een externe zoekextensie of zoekmachine nodig. Core gaat het je niet geven.
5.6 Veelvoorkomende termen (de Joomla-variant van stopwoorden)
Smart Search leest tijdens het draaien geen stopwoordenbestand. Het vergelijkt elke term met de tabel #__finder_terms_common, met daarin een term, een language en een custom-vlag.
Die tabel wordt op twee manieren gevuld:
- Bij de installatie van Smart Search worden 174 Engelse termen toegevoegd (i, me, my enzovoort) met
custom = 0. - Bij het installeren van een taalpakket komt de plugin Extension - Finder in actie. Die leest
language/<tag>/com_finder.commonwords.txten importeert de woorden daaruit voor die taal. Alles achter een;op een regel geldt als commentaar.
Bij het opnieuw installeren of bijwerken van een taalpakket worden alleen de rijen met custom = 0 van die taal verwijderd en opnieuw geïmporteerd. Rijen die je zelf toevoegt met custom = 1 overleven een update dus.
Een veelvoorkomende term heeft twee gevolgen:
- Tijdens het indexeren wordt het gewicht van de term door 8 gedeeld, waardoor hij nog steeds matcht maar veel lager scoort.
- Tijdens het zoeken wordt de term volledig uit de zoekopdracht gehaald, maar alleen wanneer Filter Common Words op Yes staat.
In Componenten → Smart Search → Options → Index vind je twee schakelaars, beide standaard op No: Filter Common Words en Filter Numeric Terms. Er is geen drempelwaarde in procenten en geen beheerscherm voor de tabel met veelvoorkomende termen, dus eigen veelvoorkomende woorden toevoegen betekent SQL schrijven.
5.7 Er is geen module voor populaire zoekopdrachten
De core levert één Smart Search-module, mod_finder, het zoekvak. Er bestaat geen module die de meest gestelde zoekopdrachten uit #__finder_logging als aanklikbare suggesties toont, en er is ook geen taalstring voor.
De gegevens zijn er wel als je zo'n blok wilt: het zoeklog vult zich zodra Gather Search Statistics aanstaat (sectie 5.3), en een paar regels in een eigen module of template-override lezen de bovenste rijen uit #__finder_logging. Het is alleen niets wat de core je kant-en-klaar geeft.
6. Meertalige Smart Search
6.1 Indexeren per taal
Smart Search indexeert elk item onder de toegewezen taal. Items met de taalinstelling * (Alle) worden één keer geïndexeerd en matchen in elke taalzoekopdracht.
De actieve websitetaal bepaalt:
- Welk taalfilter standaard actief is.
- Welke stemmer op de zoekopdracht wordt toegepast.
- Welke stopwoorden worden weggefilterd.
6.2 Waar stemmers en stopwoorden vandaan komen
Een Smart Search-taalplugin bestaat niet. De map plugins/finder/ bevat alleen contenttype-adapters: categories, contacts, content, newsfeeds en tags. Taalondersteuning bereikt de indexeerder via twee andere plekken.
| Wat | Waar het staat | Hoe het gekozen wordt |
|---|---|---|
| Stemmers | libraries/vendor/wamania/php-stemmer/, de meegeleverde Snowball-bibliotheek |
StemmerFactory koppelt de taalcode aan een stemmerklasse. Joomla 6 dekt Catalaans, Deens, Nederlands, Engels, Fins, Frans, Duits, Italiaans, Noors, Portugees, Roemeens, Russisch, Spaans en Zweeds. |
| Grieks en Chinees | administrator/components/com_finder/src/Indexer/Language/ (El.php, Zh.php) |
Deze twee talen hebben een eigen klasse binnen com_finder, omdat ze meer nodig hebben dan alleen een stemmer. |
| Stopwoorden | language/<tag>/com_finder.commonwords.txt |
Wordt geïmporteerd in #__finder_terms_common zodra je het taalpakket installeert. Zie paragraaf 5.6. |
Zonder stemmer voor de actieve taal worden termen zonder stemming opgeslagen. Zoeken werkt dan nog steeds, maar "running" vindt bijvoorbeeld geen "run" meer.
6.3 Valkuilen bij meertaligheid
- Een zoekmodule op de positie All toont resultaten uit alle talen tenzij deze gefilterd worden.
- Gebruik een taalspecifiek menu-item voor de resultatenpagina zodat de URL binnen de actieve taal blijft.
- Opgeslagen filters gekoppeld aan Language zijn de schoonste manier om resultaten per taal af te bakenen.
6.4 Accenten en diakritische tekens
Typ normandie in het zoekvak van een Nederlandse website en Smart Search vindt geen enkel artikel over Normandië. De kolommen #__finder_terms.term en #__finder_terms.stem zijn allebei gedeclareerd als utf8mb4_bin, een binaire collatie, terwijl de tabel zelf standaard utf8mb4_unicode_ci gebruikt. Binair betekent byte voor byte, dus e is niet ë. Joomla heeft geen instelling om dat te veranderen.
Dit doet meer pijn dan het lijkt, want bezoekers typen geen accenten. Een ë kost een lange druk op een telefoontoetsenbord, dus de meeste mensen laten hem weg, en de website geeft niets terug voor een onderwerp waar hij juist veel over te zeggen heeft.
Kijk eerst niet naar de collatie, maar naar de optie Standaardtaal onder Componenten → Smart Search → Opties. Die staat standaard op Geen. Op een website die niet meertalig is, vraagt Helper::stem() dan om de locale *, en die past bij geen enkele stemmer. Termen worden daardoor precies opgeslagen zoals ze getypt zijn: er wordt niets gevouwen en niets gestemd. Zet je die optie op je eigen taal, dan gaat de Snowball-stemmer aan, en voor de meeste talen met een Latijns schrift lost dat een deel van het probleem gratis op. De Nederlandse stemmer verwijdert bijvoorbeeld ä ë ï ö ü á é í ó ú als allereerste stap.
Twee dingen doet die optie niet:
- Hij zet ook morfologische stemming aan, en dat is een veel grotere verandering dan het vouwen van accenten. Reizen en reis gaan dan op elkaar matchen. Vaak een verbetering, maar kies daar bewust voor in plaats van het als bijwerking te krijgen.
- Hij dekt alleen de accenten op de lijst van die ene stemmer.
çenôstaan niet op de Nederlandse lijst, dus Curaçao en Rhône blijven onvindbaar zodra de bezoeker het accent weglaat.
Voor alles wat de stemmer niet dekt heeft com_finder een echt uitbreidingspunt, en het is hetzelfde punt dat de kern voor zichzelf gebruikt. Language::getInstance() neemt de primaire taalcode, bouwt daar de klassenaam Joomla\Component\Finder\Administrator\Indexer\Language\<Locale> mee op, en maakt die klasse aan zodra class_exists() bevestigt dat hij bestaat. Precies zo levert de kern zijn Griekse (El) en Chinese (Zh) handlers. Zet je een eigen klasse in die namespace, dan gebruikt com_finder hem.
Ik heb zo'n systeemplugin geschreven voor een reisorganisatie waarvan de bestemmingen vol accenten staan. De plugin registreert een Nl-klasse op de autoloader en vouwt accenten weg in stem(). Drie keuzes bepaalden het gedrag, en elk ervan is de moeite waard voordat je zelf iets vergelijkbaars bouwt:
| Keuze | Waarom |
|---|---|
Vouwen in stem(), tokenise() ongemoeid laten |
term houdt de echte spelling Normandië voor de autosuggestielijst, terwijl stem de gevouwen vorm normandie bevat. De zoekopdracht matcht op t.term = :searchTerm OR t.stem = :searchStem, dus de gevouwen zoekterm komt de gevouwen stam tegen en de lezer ziet nog steeds correct Nederlands. |
| De Snowball-stemmer uit laten staan | De klasse overschrijft de constructor en laadt hem nooit. Accenten worden gevouwen, maar reizen en reis blijven aparte termen. Er verandert dus precies één ding, en de klant kreeg wat hij vroeg en verder niets. |
Registreren op onAfterInitialise en application.before_execute |
onAfterInitialise wordt afgevuurd door CMSApplication. ConsoleApplication erft van Application, dus php cli/joomla.php finder:index vuurt hem nooit af. Registreer je alleen op het eerste event, dan ziet de browser er perfect uit terwijl je nachtelijke CLI-indexering stilletjes een ongevouwen index wegschrijft. |
Drie beperkingen zijn het waard om hardop te noemen, omdat je ze vooraf makkelijker uitlegt dan achteraf debugt:
- Bouw de index opnieuw op na installatie. Bestaande rijen houden de stammen waarmee ze zijn weggeschreven. Purge en herindexeer, anders geldt de verandering alleen voor content die je vanaf nu opslaat.
- Exacte zoekopdrachten tussen aanhalingstekens blijven gevoelig voor accenten. Een zoekopdracht tussen aanhalingstekens volgt een andere tak die alleen op
t.termmatcht en nooit naart.stemkijkt. In de praktijk gebruiken bezoekers zelden aanhalingstekens, maar het gedrag is er wel. - De autosuggestielijst verandert niet. Die matcht op
t.term LIKE 'invoer%'onder dezelfde binaire collatie, dus wienormandietypt krijgt nog steeds geen suggestie. De resultatenpagina vindt de artikelen wel; het lijstje erboven blijft stil.
Ook het moment van registreren telt. Helper::stem() en Language::getInstance() bewaren hun taalobject allebei in een statische eigenschap zodra ze voor het eerst gebruikt worden. De handler moet dus geregistreerd zijn voordat het eerste token verwerkt wordt, niet pas wanneer hij nodig lijkt.
7. Toegangsbeheer en privacy
7.1 Toegangsniveaus
Elke geïndexeerde link slaat het toegangsniveau van het item op. Tijdens het zoeken doet Smart Search het volgende:
- Bepaalt de toegangsniveaus van de huidige gebruiker.
- Filtert links weg die de gebruiker niet mag zien.
- Filtert taxonomiefilters weg die alleen resultaten zouden opleveren waarvoor de gebruiker geen toegang heeft.
Een gastgebruiker ziet dus nooit artikelen die alleen toegankelijk zijn voor geregistreerde gebruikers. Dezelfde regels gelden overal binnen Joomla.
7.2 Niet gepubliceerd, gearchiveerd en verwijderd
Smart Search respecteert de publicatiestatus tijdens het indexeren en controleert deze opnieuw tijdens het zoeken:
| Status | Geïndexeerd? | Getoond in resultaten? |
|---|---|---|
| Gepubliceerd | Ja | Ja |
| Niet gepubliceerd | Nee | Nee |
| Gearchiveerd | Ja | Alleen indien expliciet opgevraagd |
| Verwijderd | Nee | Nee |
Verlopen (publish_down) |
Item blijft bestaan maar wordt tijdens runtime verborgen | Nee |
7.3 Privacy van het zoeklogboek
Wanneer zoeklogging is ingeschakeld, sla je zoekopdrachten van bezoekers op. Behandel dit logboek als persoonsgegevens:
- Anonimiseer IP-adressen op webserverniveau.
- Documenteer bewaartermijnen in je privacybeleid.
- Schakel logging uit op websites met gevoelige gegevens.
8. Onder de motorkap (ontwikkelaarsweergave)
8.1 De indexeringsflow
Wanneer plg_content_finder wordt uitgevoerd tijdens het opslaan, gebeurt het volgende:
onContentAfterSave
└── Indexer::index($result)
├── content tokeniseren
├── stemmer toepassen (per taal)
├── stopwoorden verwijderen
├── gewichten berekenen per veldcontext
├── schrijven naar #__finder_terms
└── koppelen aan taxonomie-nodes
Dezelfde flow wordt batchgewijs uitgevoerd tijdens een volledige herindexering, item voor item.
8.2 De queryflow
Wanneer een bezoeker zoekt, verloopt de flow als volgt:
SearchModel::getQuery()
└── Query::tokenise(input)
├── Stemmer toepassen
├── Termen opzoeken in #__finder_terms
├── Matches scoren via #__finder_links_terms.weight
├── Taxonomie-filters toepassen via joins
├── ACL-filter toepassen
└── Gerangschikte, gepagineerde lijst retourneren
De uiteindelijke SQL-query bestaat uit meerdere self-joins op #__finder_terms en #__finder_links_terms. Met de Joomla Debug-plugin kun je de volledige query bekijken als je echt alle details wilt zien.
8.3 Een Smart Search-plugin schrijven
Om items van je eigen component te indexeren, maak je een plugin aan onder plugins/finder/yourcomponent/ en laat je deze de adapter-basisklasse uitbreiden:
namespace Acme\Plugin\Finder\Yourcomponent\Extension;
use Joomla\Component\Finder\Administrator\Indexer\Adapter;
use Joomla\Component\Finder\Administrator\Indexer\Indexer;
use Joomla\Component\Finder\Administrator\Indexer\Result;
final class Yourcomponent extends Adapter
{
protected $context = 'Yourcomponent';
protected $extension = 'com_yourcomponent';
protected $layout = 'item';
protected $type_title = 'Yourcomponent Item';
protected $table = '#__yourcomponent_items';
protected function index(Result $item)
{
$item->setLanguage();
$item->addTaxonomy('Type', 'Yourcomponent Item');
$item->addTaxonomy('Category', $item->category);
$item->addTaxonomy('Language', $item->language);
$this->indexer->index($item);
}
}
Daarna implementeer je setup(), getListQuery() en getItem() om de indexeerder van data te voorzien.
8.4 Plugin-events
Smart Search biedt een kleine set events voor extensies:
| Event | Wanneer het wordt uitgevoerd |
|---|---|
onFinderCategoryChangeState |
Een categoriestatus verandert, indexeren of de-indexeren. |
onFinderChangeState |
De status van een item verandert. |
onFinderAfterDelete |
Een item wordt verwijderd, verwijder de link. |
onFinderAfterSave |
Een item wordt opgeslagen, opnieuw indexeren. |
onBeforeIndex |
Hook voordat de indexeerder start (volledige batch). |
onFinderBeforeSave |
Data aanpassen vlak vóór indexering. |
onContentAfterSave |
De brug van content naar Finder. |
8.5 Smart Search aanroepen vanuit PHP
Je kunt de Smart Search-query-engine rechtstreeks vanuit PHP gebruiken. Dit is handig voor modules met "gerelateerde resultaten" of aangepaste contentblokken:
use Joomla\CMS\Factory;
$app = Factory::getApplication();
$app->getInput()->set('q', 'joomla smart search');
$model = $app->bootComponent('com_finder')
->getMVCFactory()
->createModel('Search', 'Site', ['ignore_request' => false]);
$results = $model->getItems();
foreach ($results as $r) {
echo $r->title . ' - ' . $r->route . "\n";
}
8.6 Er is geen Web Services API in de core
Smart Search wordt niet aangeboden via de Joomla Web Services API. Er bestaat geen api/components/com_finder en geen plugins/webservices/finder, dus geen enkele route komt bij de zoekmachine uit.
Dit is het waard om expliciet te zeggen, want er circuleert een geloofwaardig ogende URL voor:
GET /api/index.php/v1/fields/com_finder/search?filter[q]=joomla <- bestaat niet
De routes onder v1/fields/... bestaan wél, maar doen iets heel anders: ze tonen de definities van aangepaste velden voor een context, en ze worden per component geregistreerd door de webservices-plugins van content, users en contact - v1/fields/content/articles, v1/fields/users, v1/fields/contacts/contact enzovoort. Er is geen context com_finder in die lijst, en zelfs als die er was, zou hij velddefinities teruggeven in plaats van zoekresultaten.
Voor headless zoeken heb je dus twee eerlijke opties:
- Roep het model aan in PHP, zoals in 8.5, vanuit je eigen controller of een kleine component, en geef de JSON-vorm terug die je frontend wil. ACL blijft gelden, want
SearchModelfiltert op de weergaveniveaus van de huidige gebruiker. - Schrijf een eigen webservices-plugin die een route registreert en het verzoek doorgeeft aan
SearchModel. Dat is hetzelfde mechanisme dat de core-plugins gebruiken, en het is weinig code.
8.7 Template overrides
De frontendlayouts bevinden zich in components/com_finder/tmpl/ en modules/mod_finder/tmpl/. Override ze in je template:
templates/your_template/html/com_finder/search/default_result.php
templates/your_template/html/mod_finder/default.php
Veelvoorkomende overrides zijn het restylen van resultaatkaarten, het toevoegen van thumbnails naast resultaten, het vervangen van de filter-sidebar door een off-canvas drawer of het aanpassen van de pagineringmarkup.
8.8 Gewichten afstemmen
De standaard veldgewichten staan in elke Finder-plugin. Om deze opnieuw te balanceren:
- Kopieer het pluginbestand naar een eigen custom plugin. Bewerk nooit de core.
- Pas de gewichtsconstanten aan die gebruikt worden in
addInstruction(), zoalsIndexer::TITLE_CONTEXT,TEXT_CONTEXT,META_CONTEXT,PATH_CONTEXTenMISC_CONTEXT. - Voer daarna een Purge en herindexering uit.
Naar bovenMaak altijd een kopie. Wijzigingen in core-plugins worden bij een Joomla-update stilletjes overschreven.
9. Veelgemaakte fouten en valkuilen
9.1 Zoeken geeft geen resultaten terug
- Heb je de index opgebouwd? Ga naar
Componenten → Smart Search → Indexeren. - Zijn de contentplugins ingeschakeld (
plg_finder_contenten vergelijkbare plugins)? - Is het item gepubliceerd en ligt
publish_upin het verleden? - Staat de taal correct ingesteld? Een Nederlandse zoekopdracht tegen een uitsluitend Engelse index levert niets op.
- Staat er een woord met een accent in de zoekopdracht, of hoort dat er te staan?
normandiematcht niet met de geïndexeerde term Normandië onder een binaire collatie. Zie paragraaf 6.4.
9.2 Zoeken is traag
Smart Search hoort snel te zijn. Als dat niet zo is:
- Voer Optimise uit.
- Controleer het aantal rijen in
#__finder_links. Een extreem groot aantal wijst meestal op verouderde items, voer een Purge en herindexering uit. - Schakel contenttype-plugins uit die je niet gebruikt.
- Controleer de MySQL-tuning, vooral
innodb_buffer_pool_size.
9.3 Verouderde resultaten na wijzigingen
Dit betekent meestal dat plg_content_finder is uitgeschakeld of dat een artikel via een aangepaste opslagroute wordt verwerkt waarbij het event niet wordt uitgevoerd.
- Schakel de plugin Content - Smart Search in.
- Voer na bulkimports
php cli/joomla.php finder:indexuit.
9.4 Legacy Search verwarren met Smart Search
com_searchis de legacy-component, in Joomla 4.0 uit de core gehaald. Hij bleef bestaan als losse download, maar werd alleen ondersteund tot Joomla 5.0 uitkwam.com_finderis Smart Search, de enige core-zoekfunctie in Joomla 6.
Als een tutorial verwijst naar "de Search-component", controleer dan eerst de publicatiedatum voordat je de instructies volgt.
9.5 Custom Fields en Smart Search
Dit is een veelvoorkomende bron van verouderde informatie, in twee richtingen. Smart Search kan waarden van Custom Fields indexeren zonder extensie van derden, maar doet dat niet uit zichzelf: indexeren is opt-in per veld en staat standaard uit.
Je zet het aan tijdens het bewerken van het veld, onder Options → Smart Search → Search Index. Het is een keuzelijst met vier waarden, geen ja/nee-schakelaar:
| Waarde | Wat het doet |
|---|---|
| Don't make searchable | De standaard. De waarde van het veld bereikt de index nooit. |
| Make searchable | De waarde komt in de metadata-context van het item terecht, wordt dus gevonden met een gewone zoekopdracht en gewogen met de Metadata Weight Multiplier. |
| Add as taxonomy | De waarde wordt in plaats daarvan een filterbare taxonomietak, bruikbaar in opgeslagen filters en de geavanceerde zoekfunctie. |
| Make searchable and add as taxonomy | Allebei. |
Twee beperkingen zijn het waard om te kennen voordat je hierop gaat bouwen:
- Slechts twee adapters doen dit: artikelen en contacten. Custom Fields op categorieën of gebruikers worden niet geïndexeerd, wat je hier ook instelt.
- De optie Enable Custom Fields van de component zelf gaat er nog overheen. Staat die uit voor de component, dan wordt geen enkel veld geïndexeerd, ook niet als Search Index anders zegt.
Er is geen filter op veldtype. Wat het veld als waarde rendert, is wat geïndexeerd wordt. Een Text- of List-veld gedraagt zich dus zoals je verwacht, terwijl Media, Color en ruwe Subform-JSON waarden opleveren die technisch gezien wel geïndexeerd worden maar zelden nuttig zijn om op te zoeken.
9.6 De rechten-valkuil bij doorzoekbare velden
Dit deel verdient aandacht, want het is precies het omgekeerde van wat de meeste mensen aannemen.
Een doorzoekbaar Custom Field wordt geïndexeerd met de kijkrechten van het content-item, niet met het eigen toegangsniveau van het veld. Joomla zegt dat zelf, in de beschrijving onder de instelling:
Warning: When 'Make searchable' is selected, content from the field is indexed with the viewing permissions of the content item. This might lead to unexpected information disclosure.
Een veld dat is beperkt tot een groep op Special-niveau, gekoppeld aan een openbaar artikel, wordt dus vindbaar voor gasten zodra je het doorzoekbaar maakt. Het veld beperken beperkt het zoekresultaat niet. De taxonomie-tak gedraagt zich anders en draagt het toegangsniveau van het veld wél mee, waardoor dit verschil makkelijk over het hoofd wordt gezien.
Hetzelfde mechanisme verklaart de oudere waarschuwing over SQL Custom Fields: wat de query teruggeeft wordt geïndexeerd onder de rechten van het artikel. Een query die over tenants heen reikt of in privétabellen kijkt, lekt daardoor naar de zoekfunctie van iedereen die het artikel mag lezen.
Controleer elk doorzoekbaar Custom Field en elk SQL Custom Field voordat je op Smart Search vertrouwt op een site met afgeschermde content.
Praktische aandachtspunten:
- Search Index wijzigen op een bestaand veld doet niets totdat de betrokken items opnieuw geïndexeerd zijn. Voer Indexeren opnieuw uit, of doe een Purge en bouw opnieuw op.
- Een Subform-waarde wordt als JSON opgeslagen. Alleen de gerenderde output wordt geïndexeerd - override
subform.phpals je een andere vorm nodig hebt. - Websites die vanaf Joomla 3 zijn gemigreerd hebben soms nog een plugin van derden staan die Custom Fields indexeerde voordat de core dat kon. Kijk of je die nog nodig hebt zodra je Search Index hebt ingesteld op de velden waarop je echt zoekt.
9.7 De indexering wordt nooit voltooid
Symptomen: de indexeerpagina loopt vast of de voortgangsbalk blijft hangen.
- Verhoog
max_execution_timeenmemory_limittijdens het indexeren. - Indexeer via de CLI, daar geldt geen PHP-time-out.
- Werk per contenttype, schakel alle plugins uit behalve één, indexeer en herhaal dit proces.
9.8 Inregelopties voor grote websites
Op websites met tienduizenden items zijn de standaardinstellingen meestal eerder te voorzichtig dan te agressief. Joomla levert een kleine batchgrootte, laat het indexeren van woordgroepen uitstaan, en laat de limiet voor de MEMORY-tabel volgen wat MySQL toevallig toestaat. Dit zijn de instellingen die het bekijken waard zijn:
| Instelling | Locatie | Wat het doet |
|---|---|---|
batch_size |
Smart Search Options → Index, "Indexer Batch Size" | Aantal items dat de indexer per batch verwerkt. Een keuzelijst van 5 tot 300, standaard 50. Verlaag deze waarde wanneer de indexer geheugen of tijd tekortkomt, verhoog hem wanneer elke request van beide genoeg heeft. |
tuplecount |
Smart Search Options → Index, "Search for Phrases" | Staat standaard uit (waarde 1). Aanzetten (waarde 3) indexeert ook woordgroepen van twee en drie woorden. Dat geeft betere resultaten, maar vermenigvuldigt het aantal termen en de omvang van de index. |
memory_table_limit |
Niet instelbaar, Joomla leidt de waarde af | Aantal termen waarna de MEMORY-tabel met termen naar disk wordt geschreven. Joomla leest max_heap_table_size en deelt die door 800, valt terug op 7500 als die query mislukt, en gebruikt 50000 op PostgreSQL. Je stuurt dit dus via max_heap_table_size en niet via de Joomla-opties. |
max_heap_table_size |
MySQL-configuratie | Harde limiet voor MEMORY-tabellen, verhoog deze voor grote indexen. memory_table_limit stijgt automatisch mee. |
tmp_table_size |
MySQL-configuratie | MySQL hanteert de laagste van deze waarde en max_heap_table_size, verhoog ze dus samen. |
innodb_buffer_pool_size |
MySQL-configuratie | De belangrijkste instelling voor querysnelheid. |
PHP memory_limit |
php.ini / CLI | De indexeerder kan veel tokens tegelijk in RAM houden. |
10. Verder dan Smart Search
10.1 Extensies die Smart Search verbeteren
Plugins van derden kunnen Smart Search uitbreiden in plaats van vervangen. De nuttige exemplaren vallen in twee groepen: extra contenttype-adapters, die de indexeerder leren om componenten te lezen waar de kern niets van weet, en frontend-plugins, die AJAX-live-resultaten of een rijkere autocomplete toevoegen bovenop dezelfde index. Kijk in de Joomla Extensions Directory (JED) onder "Smart Search" wat er nu beschikbaar is, en controleer drie dingen voordat je installeert:
- De extensie ondersteunt jouw Joomla-versie en de vermelding heeft het label "Uses Joomla! Update System".
- De extensie schrijft in de
#__finder-tabellen van de kern, in plaats van er een tweede index naast te bouwen. - De extensie is bijgewerkt sinds de laatste grote Joomla-release. Zoekadapters gaan stuk wanneer de API van de indexeerder verandert.
10.2 Wanneer je Smart Search ontgroeit
Voor 95 procent van de Joomla-websites is Smart Search meer dan voldoende. Maar wanneer je faceted commerce search, geo search of echte typo-tolerantie nodig hebt, kun je beter overstappen op een gespecialiseerde zoekmachine:
- Algolia, gehoste instant search. Plugins sturen Joomla-content bij opslaan naar Algolia en de frontend zoekt rechtstreeks via Algolia.
- Meilisearch, open-source, self-hosted en snel.
- Elasticsearch / OpenSearch, zwaar maar krachtig en volledig aanpasbaar.
Stap alleen over naar een andere zoekmachine als daar een duidelijke reden voor is. Smart Search blijft voor bijna elke Joomla-website een verstandige standaardkeuze.
Naar boven11. Best practices
Als je maar een paar dingen uit dit artikel onthoudt, laat het dan deze punten zijn:
- Schakel alleen de contenttype-plugins in die je echt gebruikt, zo blijft de index compacter.
- Voer altijd een volledige herindexering uit na migraties, contentopschoningen of pluginwijzigingen.
- Plan een nachtelijke CLI-herindexering voor grote websites.
- Schakel zoeklogging in, het is je eerlijkste rapport over ontbrekende content.
- Stel de taal van artikelen correct in zodat de juiste stemmer gebruikt wordt.
- Gebruik opgeslagen filters om zoekresultaten per sectie of taal af te bakenen.
- Override
default_result.phpin je template in plaats van de core te wijzigen. - Custom Fields indexeren is opt-in per veld, en een doorzoekbaar veld erft de rechten van het artikel, niet zijn eigen. Controleer doorzoekbare en SQL Custom Fields voordat je op Smart Search vertrouwt.
12. In het kort
COMPONENT Componenten → Smart Search
PLUGINS Systeem → Plugins → "finder"
INDEX Componenten → Smart Search → Indexeren
PURGE Componenten → Smart Search → Maintenance → Purge
OPTIMISE Componenten → Smart Search → Maintenance → Optimise
LOGS Componenten → Smart Search → Search Terms
MODULE Modules → Smart Search Module → Nieuw
RESULTATENPAGINA Menu's → Nieuw → Smart Search → Search
OPGESLAGEN FILTER Componenten → Smart Search → Filters
CLI INDEX php cli/joomla.php finder:index
TABELLEN #__finder_links / _terms / _taxonomy / _logging
QUERYSYNTAXIS en of niet "woordgroep" (geen -exclude, geen woord*)
OVERRIDE templates/{tpl}/html/com_finder/search/default_result.php
API niet in de core - roep SearchModel aan in PHP, of schrijf een webservices-plugin
LEGACY com_search is in 4.0 uit de core VERWIJDERD - Smart Search is de zoekmachine.
Naar boven13. Samenvatting
Smart Search verandert de zoekfunctie van Joomla van een trage LIKE-query in een echte, gerangschikte, gefacetteerde en meertalige zoekmachine. Het zit standaard in elke Joomla-installatie, maar de meeste site-eigenaren schakelen het nooit echt goed in.
Smart Search biedt:
- Snelheid, een vooraf opgebouwde index en zoekopdrachten in milliseconden.
- Relevantie, gewogen velden, stemming en taalbewust zoeken.
- Filters, taxonomie-filters direct uit de doos.
- Inzicht, zoeklogs die ontbrekende content blootleggen.
- Uitbreidbaarheid, plugins voor elk contenttype, inclusief je eigen componenten.
- Scriptbaar: de query-engine is een gewoon model dat je vanuit PHP kunt aanroepen, dus een headless frontend is een kleine plugin verderop.
Een goede zoekfunctie is een van de goedkoopste manieren om een Joomla-website professioneler te laten aanvoelen. Bezoekers die snel vinden wat ze zoeken blijven langer, converteren vaker en komen sneller terug. Een paar uur investeren in een goede Smart Search-configuratie, de juiste plugins, een geplande herindexering, een slimme resultatenpagina en zoeklogging, betaalt zich jarenlang terug.
Als je zoekfunctie momenteel weinig bruikbare resultaten geeft, of je vermoedt dat Smart Search nooit correct is ingesteld, dan is dit een van de eerste onderdelen die je op elke Joomla-website zou moeten verbeteren.
Naar boven

Peter is Joomla specialist en Linux admin voor snelle, veilige en schaalbare websites.













