TNTSearchプラグインはGrav CMS用です。高速AJAXベースのグラビングコンテンツ検索を提供するTNTSearchライブラリを搭載した強力なインデックスベースのフルテキスト検索エンジン。このプラグインは、任意のコンテンツデータのインデックスとカスタムTwigテンプレートのインデックスを可能にする非常に柔軟性があり、モジュラーおよびその他の動的ページタイプをインデックスする機会を提供します。 TNTSearchは、CLIおよび管理ベースの管理と再インデックス、および組み込みのAJAX駆動のフロントエンド検索ツールを提供します。
注:TNTSearchバージョン3.0.0は、以前のバージョンでは利用できない新しい機能を使用するため、機能するためにGrav 1.6.0以下を必要とするようになりました。

TNT検索プラグインのインストールは、2つの方法のいずれかで実行できます。 GPM(Grav Package Manager)インストールメソッドを使用すると、シンプルな端末コマンドを使用してプラグインをすばやく簡単にインストールできますが、手動メソッドではzipファイルを介して行うことができます。
このプラグインをインストールする最も簡単な方法は、システムの端末(コマンドラインとも呼ばれます)を介してGrav Package Manager(GPM)を介してです。グラブのルートからインストールタイプ:
bin/gpm install tntsearch
これにより、TNT検索プラグインがGrav内の/user/pluginsディレクトリにインストールされます。そのファイルは/your/site/grav/user/plugins/tntsearchの下にあります。
標準のグラビング要件以外に、このプラグインにはいくつかの追加要件があります。検索エンジンの複雑な性質により、TNTSearchはフラットファイルデータベースを使用して、ワードリストとコンテンツのマッピングを保存します。これはプラグインによって自動的に処理されますが、サーバーに次のインストールをインストールしていることを確認する必要があります。
| PHPにはPDOが付属しており、Linuxベースのシステムの大部分にはすでにSQLiteが付属しています。
SQLiteは実際にMacにプリインストールされていますが、HomeBrewを使用して最新バージョンにアップグレードできます。
HomeBrewをインストールします
$ /usr/bin/ruby -e " $( curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install ) "SQLiteをHomeBrewにインストールします
$ brew install sqliteSQLiteダウンロードページからSQLiteの適切なバージョンをダウンロードします。
ダウンロードしたzipファイルを抽出し、 sqlite3.exe実行可能ファイルを実行します。
このプラグインを構成する前に、 user/plugins/tntsearch/tntsearch.yamlをuser/config/plugins/tntsearch.yamlにコピーし、そのコピーのみを編集する必要があります。
デフォルトの構成と利用可能なオプションの説明は次のとおりです。
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 構成オプションは次のとおりです。
enabled - プラグインを即座に有効または無効にしますsearch_routeビルトイン検索ページに使用されるルートquery_route検索フォームが検索エンジンを照会するために使用するルートbuilt_in_css内蔵のCSSスタイリングを有効または無効にしますbuilt_in_js内蔵JavaScriptを有効または無効にしますbuilt_in_search_page内蔵の検索ページを有効または無効にしますenable_admin_page_events -in on-save発生するページイベントを有効または無効にして、インデックスのページを追加/更新/削除しますsearch_typeこれらのタイプの1つにすることができます。basic - 標準文字列マッチングboolean - サポートor minus 。たとえば、 foo -barauto basic使用するかbooleanを使用するかを自動的に検出しますfuzzy - 単語が「近い」が必ずしも正確な一致ではない場合に一致しますdistance - ファジー検索のlevenshtein距離。検索キーワードに一致するように、変更、削除、または追加する必要がある文字の量をワードで表します。距離を増やすと、より多くの検索結果が生成されますが、検索の精度が低下します。phrases - フレーズのサポートを自動的に処理しますstemmerこれらのタイプの1つになることができます:no - ステムマーなしarabic - アラビア語croatian - クロアチア語german - ドイツ語italian - イタリア語porter - 英語のためのポーターステムマーportuguese - ポルトガル語russian - ロシア語ukrainian - ウクライナ語display_route検索結果にルートを表示しますdisplay_hits検索結果にヒット数を表示するdisplay_time検索結果に実行時間を表示するlive_uri_update built_in_jsが有効になっている場合、 search_routeページのURIバーをライブ更新limit - 表示される結果の最大量min検索を実行する前にタイプされた文字のミニナム量snippet - 結果項目をプレビューするための文字の量index_page_by_default -frontmatter Overridesがない限り、すべてのページをデフォルトでインデックス作成する必要がありますscheduled_index新しいスケジュールされたインデックスジョブ。デフォルトで無効になっている場合、有効になった場合、デフォルトは3時間ごとに実行され、結果の結果はlogs/tntsearch-index.outに出力されます。filter - コレクションクエリを介してインデックスを作成するために特定のページを選択できるページコレクションフィルターpowered_byパワーごとのtntsearchテキストを表示しますsearch_object_typeカスタムクラスがデフォルトのグラブページサポートをオーバーライドできるようにします。これにより、データ型の完全にカスタム検索機能が可能になります。 TNTSearchは、検索クエリを作成する前に、SQLiteインデックスデータベースにインデックス付けされているコンテンツに依存しています。これは、ElasticSearch、Solr、Luceneなどの他の検索エンジンと非常に似ていますが、比較的単純に単純にPHP検索エンジンライブラリTNTSearchライブラリを使用して、セットアップがほとんどなく手間がかからずにこれを実現します。
プラグインをインストールした後の最初のステップは、コンテンツをインデックス化することです。これを達成する方法はいくつかあります。
まず、CLIにアクセスできる場合、またはAdminプラグインを使用しないことを選択した場合は、組み込みのCLIコマンドを使用できます。
$ bin/plugin tntsearch indexこれにより、すべてのページをスキャンしてコンテンツにインデックスを付けます。このような出力が表示されるはずです。
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.これは、コンテンツのインデックス作成が成功したことを示しています。
管理者プラグインを使用している場合は、プラグインからコンテンツを直接インデックスすることができます。 TNTSearch新しいクイックトレイアイコンを追加して、新しいインデックスを作成したり、1回のクリックですべてのコンテンツをすばやく便利に再インドします。

