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
-
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.
-
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.
[DependciesAndConflicts]