HOME  »  , , , , , , ,  » 超高速で超便利なAjax で全文検索するJavaScript

超高速で超便利なAjax で全文検索するJavaScript

2006/03/15 | Comments & Trackbacks : 7

検索画面

珍しくこの手の話題が続いていて、ちょっとどうなのかなぁと思わなくもないのですが、あまりの快適さに感動したのでご紹介をば。

今朝からサイトの検索ツールを入れ替えてみました。
一番上にある検索窓がおいてあるのですが、試しに遊んでみてくださいな。
検索速度が従来のものよりも速く、精度も高く、設置も簡単。
しかもそのまま別の単語を入力して検索すると、タイムラグがほとんど0で検索できるという優れものです。

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

このJava Scriptは、元々ココログユーザの管理人さんが作られたものなのですが、ココログはTypePadがベースで動いているので、Movable Typeを使っている私も恩恵に預かれるという、誠に有り難い、棚からぼた餅式になっております。

以下、Movable Type 3.2 での設置方法を、と言ってもココログとほとんど変わりませんが。

  1. 「メインメニュー>ブログ名>テンプレート」の「テンプレートを新規作成」をクリック。
    「テンプレートを編集」の画面を出す。
  2. 以下のように設定する。
     ■テンプレート名:任意(「search_data」ってな感じがわかりやすいのでしょうか)
     ■出力ファイル名:search_data.txt
     ■再構築オプション:チェックを入れておく(一応。)
     ■テンプレートの内容

    <?xml version="1.0" encoding="utf8"?>
    {data: [
    <MTEntries lastn="3000[任意。自分の総エントリ数より明らかに大きな数値を設定]">
    {title:"<$MTEntryTitle remove_html="1" encode_js="1"$>",link:"<$MTEntryLink$>",body:"<$MTEntryBody remove_html="1" encode_js="1"$><$MTEntryMore remove_html="1" encode_js="1"$>"},
    </MTEntries>
    {"title": "", "link": "", "body": ""}
    ]
    }

    入力が終わったらこのテンプレートの保存・再構築をする。

  3. 検索窓を設置したい場所に以下のHTMLを貼り付ける。
    index ファイルと同じ場所に search_data.txt がある場合は、このソースをそのまま貼り付ければ動くと思います。
    別の場所にある場合はパス(オレンジ色の部分)を適当に書き替えてください。

    <script type="text/javascript" src="http://java.cocolog-nifty.com/blog/files/javascript/prototype.js"></script>
    <script type="text/javascript" src="http://java.cocolog-nifty.com/blog/files/javascript/blog_ajax_json_search.js"></script>
    <form action="javascript:blogAjaxJsonSearch( '/search_data.txt', document.getElementById('search_box').value );"><input type="search" id="search_box" value=""><input type="button" id="search_button" onclick="javascript:blogAjaxJsonSearch( '/search_data.txt', document.getElementById('search_box').value );" value="検索"></form>
  4. 検索データは各テンプレートの『<div class=”content”></div>』で囲まれている部分に出力されるので、検索結果を表示させたい場所の外側にdivタグを追加記入する。
    私の場合、トップページの場合はこんな感じに囲ってます。

    <div class="content">
     <div class="○○">「エントリタイトル」</div><div class="△△">「日付」</div>
     <div class="●●">「本文」</div>
     <div class="▽▽">「続きを読む」など</div>
    </div>

    要は検索結果画面で消しておきたい要素をぐるっと囲んであげる、と言う事らしいです。

  5. 検索窓が設置されているページに追記し終わったら(私の場合はトップ、カテゴリ、月別、個別、各種メニューページ、404エラーファイル)再構築をかける

作業はこれだけ。
新しいテンプレ作って、検索窓入れ替えて、タグをちょいと書き足してあげるだけなので、誰でも出来るのではないかと思います。

私的にすごくうれしかったのは、あのリニューアルするたびにうっかり忘れがちな、検索画面用テンプレートの書き替えが必要なくなるところです。
本体のタグやらcssの設定をいじるたびに、デザイン崩れを起こしていた事にしばらく気付かない、という事がよくあったので、私みたいなうっかりさんにはすごくすごくこの検索ツールはおすすめだと思うのです。
もっとも、素早い検索が出来るってだけでも十分魅力的なんですけど。

ちなみに私のサイトは元々 UTF-8 だったのであっさり導入出来ましたが、Shift-JIS 等のサイトだと文字化けしてしまうようです。サイトをUTF-8 に移行すれば特に問題ないのでしょうが、ちょっとめんどくさいかも・・・。
本体を新規インストールすればいいだけの話しなんですけどね。

ちなみにSBでもこのツールを導入する事は可能らしいです。
(参考:マイナーアップデート by BLOGGEST
『サーバ側で cron と sed を使って生成処理』するといけるらしいですが・・・。
私には何の事やらさっぱりorz

最後に感想を兼ねて、作者様へずうずうしくもお願いを書き出してみます。

Google Adsense

Comments & Trackbacks : 7

Response from yujiro2006 年 3 月 16 日 1時52分

こんばんはー。
早速試してみました。快適です。
あとはインクリメンタルサーチでしょうか。(笑)

Response from 柿ママ2006 年 3 月 16 日 9時16分

良さげですね~。
ていうか、もそさんの説明ってば、そそり方が上手いのですよ~(笑)
私のところのような個人の趣味サイトで何を調べる人がいるんだ!?って自分でも思いますけど(苦笑)、自分で自分のエントリを検索したりするので、使ってみようかなぁ。

Response from もそ2006 年 3 月 17 日 1時19分

■yujiroさん
ですよねー。
試してめちゃくちゃ感動して、速攻で入れてみました。
確かにこれでインクリメンタルサーチが入ったら無敵ですね。
しばらく自分が遊んでしまいそう(笑)

■柿ママさん
いいですよー、ふふ。
あー、何か私があれがいい、これがいいというと、よく思えるってのは他の人にも言われた事があります、そういえば。
一度隙になると。その好きなものに対する思い入れが人より強いのかもしれませんね。

って、うちもしがない個人趣味バリバリサイトのつもりですw。

Response from T2006 年 4 月 12 日 16時33分

検索結果はlist形式で表示されているので、スタイルシートに

#content li{margin-bottom:15px;}

を追加してやれば行間はなんとでもなるのでは。もっとも、これでは他のエントリーのlistの行間も変わってしまいますから、それを防ぐためにはさらに別のclassを設定してやる必要がありますが。
15pxは適宜調整してください。

Response from きゃー2007 年 3 月 13 日 10時13分

これいいなー。SBでcron必要とするって事は、blosxomじゃーできないんだろうなぁ。
なんか昨日寝ぼけて一生懸命やろうとしてた気配がありますが、なんせ私MTタグよくわかんね。(゚⊿゚)
て事で、諦めました。ショボン

Response from Ck2 Blogger2007 年 3 月 13 日 14時42分

羨ましすAjax Search

もそさんトコのAjaxで全文検索、いいなー。これは素晴らしいね!って事で、昨日寝ぼけてコレをどうにかうちのblosxomに導入しようとした形跡が今朝残って…

Response from もそ2007 年 3 月 20 日 0時02分

■きゃーさん
いいっしょーw
MTタグがわかればこれって他の静的ファイル生成タイプでも転用できる、って事なんですかねぇ。
私プログラム書けないからわかんね。
MT対応じゃなかったら私も多分(ってか絶対)導入できなかったと思います。