Movable Type で高速検索を実現する Fast Search プラグイン
ダイナミック・パブリッシングを利用して Movable Type の高速検索を実現する Fast Search プラグインを紹介します。
このプラグインは、3.2x および 3.3x の検索結果テンプレートで利用している MT タグを php で利用可能にしたもので、テキスト検索、3.3x ではタグ検索も可能になっています。実験した感想としては検索レスポンスが数倍向上します。
なおプラグイン適用条件として、下記を満たしている必要があります。
- Movable Type 3.2 or 3.3
- MySQL 4.0.1 以上
1.プラグインのダウンロード
下記のサイトにある「Dowmload Now」のリンクをクリックして、プラグインをダウンロード。非商用サイトは無償で寄付を受け付けています。商用サイトは $97.00 です。
2.プラグインのアップロード
まず解凍した時のディレクトリ構造は下の通りです。
/FastSearch
/php
/plugins
block.MTBlogResultFooter.php
:
modifier.google_highlight.php
/plugins
/FastSearch
/tmpl
fast_search.tmpl
widget_fast_search.tmpl
FastSearch.pl
/PluginNetwork
PluginNetwork.pl
これを次の通りにアップロードします。
- FastSearch/php/plugins 配下のファイルをインストールディレクトリの mt-dir/php/plugins に全てアップロード
- FastSearch/plugins をインストールディレクトリの mt-dir/plugins にフォルダごと全てアップロード。mt/plugins の下に FastSearch および PluginNetwork ディレクトリが配置されるようにしてください。
3.アップグレード
プラグインをアップロード後、管理ページにログインするとアップグレード画面が表示されます。
驚かずに粛々と作業を進めてください。
アップグレード完了後、管理ページに再度ログインします。
4.ダイナミックパブリッシングの設定
Fast Search プラグインを利用にするために、ダイナミックパブリッシングの設定を行います。ダイナミックパブリッシングをご利用でない(各ページをスタティックに出力している場合)、メインページや他のアーカイブページをダイナミックパブリッシングに変更する必要はありません。
ブログ別管理画面の[設定] - [公開]を選択し、「再構築オプション」を「テンプレート別に、スタティックHTMLもしくはダイナミック・パブリッシングを選択します」を選択します。これで「変更を保存」をクリックします。
この時、メインページのあるディレクトリにダイナミックパブリッシングを有効にするための .htaccess および templates_c ディレクトリが自動生成されます。
5.Fast Search 設定1(初期設定)
ブログ別管理画面の[設定] - [プラグイン]を選択し、一覧に表示されている「Fast Search」の右側にある「設定を表示」をクリックします。これで設定画面(下)が開きます。
まず「Enable Fast Search」をチェックしてプラグインを有効にしてください。
「Search Results Per Page」および「Enable Logging」の設定もこの時に同時に設定することができます。
設定後、「変更を保存」をクリックします。
6.Fast Search 設定2(検索結果表示用テンプレート生成)
再度、 プラグイン一覧に表示されている「Fast Search」の右側にある「設定を表示」をクリックします。そして「Click here to install the default Fast Search Template.」のリンクをクリックしてください。
これで Fast Search 検索結果表示用の特殊なインデックステンプレートが生成され、その画面に遷移します(すでに保存されているので「保存」をクリックする必要はありません)。
また前段の作業でダイナミックパブリッシングの設定をしているので、再構築オプション自動的に「このテンプレートをダイナミック・ページにする」にチェックがつきます。もし後からダイナミックパブリッシングの設定を行なった場合は、このテンプレートに対しダイナミックパブリッシングで動作する設定(=チェックボックスのチェック)を行なってください。
これがプラグインで用意されている検索結果画面テンプレートですが、3.3x の検索結果画面デフォルトテンプレート、あるいは当サイトで配布している検索結果画面テンプレートに丸ごと入れ替えても正常に動作します。
7.Fast Search 設定3(検索フォーム)
Fast Search 用のフォームは、既存の
<form method="post" action="<$MTCGIPath$><$MTSearchScript$>"
を
<form method="post" action="<$MTBlogURL><$MTFastSearchScript>"
に変更すればOKです。
またはプラグインから Widget を生成することもできます。その場合は先のプラグイン設定画面にある、「Click here to install the Fast Search Widget.」のリンクをクリックします。これでテンプレートモジュールとしての検索フォーム「Widget: Fast Search」が生成されます。
このテンプレートモジュールを Widget ではなく、MTInclude タグで引き込むこともできます。その場合は検索フォームを表示させたいテンプレートのサイドバー部分に下記の1行を追加します。
<$MTInclude module="Widget: Fast Search"$>
8.Fast Search 設定4(FastSearch Method)
プラグインの設定画面で、もうひとつ「FastSearch Method」というプルダウンメニューの選択による設定項目があり、それぞれ下記のような意味があります。
- FullText:MySQLに標準搭載されている全文検索インデックス
- Non-FullText:上記以外
- Fallback:FullText を試行し、NGであれば Non-FullText で実行
FullText が一番良さそうなのですが、環境によってはエラーが発生します(実験サイトで試したところ、正常に動作する時とそうでない時がありました)。
調べてみたところ、FullText での日本語の全文検索については制約があるようです(詳細は9項の関連記事参照)。また Fallback では FullText を試みますが、失敗した場合は FullText のエラーが画面に表示されてしまうので、FullText を選択してエラーが解消しない場合は Non-FullText を選択するのが無難でしょう(FullText の適切な設定方法があればご教示ください)。
これで Fast Search の検索フォームより検索を実行し、検索結果が正常に表示されれば完了です。
9.ダイナミック・パブリッシングのチューニング
これで検索処理は高速になりますが、Movable Type デフォルトの検索機能の「連続実行抑止時間」の設定はありません。その結果サーバへの負荷拡大が予想されます。モジュール版PHPであればまだ良いのですがCGI版PHPの場合はプログラム実行とみなされます(参考:PHP における「モジュール版」と「CGI 版」の比較 + WordPress の適用例)。
したがって、「Movable Type の再構築を不要にする「ダイナミック・パブリッシング」(その2:設定方法)」の3項で解説しているように、ページレベルのキャッシングや条件付きGETの設定し、サーバの負荷を少しでも軽減することをお勧めします。
なおタグ検索は有効と思われますが、テキスト検索では検索文字列が不定なため、どれほどの効果があるかは分かりません。
10.関連記事
- 亜細亜ノ蛾 - Weblog:MT の高速検索プラグイン「Fast Search」
- たたみラボ:MySQLで全文検索 - FULLTEXTインデックスの基礎知識
- Movable Type 3.3 マニュアル:ダイナミック・パブリッシング
- Movable Type検索でURL改ざんによるブログ検索をできないようにする方法
- Movable Typeの検索オプション徹底解説
- Movable Type 5.1の検索で「blog_idパラメータが不正です。」となる不具合の対処
- Movable Type 5.1の検索で検索結果テンプレートを指定する方法
- Movabel Type の検索結果フィードを利用する
- Movable Type検索結果のブログ記事タイトルからアーカイブページへリンクする方法
- Movable Type で複数ブログを検索する
- タグ検索を絞り込む(その2:カスタマイズ)
- タグ検索を絞り込む(その1)
- Movable Type 検索の全角スペースを半角スペースと同じ振る舞いにする(MT4版)
- Movable Type 4.2 検索結果ページのカスタマイズ:ページナビゲーションをプルダウンメニューにする
- Movable Type 4.2 検索結果ページのカスタマイズ:ナビゲーションを検索結果の上下に表示する
- Movable Type 4.2 検索結果ページのカスタマイズ:検索結果が1ページだけのときに「1」という表示をなくす
- Movable Type 4.2 検索結果ページのカスタマイズ:検索結果の見出しに(現在のページ/総ページ数)を表示する
- Movable Type 4.2 検索結果ページのカスタマイズ:1ページに表示する件数を変更する
御世話になります。
このFast SearchとともにMT3.3でチェックボックス検索を行いたいのですが
可能でしょうか?
例えば
value="a" value="b" のand検索になります。
宜しくお願いいたします。
>やまちゃんさん
こんにちは。
ご返事遅くなって申し訳ありません。
ご質問の件ですが、「Fast Search 検索とデフォルト検索(のチェックボックス検索)を併用したい」または「Fast Search 検索で、さらにチェックボックス検索を行いたい」のどちらでしょうか。前者であれば可能ですが、後者はサポートされていないかもしれません。
それではよろしくお願い致します。
突然すみません。
Fast Searchを導入して適当に文字を入れて検索を行うと、
テンプレート「Fast Search」の再構築に失敗しました: <MTEntryPermalink>タグでエラーが発生しました: MTEntryLinkタグが、エントリーのコンテキスト外で使われた可能性があります。コンテナの外に誤って記述していませんか?
というような感じでビルドエラーが出てしまいます。
どのように対処すればよろしいでしょうか?
よろしくお願いします。
>あqさん
こんにちは。
ご返事遅くなりすいません。
ご質問の件ですが、まずは表示されているエラーのようになっていないか(=テンプレート「Fast Search」で、MTEntryLinkまたはMTEntryPermalinkがMTEntriesの外に記述されていないか、等)ご確認ください。
それではよろしくお願い致します。