Indexed Search
Ergebnisse pro Seite anpassen
Standardmäßig werden 10 Suchergebnisse pro Seite angezeigt. Die Anzahl kann mit diesem TypoScript Eintrag im Setup angepasst werden:
plugin.tx_indexedsearch._DEFAULT_PI_VARS.results = 5
Performance optimieren
Bei größeren TYPO3 Projekten (ab ca. 500-1000 Seiten) steigt die Suchgeschwindigkeit von indexed_search deutlich an. Es kann durchaus 30-60 Sekunden dauern, bis ein Suchergebnis vorliegt.
Das ist nicht nur ärgerlich für den Besucher der Webseite sondern hat auch eine starke Belastung des MySQL Servers zur Folge. Hierdurch wird die Performance der gesamten Seite in Mitleidenschaft gezogen.
Die Ursache ist ebenso wie die Lösung des Problems trivial: indexed_search erstellt in der Datenbank eine Wortliste. Diese kann mehrere 100.000 Einträge umfassen. Standardmäßig ist in der Extension die Teilwortsuche aktiviert. So liefert eine Suche nach "schwein" auch Ergebnisse, in denen z.B. das Wort Schweinegrippe vorkommt, nicht jedoch der einzelne Begriff schwein. Damit das funktioniert, muss die gesamte Wortliste mit der Datenbank-Anfrage
WHERE ... LIKE '%suchbegriff%'
durchsucht werden. In diesem Fall ist wird aus der indexierten Suche für diese Tabelle quasi eine Volltextsuche - und diese dauert wesentlich länger.
Die Lösung:
Mit der TypoScript Anweisung
plugin.tx_indexedsearch._DEFAULT_PI_VARS.type = 0
wird die Suche für eine Ganzwortsuche konfiguriert. Bei Bedarf kann der Besucher über die Option "erweiterte Suche" immer noch auf eine Teilwortsuche umschalten. Die Suchgeschwindigkeit lässt sich durch diese simple Einstellung um den Faktor 10-30 steigern.
Fehler im Ergebnis-Browser beheben
In der Version 2.12.0 von indexed_search ist ein Fehler enthalten, der das korrekte Blättern in den Suchergebnissen verhindert. Beim Klick auf den Link zu einer weiteren Ergebnisseite werden in der URL die Namen von Parametern falsch übergeben.
Unser Kunde Heiko Wassenberg hat nach den Ursachen geforscht und eine funktionierende Lösung gefunden, die er uns freundlicherweise zur Verfügung stellt.
Statt 'tx_indexedsearch_pointer' und 'tx_indexedsearch_freeIndexUid' muss es heißen 'tx_indexedsearch[pointer]' und 'tx_indexedsearch[_freeIndexUid]'.
Um das Problem zu beheben, muss in der Datei typo3/sysext/indexed_search/pi/class.tx_indexedsearch.php die Funktion makePointerSelector_link wie folgt geändert werden:
function makePointerSelector_link($str,$p,$freeIndexUid) {
$onclick = 'document.'.$this->prefixId.'[\''.$this->prefixId.'[pointer]\'].value=\''.$p.'\';'.
'document.'.$this->prefixId.'[\''.$this->prefixId.'[_freeIndexUid]\'].value=\''.rawurlencode($freeIndexUid).'\';'.
'document.'.$this->prefixId.'.submit();return false;';
return '<a href="#" onclick="'.htmlspecialchars($onclick).'">'.$str.'</a>';
}
