ALLES ÜBER phpfts UND WIE ES AUF WEBSITES EINGESETZT WIRD

Untersuchte Extension

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

NameTypBeschreibungStandard
resultPidganzzahlZielseite uid für die Suchergebnisse (erforderlich).
formularSendenPidzeichenketteDas Ziel des Formulars submit (mögliche Werte: root, current oder eine gültige Page-ID).wurzel
namensraumzeichenketteKommagetrennte Liste der Namensräume, die bei der Suche berücksichtigt werden müssen.
activateLanguagebooleschWenn 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
backendzeichenketteBackend-Speicher für den Suchindex (verfügbare Optionen: Trafo2\Phpfts\StorageBackend\MySQL, Trafo2\Phpfts\StorageBackend\ElasticSearch).Trafo2\Phpfts\StorageBackend\MySQL
shortUrlLengthganzzahlMaximale Anzahl der URL-Teile, die angezeigt werden.3
bodyWordLengthganzzahlWie viele Wörter des Körpers werden im Ergebnis angezeigt (nur MySQL).10
shortIdentifierzeichenketteZeichenkette, die angezeigt wird, wenn ein Text beschnitten wurde (siehe shortUrlLength und bodyWordLength).
highlightKlassezeichenketteCSS-Klasse zur Hervorhebung von Suchbegriffen (nur MySQL).phpfts-Highlight
highlightTagzeichenketteHTML-Tag zur Hervorhebung von Suchbegriffen.stark
useDescriptionbooleschWetter, um die Meta-Beschreibung oder den Text für den Teaser zu verwenden.0
charsRemoveFromQuery (Zeichen entfernen)zeichenketteListe der Zeichen, die aus dem Suchbegriff entfernt werden sollen.\'
minQueryLengthganzzahl3
seitenumbruch.ArtikelPerPerPageganzzahlArtikel pro Seite.10
seitenumbruch.insertAbovebooleschFügen Sie Seitenumbrüche über den Suchergebnissen ein.0
pagination.insertUntenstehendesbooleschFügen Sie die Seitenzahl unter den Suchergebnissen ein.1
seitennummerierung.maximumAnzahlderLinksganzzahlMaximale Anzahl von Links in der Seitennummerierung.99
elasticSearch.endpointzeichenketteElasticSearch Endpunkt.http://localhost:9200/
elasticSearch.indexzeichenketteName des elastischen Suchindexes
elasticSearch.usernamezeichenketteBenutzername für HTTP Basic Auth
elasticSearch.passwordzeichenkettePasswort für HTTP Basic Auth
fileBoostganzzahlAktiviert die Dateiverstärkung (Dateien werden höher eingestuft) (nur Elastische Suche)0
suchfelderreiheKonfiguriert 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
sortierungreiheSortier-Konfiguration
localFileExtensionsToIgnore (Lokale Dateierweiterungen)reiheEinbeziehen 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

NameTypBeschreibungStandard
namensraumzeichenketteZusätzlicher Namensraum für die Gruppierung.
baseUrlzeichenketteDie Basis-URL für den Crawler.
backendzeichenketteBackend-Speicher für den Suchindex (verfügbare Optionen: Trafo2\Phpfts\StorageBackend\MySQL, Trafo2\Phpfts\StorageBackend\ElasticSearch).Trafo2\Phpfts\StorageBackend\MySQL
logTypezeichenketteProtokolltyp (verfügbare Optionen: Zend\Log\Writer\Stream, Zend\Log\Writer\Noop).Zend\Log\Writer\Stream
logTargetzeichenketteZiel protokollieren.php://Ausgabe
standard-SprachezeichenketteStandardsprache, wenn die Sprache nicht erkannt werden konnte.de
httpBasicAuthzeichenketteWenn die Website über die http-Basisauthentifizierung geschützt ist, können Sie hier Benutzername und Passwort angeben. Beispiel: username:password.
revisitTimezeichenketteZeitspanne, 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
ignorierenRoboterbooleschWenn true, wird das Roboter-Meta-Tag ignoriert (hat keinen Einfluss auf phpftsbot-Meta-Tag und das rel-attribute).0
elementezeichenketteDer Inhalt der angegebenen Elemente wird in den Suchindex eingefügt. Vollständig CSS-Selektor kompatibel.#content
removeElementszeichenketteHTML-Elemente, die vor dem Parsen des DOMs entfernt werden (kommagetrennt).skript, Stil, Auswahl, Textarea, Auswahl
ignoreElementszeichenketteHTML-Elemente, die ignoriert und im Suchindex weggelassen werden. Vollständig CSS-Selektor-kompatibel.
queueLimitganzzahlMaximale Anzahl der Seiten, die pro Crawler-Prozess indiziert werden sollen.20
maxQueueSizeganzzahlDie maximale Größe, mit der die Warteschlange wächst.50
entfernen Nicht verfügbarganzzahlZeit in Sekunden, bis eine nicht verfügbare Ressource aus dem Index entfernt wird.2592000
xpdfzeichenkettePfad zur Xpdf-Binärdatei./usr/local/bin
catdoczeichenkettePfad zur catdoc-Binärdatei./usr/local/bin
catpptzeichenkettePfad zu catppt binary./usr/local/bin
libreofficezeichenkettePfad zu LibreOffice/OpenOffice Binärdatei/usr/bin
elasticSearch.endpointzeichenketteElasticSearch Endpunkt.http://localhost:9200/
elasticSearch.indexzeichenketteName des elastischen Suchindexes
elasticSearch.usernamezeichenketteBenutzername für HTTP Basic Auth
elasticSearch.passwordzeichenkettePasswort für HTTP Basic Auth
useLocalFiles verwendenbooleschWenn aktiviert, versucht der Crawler zuerst, die Dateien lokal zu laden, bevor er sie herunterlädt. Dies kann die Crawling-Performance erhöhen.falsch
localFilePathzeichenketteDateipfadzuordnung 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.

CodeTypBeschreibung
0phpFTSNoch kein Crawler-Besuch
200HTTPOK
204HTTP, phpFTSKein Inhalt
301HTTPPermentatly verschoben
302HTTPGefunden
303HTTPSiehe Sonstiges
403HTTPVerboten
404HTTPNicht gefunden
500HTTPServerfehler
601phpFTSNicht erkannter verbotener Mime-Typ
602phpFTSHTML konnte nicht analysiert werden
603ZFURL kann nicht analysiert werden (\Zend\Uri\Exception)
604phpFTSDuplizieren von Inhalten
605ZF\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.

responsive - image 4

speed test - image 5

Ran an die Resultate – unser Newsletter für Sie!

Damit Sie gleich Wind davon bekommen, wenn wir in unserem Magazin zu neuen Erkenntnissen kommen.