[Modul] Suchmodul und Plugin für vollständige Seitenindizierung

Alles rund um Module und Plugins in CONTENIDO 4.10.
Antworten
homtata
Beiträge: 1049
Registriert: Mi 14. Jan 2004, 14:41
Kontaktdaten:

[Modul] Suchmodul und Plugin für vollständige Seitenindizierung

Beitrag von homtata » Do 9. Mai 2019, 23:10

Versionshinweise
---------------------------------

Das Tool wurde ausschließlich unter 4.10.0 und PHP7.2 getestet.

Beschreibung
---------------------------------

Das Tool, eine Kombination aus Plugin und Modulen, imitiert solrSearch innerhalb einer Datenbanktabelle von Contenido.
Hierfür wird eine neue Datenbanktabelle con_fullsearch benötigt.

Der Ansatz bisheriger Suchtools ist eher eine keywordbasierte oder content-typen-spezifische Auswertung. Dies führt aber schnell an die Grenzen, wenn mehr Content-Typen als gedacht auf der Seite vorhanden sind oder mit ArticleIncludes gearbeitet wird. Dann werden oft nicht alle Inhalte, die zu einem Artikel gehören, indiziert.

T2T-Fullsearch geht nun einen anderen Weg. Es greift von außen über cUrl auf die Artikel zu, so wie der Kunde sie sieht, und rendert die Endansicht der Seite in die neue Datenbanktabelle, sowohl als HTML-Code wie auch um alle tags bereinigt (stripped content). Dieser stripped content sowie einige andere Parameter dienen als Grundlage für die Suche.
Es werden alle Sprachen und alle Mandanten indiziert, und jeder DB-Eintrag weiß, wozu er gehört. Ebenso wird gespeichert, welche FEU-Gruppen auf den Artikel Zugriff haben dürfen, ob er online ist, suchbar ist, geschützt ist usw. Ebenso werden - falls die Ausgabe nötig sein sollte - auch ALLe direkt im Artikel vorhandenen Container-Inhalte getrennt mitindiziert.

Das Indizieren bzw. Leeren der DB-Tabelle wird im Backend über Extras/Vollsuche ermöglicht.

Das Einrichten eines Cronjobs ist derzeit auf das Modul "fullsearch" möglich (s.u.).

Anhaltspunkt zur Dauer einer vollen Indexierung: der Standardmandant wird in unter 1 Minute komplett neu durchgerechnet.


Installation
---------------------------------
Die ZIP-Datei mit 2 Modulen und dem Plugin entpacken.
Plugin nach /contenido/plugins hochladen (Name unverändert lassen) und im Backend aktivieren/installieren. Contenido neu laden, Plugin ist unter Extras/Vollsuche zu finden.
Beide Module hochladen und synchronisieren ("fullsearch" und "content_fullsearch_results").
Die Datenbanktabelle muss neu angelegt werden. SQL-Code für phyMyAdmin findet sich im Modul fullsearch/doku.

Nach Installation muss ein FEU für JEDEN Mandanten wie folgt angelegt werden angelegt werden:
user: fullsearchuser
PW: *FuLLseaRch*User*

Ebenso ist in jedem Mandanten eine Frontendgruppe namens "Fullsearch" anzulegen; den User "fullsearchuser" dieser Gruppe hinzufügen und die Frontend-Berechtigungen für diese Gruppe ZWINGEND auf "Kategorie-Zugriff (Alle)" setzen.

Der Mandantenwert für JEDEN Mandaten muss gesetzt sein, wenn es einen Login-Bereich gibt, und er muss auf die korrekte idart verweisen:
login | idart
Das Modul ermittelt die mandantenspezifischen Werte hierfür und loggt cUrl entsprechend mandantenspezifisch ein zum Indizieren geschützter Inhalte. Ist dieser Wert nicht gesetzt, wird für cUrl eine leerer String für die Loginseite erzeugt. Dies lässt die Indizierung zwar korrekt durchlaufen (geprüft), indiziert aber keine geschützten Seiten.

In jedem Layout, das Artikeln zugewiesen wird, die indiziert werden sollen, müssen die Erkennungsmarken eingefügt werden, wo die Indizierung beginnt und wo sie endet (in aller Regel werden nur Content-Bereiche erfasst). Diese lauten wie üblich:
<!--start:content-->
<!--end:content-->

Dann einen Artikel für die suchausgabe anlegen (mit einem Template, das content_fullsearch_results enthält).
Ebenso einen Artikel für cronjobs, soweit gewünscht (mit einem Template, das fullsearch enthält).

Artikel, die nicht gesondert indiziert werden sollen bzw. nicht ausgegeben werden sollen bei der Suche (z.B. Systemseiten oder zu inkludierende Teilartikel), sind in den Artikeleigenschaften als "nicht suchbar" zu markieren. Sie werden dann weiterhin indiziert, aber nicht ausgegeben.


Weitere Informationen
---------------------------------

Der Cronjob lässt sich auf den Artikel aufrufen, der das Modul "fullsearch" enthält. Es ist ein GET-Parameter anzuhängen:
www.xxxx.com/kategorie/artikel.html?fullsearch=reindex

Bei der Suchausgabe sollten die Ergebnisse abhängig von Mandant und Sprache erzeugt werden. Das SQL-Statement ist entsprechend aufgesetzt, konnte aber noch nicht in einem Mehrmandantensystem überprüft werden.

Die Suchausgabe überprüft, ob der FEU eingeloggt ist und welchen FEU-Gruppen er angehört. Davon abhängig werden geschützte Seiten mit angezeigt oder nicht.

Durch einen Schalter im Modul content_fullsearch_results lässt sich sogar jedweder Content mit ins Suchergebnis rendern, selbst wenn es geschützter Content ist (dann allowProctectedResults auf true setzen). Im Smarty muss dann in einer if-Schleife wie gezeigt festgelegt werden, was für diesen Fall als Link oder Text angezeigt wird. Momentan ist es der Login-Link, der auch angezeigt würde, wenn ein eingeloggter User einen Content angeteasert bekommt, der nicht zu seiner Berechtigungsgruppe gehört. Dies lässt sich über Smarty verfeinert ausgeben. (Es war ein Kundenwunsch, geschützte Inhalte auch für nicht eingeloggte User anteasern zu können, um die Neuregistrierungen zu befeuern.)

Der Quellcode für das Suchfeld liegt im Smarty des Moduls content_fullsearch_results. Dort sind auch 2 Arten von Pagination drin (select aber noch ohne JS-Code) sowie alle wichtigen Schleifen und Variablen, die die oben beschriebenen Ausgaben erklären und steuern.

08.05.2019, Viktor Lehmann, TONE2TONE
Dateianhänge
T2T_fullsearch_v100.zip
T2T Fullsearch (Plugin & Module), v1.0.0
(41.52 KiB) 10-mal heruntergeladen

Antworten