
Smart Search in Joomla
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 verwijderd is in Joomla 5.
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 | Ja (configureerbaar) |
| 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, geplande taak |
| 5.0 | Legacy com_search verwijderd, Smart Search is de enige core-zoekfunctie |
| 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 → Smart Search (beheer van geïndexeerde items + filters)
Componenten → Smart Search → Maps (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 alle Smart Search-tabellen worden geleegd. 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, datum of populariteit.
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 artikel indexeert, kent het verschillende gewichten toe aan elk veld. Een term in de titel scoort hoger dan dezelfde term in de hoofdtekst. Daarom scoort een overeenkomst in alleen de titel hoger dan een overeenkomst alleen in de tekst.
| Veld | Standaardgewicht |
|---|---|
| Titel | Hoog |
| Meta-keywords / tags | Hoog |
| Meta description | Gemiddeld |
| Introtekst | Gemiddeld |
| Volledige tekst | Laag |
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.
Stel 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 maar handige querytaal:
| Syntaxis | Betekenis |
|---|---|
joomla menus |
Zoekt items die zowel joomla ALS menus bevatten. |
"joomla menus" |
Zoekt op de exacte woordgroep. |
joomla -menus |
Zoekt op joomla maar NIET op menus. |
menu* |
Wildcard-achtervoegsel (Joomla 4 en nieuwer). |
Er is geen OR en geen ondersteuning voor haakjes. Houd zoekopdrachten eenvoudig.
4.2 Fuzziness, wat je wel en niet krijgt
Smart Search is geen typo-tolerante fuzzy zoekmachine zoals Algolia. Het biedt:
- Stem-gebaseerde fuzziness, "running" vindt "run" via de stemmer per taal.
- Wildcard-achtervoegsels,
menu*matcht met menus, menubar en menuitem. - Geen edit-distance,
joomalvindt geen "joomla". Een verkeerd gespelde zoekopdracht levert nul resultaten op. - Synoniemen, verkleinen het verschil tussen bekende varianten (zie sectie 5).
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.
Joomla 4 en nieuwer bevat standaard een geplande taak genaamd Smart Search Indexer. Je kunt deze uitvoeren vanuit het onderdeel Geplande taken of direct via cron:
# 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:
- Defragmenteert de termtabellen.
- Verwijdert verweesde tokens.
- Bouwt de lijst met veelvoorkomende woorden opnieuw op.
Voer Optimise uit na een grote bulkimport of een zware contentopschoning.
5.5 Synoniemen
In Componenten → Smart Search → Options → Search Tab kun je synoniemgroepen registreren zodat een zoekopdracht voor één term ook op andere termen matcht.
joomla,joomla!
nl,netherlands,holland
cms,content management system
event,evenement
Hoe het werkt:
- Eén synoniemgroep per regel, gescheiden door komma's.
- Tijdens het zoeken wordt elke term uitgebreid met de volledige synoniemgroep voordat gezocht wordt.
- Synoniemen worden opgeslagen in de componentparameters, niet in een aparte tabel.
Goede toepassingen zijn merkvarianten (Joomla / Joomla!), afkortingen (CMS / content management system) en meertalige hints op een eentalige website (event / evenement).
Synoniemen worden toegepast tijdens het zoeken, niet tijdens het indexeren. Je kunt ze dus op elk moment toevoegen zonder opnieuw te indexeren.
5.6 Stopwoorden en veelvoorkomende termen
In Componenten → Smart Search → Options → Indexing Tab:
- Common-word threshold, een term die voorkomt in meer dan X procent van de items wordt automatisch als algemeen beschouwd en grotendeels genegeerd.
- Stopwoordenbestand, een taalspecifieke lijst die wordt meegeleverd door elke taalplugin.
In de praktijk hoef je stopwoorden zelden handmatig aan te passen. De automatische drempelwaarde werkt op de meeste websites prima.
5.7 Module voor populaire zoekopdrachten
De module Smart Search Module - Most Popular Searches toont de populairste zoekopdrachten uit #__finder_logging als klikbare suggesties. Deze module werkt alleen wanneer Gather Search Statistics is ingeschakeld. Plaats de module op de homepage zodat bezoekers een populaire zoekopdracht kunnen aanklikken in plaats van zelf te typen.
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 Taalplugins
Elke taal bevat een eigen stemmer en stopwoordenbestand:
plugins/finder/
language/en-GB/...
language/nl-NL/...
language/fr-FR/...
Zonder de juiste plugin ingeschakeld 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.
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. |
onFinderBeforeIndex |
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->input->set('q', 'joomla smart search');
$model = $app->bootComponent('com_finder')
->getMVCFactory()
->createModel('Search', 'Site', ['ignore_request' => false]);
$results = $model->getResults();
foreach ($results as $r) {
echo $r->title . ' - ' . $r->route . "\n";
}
8.6 Web Services API
Smart Search biedt zoekresultaten aan via de Joomla Web Services API:
GET /api/index.php/v1/fields/com_finder/search?filter[q]=joomla
De response is JSON met gerangschikte links, taxonomieën en routes. Combineer dit met een JavaScript-frontend of een static site generator voor headless search.
ACL blijft van toepassing. Anonieme API-aanroepen zien alleen Public-resultaten.
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_CONTEXTenBODY_CONTEXT. - Voer daarna een Purge en herindexering uit.
Maak 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.
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, verwijderd in Joomla 5.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. Sinds Joomla 4.2 indexeert Smart Search standaard ook waarden van Custom Fields. Er is geen extra extensie nodig. Joomla 6 neemt dit gedrag automatisch over.
Wat automatisch wordt geïndexeerd:
- Waarden van velden waarvan het veldtype doorzoekbare tekst produceert, zoals Text, Textarea, Editor, List, Radio, Checkboxes, URL, Calendar enzovoort.
- Per artikel, contact, categorie of gebruiker, overal waar Custom Fields beschikbaar zijn.
- Het toegangsniveau van het veld wordt tijdens het zoeken gerespecteerd.
Wat niet automatisch wordt geïndexeerd:
- Velden met Searchable = No op het tabblad Opties van het veld. Uitschakelen gebeurt per veld.
- Binaire of niet-tekstuele veldtypes, zoals mediapaden, Color en ruwe Subform-JSON zonder rendering.
- Custom field-types van externe plugins die de indexeer-hook niet implementeren.
Belangrijke aandachtspunten:
- Na het inschakelen van Custom Fields op bestaande content moet je een Purge + herindexering uitvoeren zodat de waarden terechtkomen in
#__finder_links_terms. - Een Subform-waarde wordt als JSON opgeslagen in de database. Alleen de gerenderde output wordt geïndexeerd. Override
subform.phpals je een andere structuur wilt indexeren. - Websites die vanaf een versie vóór 4.2 zijn gemigreerd kunnen nog oude workarounds gebruiken, zoals Tassos Finder of PHProberto Finder Plus. Controleer of deze extensies nog nodig zijn.
9.6 Valkuil bij SQL-velden
SQL Custom Fields die privécontent opvragen kunnen data lekken naar de zoekindex. De indexeerder draait als een gebruiker met uitgebreide rechten, waardoor alles wat de SQL-query retourneert doorzoekbaar wordt.
Controleer elk SQL Custom Field zorgvuldig voordat je Smart Search gebruikt in een multi-tenant omgeving.
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 Afstelopties voor grote websites
Voor websites met tienduizenden items zijn de standaardinstellingen vaak te agressief. Pas deze instellingen aan:
| Instelling | Locatie | Wat het doet |
|---|---|---|
batch_size |
Smart Search Options → Indexing | Aantal items per batch voordat data wordt weggeschreven. |
memory_table_limit |
Smart Search Options → Indexing | Bepaalt wanneer MEMORY-tabellen naar disk overschakelen. |
max_heap_table_size |
MySQL-configuratie | Harde limiet voor MEMORY-tabellen, verhoog deze voor grote indexen. |
tmp_table_size |
MySQL-configuratie | Gebruik samen met bovenstaande instelling. |
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
- Tassos Finder, indexeert Custom Fields, voegt AJAX-live-resultaten toe en biedt een betere autocomplete-interface.
- PHProberto Finder / Octopus Finder, voegt contenttype-adapters toe voor populaire componenten zoals K2, VirtueMart, HikaShop en EasyBlog.
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.
11. Best practices en snelle referentie
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. - Controleer SQL Custom Fields zorgvuldig voordat je op Smart Search vertrouwt.
Cheat sheet
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 "phrase" -exclude word*
OVERRIDE templates/{tpl}/html/com_finder/search/default_result.php
API GET /api/index.php/v1/fields/com_finder/search?filter[q]=...
LEGACY com_search is VERWIJDERD - Smart Search is de zoekmachine.
12. 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.
- Headless-ready, volledige zoekresultaten via de Web Services API.
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.


Joomla en Linux specialist voor snelle, veilige en schaalbare websites.


