Hyper Estraierの「文書ドラフト」をMTから生成して検索する。
公開日 : 2007-01-31 20:09:02
以前のエントリー「mt-search.cgiの代替プログラム。」で書いたように、mt-search.cgiは速度面や負荷に難があるので代替プログラムを書いてみた。ずいぶんマシになったとは思うがまだまだ遅い。
ということで MovableType にHyper Estraierの「文書ドラフト」を出力するテンプレートを追加してそれに対してインデックス作成→検索を行い、精度が高く高速な検索を実現できたのでメモ。
ポイントは「文書ドラフト」をエントリーアーカイブのHTMLとは別に生成すること。
生成されたHTMLをそのまま検索すると、ナビゲーション等の不要な「ゴミ」を検索にひっかけてしまい、検索精度が下がる。「文書ドラフト」に必要な情報のみを出力することで検索精度をあげることができる。
まず、Hyper Estraierをインストール。
MovableTypeに以下のようなエントリーアーカイブのテンプレートを追加する。
@uri=<$MTEntryPermalink$> @title=<$MTEntryTitle remove_html="1"$> @cdate=<$MTEntryDate format="%Y-%m-%dT%H:%M:%S"$>+09:00 @mdate=<$MTEntryModifiedDate format="%Y-%m-%dT%H:%M:%S"$>+09:00 category=<$MTEntryCategory$> categoryUrl=<$MTEntryLink archive_type="Category"$> <$MTEntryTitle remove_html="1"$> <$MTEntryBody remove_html="1"$> <$MTEntryMore remove_html="1"$> <$MTEntryKeywords remove_html="1"$>
※この場合画像のAlt属性等が検索出来ないので、そのあたりは別途プラグインを書く予定。
「設定」→「公開」→「アーカイブ・マッピング」→「マッピングを新規作成」
テンプレート:「エントリーアーカイブ」を選択
draft/%y_%m_%b.est
とする。
再構築後、文書ドラフトが生成されたdraftフォルダに対してインデックスを作成する。
estcmd gather -il ja-sdcasket /home/junnama/public_html/online/draft
あとはestseek.cgiを使っても良いし「言語バインディング」が公開されているのでオリジナルのプログラムを作成することも可能。
今回はPHPからestcmdをshell_execで叩いてxmlで結果を受取ってからそいつを整形して出力するようにした。
あわせてPHPから読み込むテンプレートを「検索用テンプレート」としてこちらもMovableTypeに登録しておくと再構築の際に「最近のエントリー」とかそのあたりが反映されるようになる。