MovableTypeでの全文検索が気になって調べてみたらば、
こんな記事を見かけたので。

ホの字5 - 更新案内メモ - 超高速全文検索を作ってみた
MovableTypeの検索機能って、
検索結果が表示されるまでの速度が遅いっすよね。
まあ遅いっつっても30秒も待たないけど、早くはない。
原因はMovableTypeの構造とかサーバー構成とかいろいろ。

そこで最速インターフェース研究会で発見した
JavaScriptにBlogの全文検索をやらせてみるという記事を参考に
それをちょっぴり改造してサーバー上に乗っけてみました。
溝の口ランチログの超高速検索の実験(要JavaScript)
作ってみた検索用ページはこちら。


全文検索 - NOBODY:PLACE - MUTTER


直近のエントリ1000件の中から、任意のキーワードで検索することが出来ます。

本当は全エントリ(6000弱)にしたかったところなんだけど、
システムの仕様上、全データを書き出してデータファイルとしてまとめておき、
それをJavaScriptで検索してAjaxで表示するということをやっているので、
母数を大きくすると当然データファイルも大きくなり、ということは当然ロード時間も長くなるので…
(全エントリを書き出したら13Mのデータファイルになって、アクセスに30秒くらいかかるようになった)
仕方なく1000件で切り。
まぁ、テスト段階ってことで。

処理自体はほぼいじってなくて、ホの字5さんのスクリプトから変えたところは、
  • 表示結果数を10→30件に増やした
  • 検索の際に大文字小文字を区別しないようにした
  • そのほかデザイン面
といったところ。


使い勝手は、かなりいいね!
アホかって言うくらいあっさりと検索されます。
素晴らしい。



似たような処理で言うと、このあたりもほとんど同じ考え方かな?

暴想: ココログプロとかTypepadとかMTとかブログ人とかその他のブログサービスとかでもAjaxでバックナンバーを検索するJavaScript

パーツとしての体裁のまとめ方が上手。
まぁただ、検索欄を置きたい気分ではなかったので今回は見送り。
もし、きちんと検索欄をおいてやりたいとなったら考えるかも。
(検索欄方式は、ロードしながら処理できるという利点もあるんだよね。実は)



最後に、この検索ページを作るに当たって作成した、データ用インデックステンプレートでも貼っておきます。
キーワードは使ってないので、代わりにタグを格納しておきました。

var start = new Date().getTime();
var data = [{}
<MTEntries lastn="1000">
,{file:"<$MTEntryPermalink$>",title:"<$MTEntryTitle remove_html="1" encode_js="1"$>",time:"<$MTEntryDate format="%Y-%m-%dT%H:%M:%S+09:00"$>",body:"<$MTEntryBody remove_html="1" encode_js="1"$><$MTEntryMore remove_html="1" encode_js="1"$>",category:"<MTEntryCategories><$MTCategoryDescription remove_html="1" encode_js="1"$></MTEntryCategories>",author:"<$MTEntryAuthorUsername$>",keywords:"<MTEntryTags glue=", "><$MTTagName$></MTEntryTags>"}
</MTEntries>
];
data.shift();