Das TNTSearch -Plugin ist für Grav CMS. Leistungsstarke indizierte basierte Volltexten-Suchmaschine, die von der TNTSearch-Bibliothek betrieben wird, die schnelle AJAX-basierte Grav-Inhaltssuche bietet. Dieses Plugin ist sehr flexibel und ermöglicht Indizes für willkürliche Inhaltsdaten sowie benutzerdefinierte Zweig -Vorlagen, um die Möglichkeit zu geben, modulare und andere dynamische Seitentypen zu indexieren. TNTSearch bietet sowohl CLI-
HINWEIS: TNTSEARCH Version 3.0.0 erfordert jetzt Grav 1.6.0 oder neuer, um die Funktionen zu verwenden, da in früheren Versionen neue Funktionen nicht verfügbar sind.

Das Installieren des TNT -Such -Plugins kann auf zwei Arten erfolgen. Mit der Installationsmethode von GPM (Grav Package Manager) können Sie das Plugin schnell und einfach mit einem einfachen Terminalbefehl installieren, während die manuelle Methode Ihnen dies über eine ZIP -Datei ermöglicht.
Die einfachste Möglichkeit, dieses Plugin zu installieren, ist über den Grav Package Manager (GPM) über das Terminal Ihres Systems (auch die Befehlszeile bezeichnet). Aus der Wurzel Ihres Gravall -Installationstyps:
bin/gpm install tntsearch
Dadurch wird das TNT -Such -Plugin in Ihrem Verzeichnis /user/plugins in Grav eingebaut. Die Dateien finden Sie unter /your/site/grav/user/plugins/tntsearch .
Abgesehen von Standard -Grav -Anforderungen hat dieses Plugin einige zusätzliche Anforderungen. Aufgrund der komplexen Natur einer Suchmaschine verwendet TNTSearch eine flache Datenbank, um die WordList sowie die Zuordnung für Inhalte zu speichern. Dies wird automatisch vom Plugin behandelt. Sie müssen jedoch sicherstellen, dass Sie Folgendes auf Ihrem Server installiert haben:
| PHP standardmäßig wird PDO und die überwiegende Mehrheit der Linux-basierten Systeme bereits mit SQLite ausgestattet.
SQLite wird tatsächlich auf Ihrem Mac vorinstalliert, aber Sie können es mit Homebrew auf die neueste Version aktualisieren:
Homebrew installieren
$ /usr/bin/ruby -e " $( curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install ) "Installieren Sie SQLite mit Homebrew
$ brew install sqliteLaden Sie die entsprechende Version von SQLite von der SQLite -Download -Seite herunter.
Extrahieren Sie die heruntergeladene ZIP -Datei und führen Sie die ausführbare sqlite3.exe aus.
Bevor Sie dieses Plugin konfigurieren, sollten Sie die user/plugins/tntsearch/tntsearch.yaml nach user/config/plugins/tntsearch.yaml kopieren und diese kopieren nur bearbeiten.
Hier finden Sie die Standardkonfiguration und eine Erklärung der verfügbaren Optionen:
enabled : true
search_route : ' /search '
query_route : ' /s '
built_in_css : true
built_in_js : true
built_in_search_page : true
enable_admin_page_events : true
search_type : auto
fuzzy : false
distance : 2
phrases : true
stemmer : ' no '
display_route : true
display_hits : true
display_time : true
live_uri_update : true
limit : 20
min : 3
snippet : 300
index_page_by_default : true
scheduled_index :
enabled : false
at : ' 0 */3 * * * '
logs : ' logs/tntsearch-index.out '
filter :
items :
- [email protected]
powered_by : true
search_object_type : Grav Die Konfigurationsoptionen sind wie folgt:
enabled - aktivieren oder deaktivieren Sie das Plugin sofortsearch_route - Die Route, die für die integrierte Suchseite verwendet wirdquery_route - die Route, die vom Suchformular zum Abfragen der Suchmaschine verwendet wirdbuilt_in_css - Aktivieren oder deaktivieren Sie das integrierte CSS -Stylingbuilt_in_js - Aktivieren oder deaktivieren Sie das integrierte JavaScriptbuilt_in_search_page - Aktivieren oder deaktivieren Sie die integrierte Suchseiteenable_admin_page_events - Aktivieren oder deaktivieren Sie die Seitenereignisse, die on-save auftreten, um die Seite im Index hinzuzufügen/zu aktualisieren/zu entfernensearch_type - kann einer dieser Typen sein:basic - Standard String Matchingboolean - Unterstützung or oder minus . zB foo -barauto - erkennt automatisch, ob basic oder boolean Verwendung verwendet werden sollfuzzy - Übereinstimmungen, wenn die Wörter "schließen" sind, aber nicht unbedingt genau übereinstimmende Übereinstimmungendistance - Levenshtein Abstand der Fuzzy -Suche. Es repräsentiert die Anzahl der Zeichen, die in einem Wort geändert, entfernt oder hinzugefügt werden müssen, damit das Suchschlüsselwort übereinstimmt. Das Erhöhen der Entfernung führt zu mehr Suchergebnissen, verringert jedoch die Genauigkeit der Suche.phrases - automatisch die Unterstützung der Phrasen behandelnstemmer - kann einer dieser Typen sein:no - kein Stielarabic - arabische Sprachecroatian - kroatische Sprachegerman - Deutsche Spracheitalian - italienische Spracheporter - Porter Stemmer für englische Spracheportuguese - portugiesische Spracherussian - russische Spracheukrainian - Ukrainische Sprachedisplay_route - Zeigen Sie die Route in den Suchergebnissen andisplay_hits - Zeigen Sie die Anzahl der Treffer in den Suchergebnissen andisplay_time - Zeigen Sie die Ausführungszeit in den Suchergebnissen anlive_uri_update - Wenn built_in_js aktiviert ist, aktualisiert Live die URI -Leiste auf der Seite search_routelimit - maximale Menge an Ergebnissen, die gezeigt werden müssenmin - Mininummenge von Zeichen, die vor der Suche getippt wurdensnippet - Anzahl der Zeichen für die Vorschau eines Ergebniselementsindex_page_by_default - Sollten alle Seiten standardmäßig indiziert werden, es sei denn, FrontMatter überschreibtscheduled_index - neuer geplanter Indexjob. Standardmäßig deaktiviert, wenn es aktiviert ist, dass sie alle 3 Stunden ausgeführt werden, und die Ergebnisse für logs/tntsearch-index.out ausgebenfilter - Ein Seitenkollektionsfilter, mit dem Sie über eine Sammelabfrage bestimmte Seiten zum Index aussuchen könnenpowered_by - Zeigen Sie den TNNEarch -Text ansearch_object_type - Ermöglicht benutzerdefinierte Klassen die standardmäßige Unterstützung für Graven . Dies ermöglicht vollständig benutzerdefinierte Suchfunktionen für jeden Datentyp. TNTSearch beruht darauf, dass Ihr Inhalt in der SQLite Index -Datenbank indexiert wird, bevor Suchabfragen durchgeführt werden können. Dies ist anderen Suchmaschinen wie Elasticsearch, Solr, Lucene usw. sehr ähnlich, verwendet jedoch eine relativ einfache PHP -Suchmaschinenbibliothek TNTSearch -Bibliothek, um dies mit wenig Setup und ohne Probleme zu erreichen.
Der erste Schritt nach der Installation des Plugins besteht darin, Ihren Inhalt zu indizieren. Es gibt verschiedene Möglichkeiten, wie Sie dies erreichen können.
Wenn Sie zuerst auf die CLI zugreifen oder einfach nicht das Admin-Plugin verwenden möchten, können Sie den integrierten CLI-Befehl verwenden:
$ bin/plugin tntsearch indexDadurch werden alle Ihre Seiten gescannt und den Inhalt indiziert. Sie sollten eine solche Ausgabe sehen:
Re-indexing Search
Added 1 /
Added 2 /blog/classic-modern-architecture
Added 3 /blog/daring-fireball-link
Added 4 /blog/focus-and-blur
Added 5 /blog/just-some-text-today
Added 6 /blog/london-industry
Added 7 /blog/random-thoughts
Added 8 /blog/sunshine-in-the-hills
Added 9 /blog/the-urban-jungle
Total rows 9
Done.Dies zeigt eine erfolgreiche Indexierung Ihrer Inhalte an.
Wenn Sie das Administrator -Plugin verwenden, können Sie Ihren Inhalt direkt über das Plugin indexieren. TNTSearch fügt ein neues Schnell-Tray -Symbol hinzu, mit dem Sie einen neuen Index erstellen oder alle Ihre Inhalte schnell und bequem mit einem einzigen Klick neu indeminieren.

