Movable Type で高速検索を実現する Fast Search プラグイン

Movable Type で高速検索を実現する Fast Search プラグイン

Posted at April 6,2007 2:02 AM
Tag:[Customize, DynamicPublishing, MovableType, Plugin, 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 です。

MT-HACKSFast Search - PHP Fulltext Search Plugin

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.アップグレード

プラグインをアップロード後、管理ページにログインするとアップグレード画面が表示されます。

FastSearch 設定画面

驚かずに粛々と作業を進めてください。

FastSearch 設定画面

アップグレード完了後、管理ページに再度ログインします。

4.ダイナミックパブリッシングの設定

Fast Search プラグインを利用にするために、ダイナミックパブリッシングの設定を行います。ダイナミックパブリッシングをご利用でない(各ページをスタティックに出力している場合)、メインページや他のアーカイブページをダイナミックパブリッシングに変更する必要はありません。

ブログ別管理画面の[設定] - [公開]を選択し、「再構築オプション」を「テンプレート別に、スタティックHTMLもしくはダイナミック・パブリッシングを選択します」を選択します。これで「変更を保存」をクリックします。
この時、メインページのあるディレクトリにダイナミックパブリッシングを有効にするための .htaccess および templates_c ディレクトリが自動生成されます。

5.Fast Search 設定1(初期設定)

ブログ別管理画面の[設定] - [プラグイン]を選択し、一覧に表示されている「Fast Search」の右側にある「設定を表示」をクリックします。これで設定画面(下)が開きます。

FastSearch 設定画面

まず「Enable 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.」のリンクをクリックしてください。

Click here to install the default Fast Search Template.

これで Fast Search 検索結果表示用の特殊なインデックステンプレートが生成され、その画面に遷移します(すでに保存されているので「保存」をクリックする必要はありません)。

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

このテンプレートモジュールを 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 で実行

FastSearch Method

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.関連記事

関連記事
トラックバックURL


コメント

御世話になります。
このFast SearchとともにMT3.3でチェックボックス検索を行いたいのですが
可能でしょうか?
例えば
value="a" value="b" のand検索になります。
宜しくお願いいたします。

[1] Posted by やまちゃん : April 18, 2007 3:38 AM

>やまちゃんさん
こんにちは。
ご返事遅くなって申し訳ありません。
ご質問の件ですが、「Fast Search 検索とデフォルト検索(のチェックボックス検索)を併用したい」または「Fast Search 検索で、さらにチェックボックス検索を行いたい」のどちらでしょうか。前者であれば可能ですが、後者はサポートされていないかもしれません。
それではよろしくお願い致します。

[2] Posted by yujiro : April 24, 2007 4:32 PM

突然すみません。
Fast Searchを導入して適当に文字を入れて検索を行うと、

テンプレート「Fast Search」の再構築に失敗しました: <MTEntryPermalink>タグでエラーが発生しました: MTEntryLinkタグが、エントリーのコンテキスト外で使われた可能性があります。コンテナの外に誤って記述していませんか?

というような感じでビルドエラーが出てしまいます。
どのように対処すればよろしいでしょうか?
よろしくお願いします。

[3] Posted by あq : July 14, 2007 10:15 AM

>あqさん
こんにちは。
ご返事遅くなりすいません。
ご質問の件ですが、まずは表示されているエラーのようになっていないか(=テンプレート「Fast Search」で、MTEntryLinkまたはMTEntryPermalinkがMTEntriesの外に記述されていないか、等)ご確認ください。
それではよろしくお願い致します。

[4] Posted by yujiro : July 20, 2007 11:39 AM
コメントする
greeting

*必須

*必須(非表示)


ご質問のコメントの回答については、内容あるいは多忙の場合、1週間以上かかる場合があります。また、すべてのご質問にはお答えできない可能性があります。予めご了承ください。

太字イタリックアンダーラインハイパーリンク引用
[サインインしない場合はここにCAPTCHAを表示します]

コメント投稿後にScript Errorや500エラーが表示された場合は、すぐに再送信せず、ブラウザの「戻る」ボタンで一旦エントリーのページに戻り(プレビュー画面で投稿した場合は、投稿内容をマウスコピーしてからエントリーのページに戻り)、ブラウザをリロードして投稿コメントが反映されていることを確認してください。

コメント欄に(X)HTMLタグやMTタグを記述される場合、「<」は「&lt;」、「>」は「&gt;」と入力してください。例えば「<$MTBlogURL$>」は「&lt;$MTBlogURL$&gt;」となります(全て半角文字)