TYPO3 Plugin:

phpfts

Ext: phpFTS

Einführung

Was bewirkt es?

PhpFTS (PHP Fulltext Search) bietet eine Google-ähnliche Seitensuche, die einfach in TYPO3 zu integrieren ist.

Merkmale:

  • multimandantenfähigkeit
  • mehrsprachigkeit
  • pdf, doc, doc, docx, ppt, ppt, pptx, xls, xlsx Crawling Fähigkeit
  • unterstützung für MySQL-Suchoperatoren
  • filter für doppelten Inhalt
  • hochgradig konfigurierbar
  • unterstützt Roboter Meta-Tag und rel-attributes
  • unterstützung für umfangreiche Snippets
  • frontend-Filterung von Seitentypen und Dateierweiterungen
  • nach Relevanz und Datum sortieren
  • (ElasticSearch) unscharfe Suche mit Vorschlägen bei Rechtschreibfehlern
  • (ElasticSearch) Frontend-Filterung von Kategorien und Daten

Anforderungen

  • PHP 5.5 oder höher
  • TYPO3 7.6 oder höher
  • JRE (Java 8)

Benutzerhandbuch

Die Erweiterung besteht aus zwei separaten Komponenten. Der Crawler und das TYPO3 Plugin.

Crawler

Der Crawler soll die Website durchsuchen und aus ihren Inhalten den Suchindex erstellen.

TYPO3 Plugin

Das TYPO3-Plugin soll den vom Crawler erstellten Suchindex lesen und übernimmt die gesamte Frontend-Ausgabe.

