Wie wärs mal mit indizierter Suche?
MySQL bietet schon lange die Möglichkeit, einen Suchindex erstellen zu lassen. Wäre das nicht was für WBCE? Ein testbarer Proof of Concept, der auch die Nachteile zeigt.
Internet-Nutzer sind von Google verwöhnt und erwarten, dass auch bei einer Site-Search alles und zwar nach Relevanz geordnet gefunden wird. Die WBCE-Suchfunktion kann da nicht mithalten. „Alles“ - Ja, schon. Aber Relevanz? Naja..
Der eingebaute Algorithmus fragt jedes Modul mithilfe der modul-eigenen search.php nach Ergebnissen, fasst diese zusammen, bastelt „Excerpts“ = „Zitate“ (wobei die voreingestellten 15 verrückt viel sind, ich ändere das gleich mal auf 3) und bringt das - wie gerade gefunden - in eine Liste.
Dabei müssen auch Berechtigungen und Sichtbarkeit berücksichtigt werden: Ein unangemeldeter Besucher darf natürlich keine Suchergebnisse für private Seiten bekommen.
Das ist für kleine Websites ausreichend und man muss auch sagen: So oft wird eine Site-Search ja auch gar nicht benutzt.
Suche auf umfangreichen Websites
Etwas anders sieht die Sache aus, wenn (sehr) viele Seiten vorhanden sind: Hunderte öffentliche Seiten - und falls mal Berechtigungen schlagend werden, kommt man ja allein über ein Suchergebnis ohnehin nicht ran. Die allermeisten dieser Seiten ändern sich auch kaum mal, und ein nicht ganz so aktuelles Suchergebnis wird kein Beinbruch sein.
Ein Proof of Concept mit Nachteilen
Ich habe ein provisorisches Modul gemacht, um mir die Sache mal näher anzusehen. Per Codezeile im Template wird ihm der Inhalt eines Blocks (nicht der ganzen Seite!) übergeben, das wird in eine eigene Tabelle gespült. Zusätzlich ein paar weitere Daten wie Title, Description, page_id.
Für die Abfrage wird dieser SQL-String verwendet:
$sql = "SELECT *, MATCH(text) AGAINST ('".$searchstring."' IN NATURAL LANGUAGE MODE) AS relevance FROM ".TABLE_PREFIX."mod_".$tablename." WHERE MATCH(text) AGAINST ('".$searchstring."' IN NATURAL LANGUAGE MODE);";
Etwas Aufbereitung, aber ansonsten recht simpel gehalten. Zum Testen hier (jaja, ich betreue 100e Websites, nicht alle habe ich auch gestaltet):
https://osterberger.at/de/search.php
Zum Vergleich kann man natürlich auch die normale WBCE-Suche oberhalb im Menü verwenden. Dass der Unterschied hier nicht so besonders ist, liegt wohl auch daran, dass es nur WYSIWYG-Abschnitte gibt. Auf Seiten mit vielen Module sieht das etwas anders aus - auch dafür habe ich eine Testseite.
Was auffällt
Es werden keine Teilstrings gefunden. Etwa „Aluminium“ liefert viele Ergebnisse, „Alu“ hingegen keines.
Die Relevanz scheint soweit stimmig zu sein, so wirklich der Knaller ist es aber auch nicht. Immerhin kann man mit dem Wert eine kleinen Balken machen, das hilft vielleicht ;-)
Weitere „Problemchen“
Derzeit funktioniert das nur mit WBCE-Seiten, also nicht mit Modulen, die selbst Seiten erzeugen, wie zb Topics oder Bakery. Wäre aber wohl möglich.
Sicher nicht möglich ist es bei Seiten mit Parametern wie ?tag=2&monat=13. Das würde den Rahmen sprengen, weil Parameter sehr viele URLs generieren können und wir können und wollen Google nicht nachbauen.