Alternativ können Sie zum Abschnitt "TNTSEARCH -Konfiguration" navigieren und auf die Schaltfläche Index Content klicken:

HINWEIS: Diese Seite, die ein
redirect-Seiten -Header -Attribut verwendet, wird während der Indexierung übersprungen.
Sie können eine Seite, die im Indexfilter befindet, explizit überspringen, indem Sie diesen YAML dem Seitenkopf hinzuzufügen:
tntsearch:
index: false
Mit der neuen 3.0 -Version von TNTSearch wurde die Unterstützung für mehrere Sprachen hinzugefügt (Grav 1.6 erforderlich). Innen bedeutet dies, dass der Index als user:://data/tntsearch/grav.index speichern, mehrere Indizes pro Sprache erstellt wurden, die in Grav konfiguriert sind. Wenn Sie beispielsweise die unterstützten Sprachen auf ['en', 'fr', 'de'] festgelegt haben, erhalten Sie, wenn Sie einen Index ausführen, drei Dateien erhalten: en.index , fr.index und de.index . Bei der Abfrage der entsprechenden aktiven Sprache bestimmt, welcher Index abgefragt wird. Wenn Sie beispielsweise die Suche auf einer Seite namens /fr/search durchführen, wird die Verwendung der fr.index -Datenbank verwendet und die französischen Ergebnisse zurückgegeben.
Hinweis auf die Indizierung dauert länger, abhängig von der Anzahl der Sprachen, die Sie unterstützen, da TNTSEARSE jede Seite in jeder Sprache indexieren muss.
HINWEIS: Während in dieser Version akzentuierte Zeichen unterstützt werden, gibt es derzeit keine Unterstützung in der zugrunde liegenden TNTSearch-Bibliothek, die nicht akzentuierte Zeichen für Akzent-Zeichen entspricht, sodass genaue Übereinstimmungen erforderlich sind.
Eines der großartigen neuen Merkmale von Grav 1.6 ist der eingebaute Scheduler , mit dem Plugin-bereitgestellte Funktionen regelmäßig ausgeführt werden können. TNTSearch ist ein großer Anwendungsfall für diese Fähigkeit, da ein Indizierungsjob alle paar Stunden ausgeführt werden kann, ohne dass die Dinge manuell synchronisiert werden müssen. Es gibt einige Optionen, mit denen Sie diese Fähigkeit konfigurieren können.
Beachten Sie zunächst, dass diese Scheduler -Funktionalität standardmäßig deaktiviert ist, sodass Sie zunächst die Scheduler -Funktionalität in den TNTSearch -Plugin -Einstellungen aktivieren müssen. Danach können Sie konfigurieren, wie oft der Indexierungsjob ausgeführt wird. Der Standard ist alle 3 Stunden. Zuletzt können Sie konfigurieren, wohin eine Indexierungsausgabe angemeldet ist.
Sobald Sie einen Index haben, verwenden TNTSearch Admin -Ereignisse, um die Einträge für die PDATE und D Elete -Index bei der Bearbeitung von Seiten zu ermitteln . Wenn Ihr Index jemals so aussieht, als wäre er nicht synchronisiert, können Sie Ihre gesamte Website einfach wieder in der Lage sein.
Standardmäßig indexieren das TNTSearch -Plugin den title und content Ihrer Seite. Dies reicht in der Regel für die meisten Fälle aus, aber es gibt Situationen, in denen Sie möglicherweise mehr Felder indexieren möchten. Das Plugin bietet ein Beispiel dafür, indem Sie sich das onTNTSearchIndex -Ereignis anhören:
public static function getSubscribedEvents ()
{
return [
' onTNTSearchIndex ' => [ ' onTNTSearchIndex ' , 0 ]
];
}
public function onTNTSearchIndex ( Event $ e )
{
$ fields = $ e [ ' fields ' ];
$ page = $ e [ ' page ' ];
if ( isset ( $ page -> header ()-> author )) {
$ fields -> author = $ page -> header ()-> author ;
}
}Auf diese Weise können Sie einen Autor zu den indizierten Feldern hinzufügen, wenn er in der Seite FrontMatter festgelegt ist. Sie können Ihre eigenen benutzerdefinierten Felder mit einem sehr einfachen Plugin hinzufügen, das dieses Ereignis hört.
Das TNTSearch -Plugin verwendet im Allgemeinen den gerenderten Inhalt, um mit zu indexieren. Es gibt jedoch Situationen, in denen Ihre Seite tatsächlich eine modulare Seite ist oder auf anderen Seiten erstellt wurde, in denen es keinen tatsächlichen Inhalt auf der Seite gibt oder der Inhalt nicht für die gesamte Seite repräsentativ ist. Um diese Situation zu bekämpfen, können Sie benutzerdefinierte Vorlagen in Ihrem Thema bereitstellen, mit dem TNTSearch den Inhalt vor der Indexierung rendern kann.
Angenommen, wir haben eine Homepage, die aus ein paar modularen Unterteilen mit einem kleinen Inhalt darunter erstellt wurde. Sie heißt home.md und verwendet also eine home.html.twig Datei in templates/ den Ordner Ihres Themas. Sie können eine vereinfachte Version dieser Vorlage erstellen und sie als templates/tntsearch/home.html.twig speichern. In diesem Beispiel sieht diese Vorlage so aus:
{% for module in page. collection () %}
< p >
{{ module . content | raw }}
</ p >
{% endfor %}
{{ page . content | raw }}Wie Sie sehen können, wird einfach sichergestellt, dass die in der Sammlung der Seite definierten Modulseiten angezeigt werden, und dann wird der tatsächliche Seiteninhalt angezeigt.
Um TNTSearch zu unterweisen, mit dieser Vorlage zu indexieren, anstatt nur den Seiteninhalt selbst zu verwenden, müssen Sie nur einen Eintrag in die home.md hinzufügen.
tntsearch :
template : ' tntsearch/home ' Das TNTSearch-Plugin für Grav wird mit einer integrierten Abfrageseite geliefert, auf die standardmäßig über die Route /search zugegriffen werden kann. Diese Suchseite ist ein einfaches Eingabefeld, auf dem eine AJAX-Abfrage nach dem Typ ausführt. Da TNTSearch so schnell ist, erhalten Sie eine Echtzeit-Suchantwort ähnlich wie eine Google-Suche. Auch die Ergebnisse werden bereits zurückgegeben, um die Anpassungsbegriffe zu erzielen.
Sie können auch die Suche mit der CLI testen:
$ bin/plugin tntsearch query ipsum
{
"number_of_hits" : 3 ,
"execution_time" : " 2.101 ms " ,
"hits" : [
{
"link" : " / blog / classic-modern-architecture " ,
"title" : " Classic Modern Architecture " ,
"content" : " ...sed a odio. Curabitur ut lectus tortor. Sed <em>ipsum< / em> eros, egestas ut eleifend non, elementum vitae eros. Mauris felis diam, pellentesque vel lacinia ac, dictum a nunc. n Lorem <em>ipsum< / em> dolor sit amet, consectetur adipiscing elit. Donec ultricies tristique nulla et mattis. Phasellus id massa eget... "
},
{
"link" : " / blog / focus-and-blur " ,
"title" : " Focus and Blur " ,
"content" : " ...sed a odio. Curabitur ut lectus tortor. Sed <em>ipsum< / em> eros, egestas ut eleifend non, elementum vitae eros. Mauris felis diam, pellentesque vel lacinia ac, dictum a nunc. n Lorem <em>ipsum< / em> dolor sit amet, consectetur adipiscing elit. Donec ultricies tristique nulla et mattis. Phasellus id massa eget... "
},
{
"link" : " / blog / london-industry " ,
"title" : " London Industry at Night " ,
"content" : " ...sed a odio. Curabitur ut lectus tortor. Sed <em>ipsum< / em> eros, egestas ut eleifend non, elementum vitae eros. Mauris felis diam, pellentesque vel lacinia ac, dictum a nunc. n Lorem <em>ipsum< / em> dolor sit amet, consectetur adipiscing elit. Donec ultricies tristique nulla et mattis. Phasellus id massa eget... "
}
]
} Wenn eine physische Grav -Seite für die /search gefunden wird, verwendet TNTSEARSE diese und nicht die vom Plugin bereitgestellte Seite. Auf diese Weise können Sie Ihre Suchseite problemlos nach Bedarf Inhalte hinzufügen. Wenn Sie die tatsächliche HTML -Ausgabe anpassen möchten, kopieren Sie einfach die templates/search.html.twig vom Plugin an Ihr Thema und passen Sie es an.
Das tatsächliche Eingabefeld kann auch nach Bedarf durch Kopieren und Bearbeiten der templates/partials/tntsearch.html.twig -Datei zu Ihrem Thema geändert werden und ändern.
Standardmäßig wird das TNTSearch -Plugin für Grav, die Antwort JSON, mit der folgenden Struktur gesendet:
{
"number_of_hits" : 3 ,
"execution_time" : " 1.000 ms " ,
"hits" : [
{
"link" : " /page-a " ,
"title" : " Title A " ,
"content" : " highlighted-summary "
},
{
"link" : " /page-b " ,
"title" : " Title B " ,
"content" : " highlighted-summary "
},
{
"link" : " /page-c " ,
"title" : " Title C " ,
"content" : " highlighted-summary "
}
]
}Es gibt Fälle, in denen diese Ausgabe nicht wünschenswert ist oder geändert werden muss. TNTSearch bietet tatsächlich ein Plugin -Ereignis, mit dem Sie dieses Format manipulieren können. Ein Beispiel hierfür ist unten zu sehen:
public static function getSubscribedEvents () {
return [
' onTNTSearchQuery ' => [ ' onTNTSearchQuery ' , 1000 ],
];
}
public function onTNTSearchQuery ( Event $ e )
{
$ query = $ this -> grav [ ' uri ' ]-> param ( ' q ' );
if ( $ query ) {
$ page = $ e [ ' page ' ];
$ query = $ e [ ' query ' ];
$ options = $ e [ ' options ' ];
$ fields = $ e [ ' fields ' ];
$ fields -> results [] = $ page -> route ();
$ e -> stopPropagation ();
}
} Die wichtigsten Dinge zu beachten sind der 1000 Bestellwert, um sicherzustellen, dass dieses Ereignis vor dem Standard-Ereignis in der Plugin-Datei tntsearch.php ausgeführt wird. Die tatsächliche Ereignismethode legt einfach ein Ergebnisarray auf Feldern mit einer Route fest, was zu:
{
"number_of_hits" : 3 ,
"execution_time" : " 1.000 ms " ,
"results" : [ '/page-a', '/page-b', '/page-c' ]
} Das TNTSearch-Plugin kann auch verwendet werden, um die Suche eher als Dropdown als in einer Standardseite zu rendern. Dazu müssen Sie die Suche partiell embed und sie überschreiben, um Ihren Anforderungen zu entsprechen. Sie können dies einfach zu Ihrem Thema hinzufügen, wo immer Sie ein AJAX-Dropdown-Suchfeld haben möchten:
{% embed ' partials/tntsearch.html.twig ' with { limit : 10 , snippet : 150 , min : 3 , search_type : ' auto ' , dropdown : true } %}{% endembed %} Hier betten wir den Standard -Teil ein, überschreiben jedoch die options , indem wir sie in die with -Erklärung übergeben. Es ist wichtig zu bemerken, dass der dropdown: true festgelegt werden muss, um als Dropdown zu interpretieren.
Dieses Plugin wäre ohne die erstaunliche TNTSearch -Bibliothek für PHP nicht möglich gewesen. Stellen Sie sicher, dass Sie dieses Projekt auf GitHub spielen .