Die Sucheingabe unterstützt die meisten MySQL-Volltextoperatoren:

  • Plus (+)

    Ein führendes Pluszeichen bedeutet, dass dieses Wort im Suchergebnis vorhanden sein muss.

  • Minus (-)

    Ein führendes Minuszeichen bedeutet, dass dieses Wort im Suchergebnis nicht vorkommen darf.

  • Rohr (~)

    Eine führende Tilde fungiert als Negationsoperator, wodurch der Beitrag des Wortes zur Relevanz der Ergebnisse negativ ist. Dies ist nützlich, um ?noise? Wörter zu markieren. Ein Ergebnis, das ein solches Wort enthält, wird schlechter bewertet als andere, wird aber nicht ganz ausgeschlossen, wie es beim Operator ? der Fall wäre.

  • Stern (*)

    Das Sternchen dient als Platzhalter. Im Gegensatz zu den anderen Operatoren sollte es an das zu beeinflussende Wort angehängt werden. Wörter stimmen überein, wenn sie mit dem Wort vor dem Operator * beginnen.

    Wichtiger Hinweis: Für eine benutzerfreundlichere Suche wird das Sternchen automatisch an jedes Wort angehängt, das der Benutzer eingegeben hat, es sei denn, es ist kein anderer Operator für diesen Satz/Wort vorhanden.

  • Anführungszeichen (")

    Eine Phrase, die in doppelten Anführungszeichen ?? eingeschlossen ist, stimmt nur mit Ergebnissen überein, die die Phrase wörtlich enthalten, wie sie eingegeben wurde.

  • Größer oder kleiner als (< >)

    Diese beiden Operatoren werden verwendet, um den Beitrag eines Wortes zu dem Relevanzwert zu ändern, der einer Zeile zugeordnet ist. Der > Operator erhöht den Beitrag und der < Operator verringert ihn.

Verwaltung

Crawler

Der Crawler ist in TYPO3 vollständig implementiert, indem er einen Scheduler-Task verwendet. Um einen Crawler einzurichten, installieren Sie die Scheduler-Erweiterung und erstellen Sie eine Aufgabe vom Typ Search Crawler.

Führen Sie die geplante Aufgabe manuell aus:

$./typo3/cli_dispatch.phpsh scheduler -i {taskId} -f

Um den Crawling-Prozess zu automatisieren, müssen Sie einen Cronjob einrichten, der den Scheduler periodisch (10-15 Minuten Intervall) ausführt:

$./typo3/cli_dispatch.phpsh Scheduler

Crawlen von Binärdateien

Neben den üblichen HTML-Seiten kann der Crawler auch bestimmte Dateitypen wie pdf, doc, ppt, etc. indizieren. Der Crawler benötigt jedoch eine installierte JRE auf dem Server, um die Binärdateien in Klartext zu konvertieren.

Technische Daten

Der Suchindex wird schrittweise aufgebaut. Somit indiziert der Crawler nur eine konfigurierte Anzahl von Webseiten pro Ausführung und verarbeitet die internen Links. Nachdem der Crawler allen Links gefolgt ist und alle Seiten besucht hat, beginnt er von vorne.

Jede URL erhält eine Wiederbesuchszeit, die angibt, wann der Crawler sie erneut besuchen wird. Abhängig von der Länge der Warteschlange kann sich der eigentliche Besuch verzögern.

TYPO3 Plugin

Um das Frontend-Plugin einzurichten, fügen Sie zunächst das statische TypoScript phpfts in Ihre Root-Vorlage ein.

Nun können Sie das Plugin wie gewohnt auf jeder beliebigen Seite platzieren. Wenn Sie das Plugin über TypoScript platzieren möchten, können Sie dies mit dem folgenden Code tun:

lib.search = USER
lib.search {
  userFunc = TYPO3\CMS\Extbase\Core\Bootstrap->ausgeführt
  pluginName = Suche
  vendorName = Trafo2
  erweiterungsname = Phpfts
  controller = Suche
  aktion = Formular
  einstellungen =< plugin.tx_phpfts.Einstellungen
  persistenz =< plugin.tx_phpfts.persistenz
  view =< plugin.tx_phpfts.view
  controllerConfiguration {
    Suche {
      1 = Formular
    }
  }
}

Wenn Sie den Pfad der Vorlage ändern möchten, können Sie dies mit dem folgenden Code tun:

plugin.tx_phpfts { {
  ansicht {
    templateRootPaths.default = ProjectData/trafo2.de/Templates/Erweiterungen/phpfts/Templates
  }
}

Konfiguration

Überschreiben von Vorlagen

plguin.tx_phpfts.view {
    layoutRootPathhs.10 = Projektdaten/Demo/Templates/Erweiterungen/phpfts/Layouts/
    templateRootPaths.10 = ProjectData/demo/Templates/Erweiterungen/phpfts/Templates/
    partielleRootPath.10 = Projektdaten/Demo/Vorlagen/Erweiterungen/phpfts/Partielle/Partielle/
}

Jede Vorlagendatei, die nicht in Ihrem angegebenen Ordner gefunden wurde, wird automatisch auf den Standard-Template-Pfad zurückgesetzt.

TypoScript-Referenz

Angenommen: plugin.tx_phpfts.settings

Frontend-Einstellungen

Name Typ Beschreibung Standard
resultPid ganzzahl Zielseite uid für die Suchergebnisse (erforderlich).
formularSendenPid zeichenkette Das Ziel des Formulars submit (mögliche Werte: root, current oder eine gültige Page-ID). wurzel
namensraum zeichenkette Kommagetrennte Liste der Namensräume, die bei der Suche berücksichtigt werden müssen.
activateLanguage boolesch Wenn diese Option gesetzt ist, werden die Spracheinstellungen für die Suche berücksichtigt. Bitte beachten Sie, dass config.language, config.html_langKey oder config.locale_all erforderlich ist, um die aktuelle Sprache zu erkennen. 0
backend zeichenkette Backend-Speicher für den Suchindex (verfügbare Optionen: Trafo2\Phpfts\StorageBackend\MySQL, Trafo2\Phpfts\StorageBackend\ElasticSearch). Trafo2\Phpfts\StorageBackend\MySQL
shortUrlLength ganzzahl Maximale Anzahl der URL-Teile, die angezeigt werden. 3
bodyWordLength ganzzahl Wie viele Wörter des Körpers werden im Ergebnis angezeigt (nur MySQL). 10
shortIdentifier zeichenkette Zeichenkette, die angezeigt wird, wenn ein Text beschnitten wurde (siehe shortUrlLength und bodyWordLength).
highlightKlasse zeichenkette CSS-Klasse zur Hervorhebung von Suchbegriffen (nur MySQL). phpfts-Highlight
highlightTag zeichenkette HTML-Tag zur Hervorhebung von Suchbegriffen. stark
useDescription boolesch Wetter, um die Meta-Beschreibung oder den Text für den Teaser zu verwenden. 0
charsRemoveFromQuery (Zeichen entfernen) zeichenkette Liste der Zeichen, die aus dem Suchbegriff entfernt werden sollen. \'
minQueryLength ganzzahl 3
seitenumbruch.ArtikelPerPerPage ganzzahl Artikel pro Seite. 10
seitenumbruch.insertAbove boolesch Fügen Sie Seitenumbrüche über den Suchergebnissen ein. 0
pagination.insertUntenstehendes boolesch Fügen Sie die Seitenzahl unter den Suchergebnissen ein. 1
seitennummerierung.maximumAnzahlderLinks ganzzahl Maximale Anzahl von Links in der Seitennummerierung. 99
elasticSearch.endpoint zeichenkette ElasticSearch Endpunkt. http://localhost:9200/
elasticSearch.index zeichenkette Name des elastischen Suchindexes
elasticSearch.username zeichenkette Benutzername für HTTP Basic Auth
elasticSearch.password zeichenkette Passwort für HTTP Basic Auth
fileBoost ganzzahl Aktiviert die Dateiverstärkung (Dateien werden höher eingestuft) (nur Elastische Suche) 0
suchfelder reihe Konfiguriert die Felder, die entlang des Boosts durchsucht werden sollen (nur Elastische Suche) 10 = title.exact^60 20 = Schlüsselwörter.exact^50 70 = body.exact^10 80 = Titel^6 90 = Schlüsselwörter^5 140 = Körper
sortierung reihe Sortier-Konfiguration
localFileExtensionsToIgnore (Lokale Dateierweiterungen) reihe Einbeziehen lokaler Dateien, die nach bestimmten Erweiterungen gefiltert sind

Definition des Frontend-Filters

Mit den Filter-Definitionen können Sie den Filter im Frontend konfigurieren.

frontendFilters {
    20 {
        label = Neuigkeiten
        parameter {
            typ = Nachrichtenartikel
        }
        kinder {
            10 {
                label = Alle
                parameter.type = newsarticle
            }
            15.teiler = 1
            20 {
                label = Pressemeldungen
                parameter {
                    typ = Nachrichtenartikel
                    data\.category = Pressemeldungen
                }
            }
            30 {
                label = Aktuelles
                parameter {
                    typ = Nachrichtenartikel
                    data\.category = Aktuelles
                }
            }
            35.teiler = 1
            40 {
                label = Beliebige Zeit
                kinder {
                    10 {
                        etikett = 2016
                        parameter {
                            typ = Nachrichtenartikel
                            data\.datePublished.gte = 145160280000
                            data\.datePublished.lte = 1483225199
                        }
                    }
                    20 {
                        etikett = 2015
                        parameter {
                            typ = Nachrichtenartikel
                            data\.datePublished.gte = 14200668000000
                            data\.datePublished.lte = 145160279999
                        }
                    }
                    30 {
                        etikett = 2014
                        parameter {
                            typ = Nachrichtenartikel
                            data\.datePublished.gte = 1388530800
                            data\.datePublished.lte = 1420066799
                        }
                    }
                }
            }
        }
    }
}

Crawler-Einstellungen

Name Typ Beschreibung Standard
namensraum zeichenkette Zusätzlicher Namensraum für die Gruppierung.
baseUrl zeichenkette Die Basis-URL für den Crawler.
backend zeichenkette Backend-Speicher für den Suchindex (verfügbare Optionen: Trafo2\Phpfts\StorageBackend\MySQL, Trafo2\Phpfts\StorageBackend\ElasticSearch). Trafo2\Phpfts\StorageBackend\MySQL
logType zeichenkette Protokolltyp (verfügbare Optionen: Zend\Log\Writer\Stream, Zend\Log\Writer\Noop). Zend\Log\Writer\Stream
logTarget zeichenkette Ziel protokollieren. php://Ausgabe
standard-Sprache zeichenkette Standardsprache, wenn die Sprache nicht erkannt werden konnte. de
httpBasicAuth zeichenkette Wenn die Website über die http-Basisauthentifizierung geschützt ist, können Sie hier Benutzername und Passwort angeben. Beispiel: username:password.
revisitTime zeichenkette Zeitspanne, in der der Crawler zurückkehren sollte, um die Seite erneut zu durchsuchen. Die Syntax ist identisch mit der strtotime() Funktion von PHP. +7 Tage
ignorierenRoboter boolesch Wenn true, wird das Roboter-Meta-Tag ignoriert (hat keinen Einfluss auf phpftsbot-Meta-Tag und das rel-attribute). 0
elemente zeichenkette Der Inhalt der angegebenen Elemente wird in den Suchindex eingefügt. Vollständig CSS-Selektor kompatibel. #content
removeElements zeichenkette HTML-Elemente, die vor dem Parsen des DOMs entfernt werden (kommagetrennt). skript, Stil, Auswahl, Textarea, Auswahl
ignoreElements zeichenkette HTML-Elemente, die ignoriert und im Suchindex weggelassen werden. Vollständig CSS-Selektor-kompatibel.
queueLimit ganzzahl Maximale Anzahl der Seiten, die pro Crawler-Prozess indiziert werden sollen. 20
maxQueueSize ganzzahl Die maximale Größe, mit der die Warteschlange wächst. 50
entfernen Nicht verfügbar ganzzahl Zeit in Sekunden, bis eine nicht verfügbare Ressource aus dem Index entfernt wird. 2592000
xpdf zeichenkette Pfad zur Xpdf-Binärdatei. /usr/local/bin
catdoc zeichenkette Pfad zur catdoc-Binärdatei. /usr/local/bin
catppt zeichenkette Pfad zu catppt binary. /usr/local/bin
libreoffice zeichenkette Pfad zu LibreOffice/OpenOffice Binärdatei /usr/bin
elasticSearch.endpoint zeichenkette ElasticSearch Endpunkt. http://localhost:9200/
elasticSearch.index zeichenkette Name des elastischen Suchindexes
elasticSearch.username zeichenkette Benutzername für HTTP Basic Auth
elasticSearch.password zeichenkette Passwort für HTTP Basic Auth
useLocalFiles verwenden boolesch Wenn aktiviert, versucht der Crawler zuerst, die Dateien lokal zu laden, bevor er sie herunterlädt. Dies kann die Crawling-Performance erhöhen. falsch
localFilePath zeichenkette Dateipfadzuordnung für die lokale Zeichenkettenkonvertierung.

Alle diese Einstellungen können von einem Scheduler-Task überschrieben werden.

URL-Filter

URL-Filter können verwendet werden, um bestimmte URLs vom Crawling-Prozess auszuschließen. Links, die einer der Regeln entsprechen, werden nicht im Suchindex gespeichert.

plugin.tx_phpfts.settings.urlRegeln {
    nicht erlaubt {
    query {
        10 {
            typ = enthält
            wert = tipUrl=
        }
    }
    pfad {
        10 {
            typ = Erweiterung
            wert = mp4
        }
        20 {
            typ = Erweiterung
            wert = mpeg
        }
        ...
    }
    }
}

Der Crawler verarbeitet die Meta-Tag-Roboter sowie das rel-attribute in Links.

<meta name="robots" content="noindex,follow"/>
<a  rel="nofollow">Link-Label</a>

Inhaltsfilter

Inhaltsfilter werden verwendet, um den Inhalt vor dem Speichern zu manipulieren (z.B. Entfernen von Suffixen aus dem Seitentitel).

plugin.tx_phpfts.settings.filterRegeln {
    titel {
        10 {
            funktion = str_replace
            params {
                10 = - Mein Titelsuffix
                20 =
                30 = $str
            }
        }
        20 {
            funktion = Trimmen
            params.10 = $str
        }
    }
    inhalt {
        10 {
            funktion = Trimmen
            params.10 = $str
        }
    }
}

Statuscodes

Die folgende Liste zeigt alle Statuscodes, die phpFTS verwendet.

Code Typ Beschreibung
0 phpFTS Noch kein Crawler-Besuch
200 HTTP OK
204 HTTP, phpFTS Kein Inhalt
301 HTTP Permentatly verschoben
302 HTTP Gefunden
303 HTTP Siehe Sonstiges
403 HTTP Verboten
404 HTTP Nicht gefunden
500 HTTP Serverfehler
601 phpFTS Nicht erkannter verbotener Mime-Typ
602 phpFTS HTML konnte nicht analysiert werden
603 ZF URL kann nicht analysiert werden (\Zend\Uri\Exception)
604 phpFTS Duplizieren von Inhalten
605 ZF \Ausnahme: Zend\Http\Client\Ausnahme

Fehlerbehebung / Bekannte Probleme

  1. Es gibt keine Suchergebnisse mit 3 oder weniger Zeichen:

    Bitte überprüfen Sie die Variable MySQL ft_min_word_len in Ihrer MySQL-Konfiguration. Wenn der Wert 4 ist, wird jede Suche mit weniger als 4 Zeichen ignoriert.

  2. Die Fuzzy-Suche (ElasticSearch) funktioniert nicht korrekt:

    Dies ist immer noch ein bekanntes Problem, das noch nicht behoben ist. Manchmal scheint es etwas Zeit zu brauchen.

Changelog

Siehe https://bitbucket.trafo2.de/projects/T002/repos/419/commits

Benötigen Sie schnelle Hilfe mit dieser Extension? Unser Team von erfahrenen TYPO3-Entwicklern löst Probleme unkompliziert und zum Stundensatz.