⏸ 開発終了 - プロジェクトの引き継ぎが可能
残念ながら、私にはこのプラグインの開発を積極的にサポートするための時間とエネルギーが不足しています。当面はプラグインをそのままアーカイブします。カービィ3.6以降には対応していないので注意してください。もし誰かがこのプラグインを引き継いで開発を続けたいと思ったら、とても嬉しいです - 連絡してください。
このリポジトリをダウンロードして解凍し、 /site/plugins/search
にコピーします。
あるいは、composer を使用してインストールすることもできます。
composer require distantnative/search-for-kirby
使用するプロバイダーを決定します (利用可能なプロバイダーについては以下を参照してください)。また、Sqlite または Algolia プロバイダーを使用している場合は、最初の実行前にインデックス (下記も参照) を作成することを忘れないでください。
/site/plugins/search
フォルダーを新しいバージョンに置き換えます。重大な変更についてはリリース ノートを必ずお読みください。
または、composer 経由でプラグインをインストールした場合は、次を実行します。
composer update distantnative/search-for-kirby
このプラグインは、さまざまなエントリ ( pages
、 files
、 users
を組み合わせたグローバル検索を提供します。
(Kirby クエリ言語を使用して) インデックスのエントリとして含めるべきものを定義したり、 site/config/config.php
でタイプを完全に無効にしたりすることもできます。
' search ' => [
' entries ' => [
' pages ' => ' site.find("projects").index ' ,
' files ' => false ,
// users will remain the default
]
]
デフォルトでは、次のコレクションがインデックスに含まれます。
pages
site.index
files
site.index.files
users
kirby.users
config.php
ファイルで、ページ、ファイル、ユーザーのどのコンテンツ フィールドを検索に含めるかを定義できます。
' search ' => [
' fields ' => [
' pages ' => [
' title '
],
' files ' => [
' filename '
],
' users ' => [
' email ' ,
' name '
]
]
]
これらの配列のフィールドを定義するには、いくつかのオプションがあります。
// Simply add the field
' title ' ,
// Add the field, but run it through a field method first
' text ' => ' kirbytext ' ,
// Pass parameters to the field method
' text ' => [ ' short ' , 50 ],
// Use a callback function
' text ' => function ( $ model ) {
return strip_tags ( $ model -> text ()-> kt ());
}
// Turn string field value into number (e.g. for Algolia filters)
' myNumberField ' => function ( $ model ) {
return $ model -> myNumberField ()-> toFloat ();
}
' myVirtualNumberField ' => function ( $ model ) {
return $ model -> myNumberField ()-> toInt () + 5 ;
}
' myDate ' => function ( $ model ) {
return $ model -> anyDateField ()-> toTimestamp ();
}
config.php
ファイルで、検索にどのテンプレート (ユーザーの場合はロール) を含めるかを定義することもできます。
' search ' => [
' templates ' => [
' pages ' => function ( $ model ) {
return $ model -> id () !== ' home ' && $ model -> id () !== ' error ' ;
},
' files ' => null ,
' users ' => null
]
]
``
If the value is null or an empty array, all templates are allowed. If it is false, all templates are excluded. There are several other options:
```php
// simple whitelist array
[ ' project ' , ' note ' , ' album ' ]
// associative array
[
' project ' => true ,
' note ' => false
]
// callback function
function ( $ model ) {
return $ model -> intendedTemplate () !== ' secret ' ;
}
このプラグインは、デフォルトのパネル検索 (虫眼鏡アイコンから右上にアクセス) をグローバル検索モーダルに置き換えます。
このプラグインは、PHP API メソッドも置き換えます。このプラグインはグローバル検索を提供するため、最初に $site オブジェクトとともに使用するのが最適です。
$ site -> search ( ' query ' , $ options = []);
ただし、検索をより特定のコレクションに限定することもできます (パフォーマンスは多少低下します)。
$ page -> children ()-> listed ()-> filterBy ( ' template ' , ' project ' )-> search ( ' query ' , $ options = []);
このプラグインは、グローバルsearch()
ヘルパー関数も追加します。
search (string $ query , $ options = [], $ collection = null )
options 配列には、返される結果の数を指定する制限オプションを渡すことができます。さらに、演算子オプション ( AND
またはOR
) を指定して、複数の検索語を組み合わせるルールを指定できます。
collection ( ' notes ' )-> search ( $ query , [
' operator ' => ' AND ' ,
' limit ' => 100
]);
受け取る結果はKirbyCmsCollection
オブジェクトです。
このプラグインには 3 つの異なる検索プロバイダーがバンドルされています。サイト、ニーズ、設定によっては、これらのうちの 1 つが他のものよりも適している場合があります。
sqlite
(デフォルト)SQLite FTS5 拡張機能を使用してインデックス SQLite データベースを作成します (使用可能である必要があります)。
構成では、絶対パスを指定してデータベース ファイルの場所を再定義できます。デフォルトでは、データベース ファイルはsite/logs/search/index.sqlite
として作成されます。
// site/config/config.php
' search ' => [
' provider ' => ' sqlite ' ,
' sqlite ' => [
' file ' => dirname ( __DIR__ , 2 ) . ' /storage/search/index.sqlite '
]
]
ファジー オプションを使用すると、単語の先頭だけでなく単語の内部の内容も一致する検索が可能になります。コンテンツによっては、特に長いテキスト フィールドが含まれる場合、インデックス データベースのサイズが大幅に増加する可能性があります (指数関数的に考えてください)。曖昧にするフィールドのリストを定義することもできます。
// site/config/config.php
' search ' => [
' provider ' => ' sqlite ' ,
' sqlite ' => [
// Enabled for all fields
' fuzzy ' => true ,
// Disabled completely
' fuzzy ' => false ,
// Only for selected fields
' fuzzy ' => [
' pages ' => [ ' title ' ],
' files ' => [ ' caption ' , ' credits ' ]
],
]
]
カスタムの重みをいくつか定義して、特定のフィールドを他のフィールドよりも高くランク付けすることもできます。
// site/config/config.php
' search ' => [
' provider ' => ' sqlite ' ,
' sqlite ' => [
' weights ' => [
' title ' => 10 ,
' caption ' => 5
],
]
]
algolia
このプロバイダーを使用して、Algolia 検索を Kirby にシームレスに追加します。
// site/config/config.php
' search ' => [
' provider ' => ' algolia ' ,
' algolia ' => [
' app ' => . . . , // Algolia App ID
' key ' => . . . , // Algolia private admin key (not just read-only!)
' index ' => ' kirby ' // name of the index to use/create
' options ' => [] // options to pass to Algolia at search
]
]
初期インデックスを作成するために、プラグインはインデックスの構築をトリガーできる小さなパネル セクションをバンドルします。次のセクションをsite.yml
ブループリントなどに追加します。
sections :
search :
type : search
デフォルトでは、プラグインはフックを介して各イベント (ページの作成、ファイルのアップロード、コンテンツの更新など) で検索インデックスを必ず更新します。そのため、コンテンツを編集するたびに新しいインデックスを作成することを心配する必要はありません。
フックによる自動インデックス更新を無効にするには、次の行をsite/config/config.php
に追加します。
' search ' => [
' hooks ' => false
]
プラグインに含まれる./index
シェル スクリプトを使用して、コマンド ラインからインデックスを構築することもできます。これは、パネル セクションの代替として (特に非常に大きなインデックス ファイルの場合)、またはパネルを使用しないセットアップのフックを置き換えることができ、たとえば新しいコミットをデプロイするときや cron ジョブ経由でトリガーされます。
./site/plugins/search/bin/index
カスタム フォルダー セットアップを使用している場合は、そのスクリプトの修正バージョンを作成する必要があります。サポートが必要な場合は、ご連絡ください。
このプラグインは「現状のまま」提供され、保証はありません。自己責任で使用し、運用環境で使用する前に必ず自分でテストしてください。問題が発生した場合は、問題を作成してください。
インデックスを生成するときに、「ドライバーが見つかりません」というエラーが発生する場合があります。これはおそらく、サーバー設定に Sqlite 拡張機能が欠落していることを意味します。他のユーザーが次の拡張機能をアクティブ化することができました。
extension=sqlite3.so
extension=pdo_sqlite.so
このプラグインは完全に無料で、MIT ライセンスに基づいて公開されています。ただし、開発には時間と労力がかかります。商用プロジェクトで使用している場合、またはこのプラグインを存続させるために私をサポートしたい場合は、お好みの寄付を行ってください。