または、TNTSearch構成セクションに移動して、 Index Contentボタンをクリックします。

注:
redirectページヘッダー属性を使用するページは、インデックス作成中にスキップされることです。
このYAMLをページヘッダーに追加することにより、インデックスフィルターにあるページを明示的にスキップできます。
tntsearch:
index: false
TNTSearchの新しい3.0バージョンでは、複数の言語のサポートが追加されています(Grav 1.6が必要)。内部的には、これはむしろインデックスをuser:://data/tntsearch/grav.indexでは、グレイブで構成された言語ごとに複数のインデックスが作成されることを意味します。たとえば、サポートされている言語を['en', 'fr', 'de']に設定した場合、インデックスを実行すると、 en.index 、 fr.index 、およびde.index 3つのファイルが取得されます。適切なアクティブ言語を照会すると、どのインデックスがクエリされているかが決まります。たとえば、 /fr/searchというページで検索を実行すると、 fr.indexデータベースが使用され、フランスの結果が返されます。
TNTSearchが各言語の各ページをインデックスする必要があるため、サポートする言語の数に応じて、メモのインデックス作成は時間がかかります。
注:このリリースではアクセント付きキャラクターがサポートされていますが、現在、基礎となるTNTSearchライブラリにはアクセントのないキャラクターをアクセントのある文字に合わせることはサポートされていないため、正確な一致が必要です。
Grav 1.6の優れた新機能の1つは、プラグインが提供する機能を定期的に実行できるようにするスケジューラ内に組み込まれています。 TNTSearchは、この機能を手動で同期させる必要なく、インデックス作成ジョブを数時間ごとに実行できるようにするため、この機能のための優れたユースケースです。この機能を構成できるオプションがいくつかあります。
最初に、このスケジューラ機能はデフォルトで無効になるため、最初にTNTSearchプラグイン設定でスケジューラ機能を有効にする必要があることに注意してください。その後、インデックス作成ジョブが実行される頻度を構成できます。デフォルトは3時間ごとです。最後に、任意のインデックス出力がログに記録される場所を構成できます。
インデックスが得られると、TNTSearchは、ページを編集するときに、 C Reate、 U Pdate、およびD ELETEインデックスエントリへの管理イベントを使用します。インデックスが同期していないように見える場合は、サイト全体を単純に再インネックスできます。
デフォルトでは、TNTSearchプラグインはページのtitleとcontentにインデックスを付けます。これは通常、ほとんどの場合に十分ですが、より多くのフィールドにインデックスを付けたい状況があります。プラグインは、 onTNTSearchIndexイベントを聴くことで、この例を提供します。
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 ;
}
}これにより、Page FrontMatterに設定されている場合、インデックス化されたフィールドに著者を追加できます。このイベントに耳を傾ける非常にシンプルなプラグインを使用して、独自のカスタムフィールドを追加できます。
TNTSearchプラグインは通常、レンダリングされたコンテンツを使用してインデックスを付けます。ただし、ページが実際にモジュラーページであるか、ページに実際のコンテンツがない他のページから構築されている場合、またはコンテンツがページ全体を表すものではない状況があります。この状況に対処するために、TNTSearchがインデックス作成前にコンテンツをレンダリングするために使用できるテーマにカスタムテンプレートを提供できます。
たとえば、その下に小さなコンテンツがあるいくつかのモジュール式サブページから構築されたホームページがあり、 home.mdと呼ばれるため、テーマのtemplates/フォルダーにhome.html.twigファイルを使用します。このテンプレートの簡素化されたバージョンを作成し、 templates/tntsearch/home.html.twigとして保存できます。この例では、このテンプレートは次のようになります。
{% for module in page. collection () %}
< p >
{{ module . content | raw }}
</ p >
{% endfor %}
{{ page . content | raw }}これを見ることができるように、ページのコレクションで定義されているモジュールページが表示されることを保証するだけで、実際のページコンテンツが表示されます。
ページコンテンツを単独で使用するのではなく、このテンプレートでインデックスを作成するようにTNTSearchに指示するには、home.md frontmatter: home.mdにエントリを追加する必要があります。
tntsearch :
template : ' tntsearch/home 'TNTSearch Plugin for Gravには、デフォルトで/searchルートを介してアクセスできる内蔵クエリページが付属しています。この検索ページは、You-YouタイプのAjaxクエリを実行する単純な入力フィールドです。 TNTSearchは非常に高速であるため、Google検索と同様の方法でリアルタイムの検索応答が得られます。また、結果は、一致する条件についてすでに強調表示されています。
CLIで検索をテストすることもできます。
$ 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... "
}
]
}/searchルートの物理グラブページが見つかった場合、TNTSearchはプラグインで提供されるページではなく、それを使用します。これにより、必要に応じて検索ページにコンテンツを簡単に追加できます。実際のHTML出力をカスタマイズする場合は、プラグインからテーマにテーマからtemplates/search.html.twigテーマにコピーしてカスタマイズするだけです。
実際の入力フィールドはtemplates/partials/tntsearch.html.twigファイルをテーマにコピーして編集して修正することで、必要に応じて変更することもできます。
デフォルトでは、TNTSearchプラグインのGravのプラグイン、JSONは次の構造で送信されます。
{
"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 "
}
]
}この出力が望ましくない、または変更する必要がある場合があります。 TNTSearchは、実際にこの形式を操作できるプラグインイベントを提供します。この例を以下に示します。
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 ();
}
}注意すべき重要なことは、 tntsearch.phpプラグインファイルのデフォルトイベントの前にこのイベントが実行されることを確認するための1000注文値です。実際のイベントメソッドは、ルートを使用してフィールドに結果配列を設定するだけで、次の結果が得られます。
{
"number_of_hits" : 3 ,
"execution_time" : " 1.000 ms " ,
"results" : [ '/page-a', '/page-b', '/page-c' ]
}TNTSearchプラグインを使用して、標準ページではなくドロップダウンとして検索をレンダリングすることもできます。これを行うには、検索を部分的にembed 、ニーズに合わせてオーバーライドする必要があります。 Ajaxドロップダウン検索ボックスを持ちたい場合は、これをテーマに追加できます。
{% embed ' partials/tntsearch.html.twig ' with { limit : 10 , snippet : 150 , min : 3 , search_type : ' auto ' , dropdown : true } %}{% endembed %}ここでは、デフォルトの部分的な部分を埋め込みましたが、 withでそれらを渡してoptionsを上書きします。 dropdown: trueドロップダウンと解釈するために設定する必要があることに注意することが重要です。
このプラグインは、PHP用の驚くべきTNTSearchライブラリなしでは不可能でした。 Githubでそのプロジェクトに出演していることを確認してください。