ホームページ内全文検索エンジンmsearch

 msearchとは
 ホームページ内全文検索エンジンmsearchとは,個人または比較的小規模の法人 ホームページ内の検索を提供するCGIプログラムです.
 以下のような機能があります.
  1. 検索用インデックスを作るので,作らないタイプの検索エンジンより高速.
  2. インデックス作成,検索ともにperlで動作.
  3. 提供するperlスクリプトのみで動作するので,カスタムCGIを設置できるWebサーバならどこでもインストール可能.
  4. and検索,not検索,タイトル検索,URL検索が可能.
  5. 4種類(降順,昇順を含め8種類)のランキング(結果表示のソート)が可能.
  6. 検索対象HTMLページの漢字コードはSJIS,JIS,EUC全てをサポート.
  7. 様々なインデックス化のオプションをインデックス作成CGIから指定可能.
  8. インデックスの更新は,自動的に差分を調べて作らるので高速.
  9. 検索結果表示画面を簡単にカスタマイズ可能.
  10. Cookieによるインデックス作成オプション記憶で更新が簡単.
  11. 無料.(^o^)
 実際に動作しているmsearchを使うには,作成者の ホームページでどうぞ.
 作成者への連絡はメールどうぞ.
 その他質問や要望等は■掲示板■でどうぞ.

 ダウンロード
 本ソフトウェア(msearch)をダウンロードされる場合は,以下の利用規定に同意 したとみなさせて頂きます.
  1. 本ソフトウェア(msearch)はフリーソフトウェアですが,著作権は作成者(Katsushi Matsuda)に属します.
  2. 本ソフトウェアを利用したことによる,いかなる結果,損害,トラブルについて作成者は一切の責任を免れます.
  3. 有料,無料を問わず,再配布する場合は作成者に連絡して下さい.
  4. 作成者に許可なく,営利目的での利用(有償でのレンタルや販売,設置代行等)はできません.
  5. 本ソフトウェアの改造は非営利目的の範囲内で自由にできますが,ソフトウェア内に記述された作成者の著作権表示部分を削除,修正することはできません.
  6. バグ報告を除き,改造依頼や改造方法については基本的にお答えできません.
msearch 1.21のダウンロード(LZH圧縮)

 現在の最新バージョンは1.21です.

 更新履歴
更新日 内容
ver. 1.21
07/28/01
以下のバグの修正
(1) 対象ファイルを「.html」とした時,「.shtml」も含まれてしまう.
(2) タイトルに含まれる英数文字が検索漏れしてしまう.
(3) タイトルのみに含まれる文字が「:t」なしで検索できない.
(4) クエリーが全角の場合に検索漏れが発生する.
(5) 検索結果を全件表示にした場合にHTMLフッタを出力しない.
(6) 検索結果の件数が表示件数の倍数の時,ありもしない次の検索結果へのリンク が作られる.
Special thanks 水沢さん
ver. 1.2
02/19/01
ローカルでインデックス作成可能に.
ver. 1.1b
02/18/01
インデックス作成CGIがデバッグ情報出力可能に.
ver. 1.1a
01/09/01
インデックス差分更新のアルゴリズムを変更.
ver. 1.1
12/26/00
インデックス作成CGIをCookieに対応.
ver. 1.0
12/22/00
公開開始.
ver. 1.0β
12/21/00
作成者のホームページで運用開始.

 インストール方法
 インストールの方法について説明します. なお,ここでは,HTMLやCGI,perlについてある程度わかっている人を前提にして います. ここに書いてある事以外の基本的なことは,とほほさんの とほほのWWW入門等の すばらしいホームページで調べて下さい.
  1. まずあなたのホームページにCGIが設置できるか調べて下さい.

    あなたのホームページが無料ホームページならば,そのサービスガイドを見るか, しげるさんの COOL'S FAVORITEWEB PLAZAでCGIが利用できるか 調べて下さい. またあなたのホームページがプロバイダやレンタルサーバ,ホスティングサービス ならば,それぞれのサービスガイドを見るか,管理者に尋ねてCGIが利用できるか 調べて下さい.

  2. msearchをダウンロードして下さい.

    必ず上の利用規定を読んで からダウンロードして下さい. LZH形式です. 解凍すると,以下の5つのファイルが作成されます.
    genindex.cgi インデックス作成CGI
    genindex.pl ローカルインデックス作成プログラム
    msearch.cgi 検索CGI
    jcode.pl 歌代さん作の漢字コード変換ライブラリ
    fold.pl 歌代さん作の日本語文字列折り返しライブラリ

  3. 各種設定を変更して下さい.

     genindex.cgi,msearch.cgiともに漢字コードはEUCで書かれていますので,EUCで 読み込めて,EUCで書き込めるテキストエディタを用意して下さい.
     あなたのサーバのperlのパスを調べ,genindex.cgiとmsearch.cgiのそれぞれ先頭 行を書き換えて保存して下さい. 配布時には,perlのパスは/usr/local/bin/perlに なっています. もし,あなたのサーバのperlのパスが同じならば,書き換える必要はありません.
     次にgenindex.cgiの変数$g_passwordの値を書き換えて 下さい. 配布時には,パスワードは"msearchpass"となっていますので,これを好きなパスワ ードに必ず変更して下さい. 日本語でも構いません.
     基本的に,上の2つの設定さえすれば他に修正する必要はありません. その他検索結果画面をカスタマイズしたい場合は,下の カスタマイズの方法を参照して下さい.

  4. サーバにアップロードして下さい.

     上の4つのファイル(genindex.cgi,msearch.cgi,jcode.pl,fold.pl)をFTP等で サーバにアップロードして下さい. アップロードする先は,CGIが動作するディレクトリです. 各サーバ毎に違いますので各自調べて下さい. 例えば,freewebでは,各自のホーム ディレクトリ内にcgi-binというディレクトリを作ってそこにCGIをインストール します.
     アップロードする際のモードはテキスト,漢字コード は変換しない,改行はサーバに 合わせる,パーミッションはgenindex.cgiとmsearch.cgiが 755でjcode.plとfold.plが 644です. もし,jcode.plやfold.plがすでにサーバにあり,perlのパスが通っているなら, jcode.plやfold.plはアップロードする必要はありません. ただし,genindex.cgiとmsearch.cgiのrequireを修正する必要があります. 分からない人はjcode.plとfold.plをアップロードして下さい.

  5. 動作チェックして下さい.

     ブラウザを使い,CGIが動作するかチェックして下さい. 各サーバによって違いますが,ここではfreewebを例に取り説明します. 各自のホームディレクトリのcgi-binというディレクトリ直下に4つのファイルを アップロードしたとします. すると,msearchの検索CGIを呼び出すURLは,
    http://www??.freeweb.ne.jp/???/???/cgi-bin/msearch.cgi
    となります."?"の部分はユーザ毎に違います. 同様に,msearch用インデックス作成CGIを呼び出すURLは,
    http://www??.freeweb.ne.jp/???/???/cgi-bin/genindex.cgi
    となります.
     ブラウザに上のURLを入れてみて,エラーが出なければOKです.

  6. インデックスを作成して下さい.

     上のmsearch用インデックス作成CGIをブラウザで開いて下さい. 下のようなインデックス作成フォームが表示されます(各入力欄は空白です).

    それぞれについて説明します.
     対象ディレクトリとは,インデックスに登録するHTMLファイルがある トップディレクトリです. 絶対パスまたはgenindex.cgiがあるディレクトリ(アップロードしたディレクトリ) からの相対パスで指定します. 必ず1つだけ(複数指定したい場合についてはFAQを参照のこと) 指定します. この例では,genindex.cgiがあるcgi-binディレクトリの親ディレクトリを指定して います. インデックス作成CGIは,この対象ディレクトリより下にある全てのディレクトリ に含まれるファイルをインデックス対象とします.
     対象ディレクトリのURLには,上の対象ディレクトリが実際にはどのよう なURLで表されるかを指定します. この例では,サーバ内の"../"ディレクトリが"http://www.foo.co.jp/~bar/"という URLに相当するとしています. そしてサーバ内の"../index.html"ファイルは"http://www.foo.co.jp/~bar/index.html" というURLになります.
     対象ファイルの拡張子には,インデックス対象となるファイルの拡張子を 指定します. デフォルトは".html"と".htm"です. この場合はこの欄は空白でOKです. 例では,上のデフォルト拡張子に".shtml"を加えています. デフォルト以外の拡張子を指定する場合は,インデックス対象としたいファイルの 拡張子を全て指定しなければなりません. 複数の拡張子を指定する場合は半角のカンマ","で繋げて下さい.
     非対象ディレクトリには,対象ディレクトリより下にあるインデックス化 したくないディレクトリを指定します. このディレクトリ以下はインデックス対象となりません. 対象ディレクトリからの相対パスで指定します. この例では,サーバ内の"../cgi-bin/"というディレクトリ以下と"../secret/"という ディレクトリ以下をインデックス化したくないため,その相対パスである"cgi-bin/" と"secret"を指定しています.
     非対象ファイルには,対象ディレクトリより下にあるインデックス化した くないファイルを指定します. 非対象ディレクトリ以下のファイルは指定する必要はありません. 対象ディレクトリ以下だけど,あるファイルのみインデックス化したくない場合, そのファイルを指定します. 非対象ディレクトリと同様に対象ディレクトリからの相対パスで指定します. 複数指定する場合は半角のカンマ","で繋げて下さい.
     パスワードには,3の各種設定で設定したパスワードを入力して下さい. このCGIはインターネットでつながっているどこからでも動かすことができるので, パスワードがばれると悪意ある人がインデックスを壊したり,改変したり,また サーバに対して高負荷をかけたりする恐れがあります.
     入力が終われば,インデックス作成ボタンを押します. すると,下のような表示がされるはずです.

    途中で止まったり,「インデックスを保存しています.完了(?ファイル)」という 表示がされなかった場合は,FAQを参照のこと.
     ver1.2から,ローカルPCでインデックスを作るPerlプログラムを添付しました. ActivePerl等のPerl環境がインストールされているPCのDOS Promptで,genindex.pl を実行します. すると,genindex.cgiのインデックス作成フォームと同じ入力項目を順に質問して くるので,genindex.cgiと同じオプションを入力して下さい(コマンドラインでの 入力になりますので,genindex.cgiのようにCookieによるインデックス作成オプ ションの記憶はできません). するとその実行ディレクトリにmindex.datが作られます. FTP等でサーバにアップロードすることで上のgenindex.cgiと同様のことが行えます.

  7. 検索してみて下さい.

     これで準備が整いました. いよいよ実際に検索してみて下さい. ブラウザに以下の様なURL(各ユーザ,プロバイダーによって違います)を入力し, 開いてみて下さい.
    http://www??.freeweb.ne.jp/???/???/cgi-bin/msearch.cgi
    以下のような検索用フォームが表示されます(実際には入力欄は空白で,更に下に 説明文が表示されます).

    例えば,旅行記という文字が含まれているページを検索する場合は,この 例のように入力欄にキーワード("旅行記")を入力し,検索ボタン を押します.
     後はgoogoogleと同じ要領です.

 検索フォームを自分のホームページに貼り付けたい場合は,FAQ を参照して下さい.
 また,インデックスは一度作ればそれで終わりではなく,自分のホームページの 更新を行った都度インデックスを更新して下さい. ページを追加したり,ページの修正をしたり,ページを削除した場合です. 追加されたページ,修正されたページ,削除されたページは自動的に判別し, インデックスを更新しますので,基本的に6で入力した値のままインデックスを作成 するだけです.

 カスタマイズの方法
 ここでは,インデックス作成CGIと検索CGIのカスタマイズの方法について説明 します. 必ずEUCが扱えるテキストエディタで編集して下さい.

インデックス作成CGIのカスタマイズ

変数 説明
$body_background インデックス作成ページの背景の画像.絶対パスで画像を 指定した方が安全.例えば,"http://www.homepage.com/~id/images/bg.jpg".
$body_bgcolor インデックス作成ページの背景の色.デフォルトは白(white).
$body_text インデックス作成ページのテキストの色.デフォルトは黒 (black).
$body_link インデックス作成ページの未到達リンクの色.デフォルト は青(blue).
$body_alink インデックス作成ページの活動中リンクの色.デフォルト は赤(red).
$body_vlink インデックス作成ページの到達済リンクの色.デフォルト は青(blue).以上の3つのリンクの色を指定なし("")にするとブラウザのデフォルト カラーになる.
$title_init インデックス作成ページのタイトル文字列.
$title_result インデックス作成結果表示ページのタイトル文字列.
$g_cgi インデックス作成CGIのプログラム名.デフォルトは "genindex.cgi".名前を変えた場合には,その名前に変更する.
$g_password インデックス作成ページのパスワード.デフォルト値を 使わないように,必ず変更する.
$g_cookie インデックス作成CGIのユーザ入力をCookieを使って覚えて おくか.デフォルトはCookieを使う(1).使わない場合は(0).
$g_cookie_span Cookieの有効期限.単位は日.
$debug_level デバッグ情報出力の値.デフォルトは0で,必要な情報以外 出しませんが,必要なら,1または2にすることでインデックス作成時のデバッグ情報 を出すことができます.1より2の方がより詳しい情報を出力します.
 その他,perlのソースコードを改造することで色々な表示ができます.

検索CGIのカスタマイズ

変数 説明
$g_cgi 検索CGIのプログラム名,デフォルトは"msearch.cgi". 名前を変えた場合には,その名前に変更する.
$s_title 検索CGIを直接引数なしで呼び出したページのタイトル 文字列.
$s_body_background 検索CGIを直接引数なしで呼び出したページの背景の画像.
$s_body_bgcolor 検索CGIを直接引数なしで呼び出したページの背景の色.
$s_body_text 検索CGIを直接引数なしで呼び出したページのテキストの 色.
$s_body_link 検索CGIを直接引数なしで呼び出したページの未到達リンク の色.
$s_body_alink 検索CGIを直接引数なしで呼び出したページの活動中リンク の色.
$s_body_vlink 検索CGIを直接引数なしで呼び出したページ到達済リンクの 色.
$r_title 検索CGIの検索結果表示ページのタイトル文字列.
$r_body_background 検索CGIの検索結果表示ページの背景の画像.
$r_body_bgcolor 検索CGIの検索結果表示ページの背景の色.
$r_body_text 検索CGIの検索結果表示ページのテキストの色.
$r_body_link 検索CGIの検索結果表示ページの未到達リンクの色.
$r_body_alink 検索CGIの検索結果表示ページの活動中リンクの色.
$r_body_vlink 検索CGIの検索結果表示ページの到達済リンクの色.
$r_show_url 検索CGIの検索結果にURLを表示するかどうか.デフォルト は表示する("1").表示させたくない場合は,"0"にする.
$r_show_contents 検索CGIの検索結果にページの一部を表示するかどうか. デフォルトは表示する("1").表示させたくない場合は,"0"にする.
$r_show_contents_num $r_show_contentsが"1"(表示する)の場合の表示文字数. デフォルトは"200".単位はバイト.
$r_link_window 検索CGIの検索結果のリンクを別ウインドウで開くかどうか. デフォルトは開かない("0").別ウインドウで開かせる場合は"1".
$g_num 検索CGIの検索結果を何件ずつ表示するか.デフォルトは 5件ずつ("5")."0"以上の値を設定できる."0"の場合は全件表示.
$g_sort 検索CGIの検索結果をソート(ランキング)するかどうか. デフォルトはする("1").しない場合は"0".
$g_sort_method $g_sortでする("1")を設定した場合の,ソート(ランキング) の方法.デフォルトは最終更新時刻降順("MODIFY-DESC"). ソートの方法には,
最終更新時刻降順("MODIFY-DESC")
最終更新時刻昇順("MODIFY-ASC")
ページ内容降順("CONTENTS-DESC")
ページ内容昇順("CONTENTS-ASC")
タイトル降順("TITLE-DESC")
タイトル昇順("TITLE-ASC")
URL降順("URL-DESC")
URL昇順("URL-ASC")
がある.
 なお,$g_num,$g_sort,$g_sort_methodは検索CGI呼び出し中でも変更可能です. 検索CGIからの変更は,検索フォームに以下のようにHTMLソースコードを追加します.
<input type=hidden name="num" value="10">
<input type=hidden name="sort" value="1">
<input type=hidden name="smethod" value="TITLE-ASC">
この例では,一度に表示する検索結果を10件にし,ソートの方法をタイトル昇順に 変更しています.
 その他,perlのソースコードを改造することで色々な表示ができます.

 FAQ
  1. 検索フォームをページに貼り付けるには?

    以下に例を示します.

    <form action="/cgi-bin/msearch.cgi" accept-charset="x-euc-jp">
    <table border=0 cellspacing=0 cellpadding=3>
    <tr>
    <td align=left bgcolor=#F8FE00>
        <small><font color=black><b>HP内検索エンジン</b></font></small>
    <td align=right bgcolor=#F8FE00>
        <small><a href="/cgi-bin/msearch.cgi">help</a></small>
    <tr>
    <td valign=center align=center bgcolor=#F8FE00>
        <small><input type=text size=20 name="query" value=""></small>
    <td valign=center align=left bgcolor=#F8FE00>
        <small><input type=submit value="検索"></small>
    </table>
    </form>
    
    このHTMLソースを検索フォームを入れたい場所に貼り付けるだけでOKです. ただし,赤色の部分は,そのページのURLから見たCGIの 相対パスか絶対パスを入れて下さい.

  2. 複数の対象ディレクトリをインデックス化するには?

     基本的に不可能です. しかし,同じことを別の方法で実現することが可能です. 以下のようにします.
     あなたのホームディレクトリを"public_html/"以下とし,そのURLを "http://www.homepage.com/~id/",genindex.cgiがあるディレクトリを "cgi-bin/msearch/"とします. そして"public_html"以下のの"aaa/"ディレクトリと"bbb/"ディレクトリについて インデックスを作りたいとします.
     一方,"public_html/"以下には"aaa/"と"bbb/"以外に"ccc/"と"ddd/"という ディレクトリと"index.html"と"test.html"というファイルがあると仮定します. この場合,"aaa/"ディレクトリと"bbb/"ディレクトリの2つのディレクトリを対象 ディレクトリとしてインデックスを作るには,以下のようにします.
    対象ディレクトリ ../
    対象ディレクトリのURL http://www.homepage.com/~id/
    非対象ディレクトリ cgi-bin,ccc,ddd
    非対象ファイル index.html,test.html
    すなわち,2つのディレクトリを対象ディレクトリとするのではなく,2つの ディレクトリ以外を非対象ディレクトリとしてインデックスを作るのです.

  3. インデックスが作れないのですが?

     いくつか原因が考えられます.

    1. ディレクトリ移動のパーミッションがない.
      genindex.cgiを置いてあるディレクトリのパーミッションは 755である必要があります(サーバによっては705でも OK).
    2. CGIからファイルを作ることができない制限になっている.
      サーバによってはCGIから新しいファイルを作ることができない設定になっている 場合があります. この場合は,mindex.datという大きさ0のファイルをgenindex.cgiの置いて あるディレクトリに作って下さい. ファイルのパーミッションは666にして下さい (サーバによっては606でもOK).
    3. CGIからのファイル読み込みに制限がかかっている.
      サーバによってはCGIから読み込むことができるファイル数に制限をかける設定に なっている場合があります. この場合は,少し手間がかかります.
       ファイル読み込みの制限がかからない程度をインデックス対象とするディレクトリ を指定し,インデックスを作ります.このインデックス(mindex.dat)をFTP等で ローカルにダウンロードし,別名(例えばmindex1.dat等)を付けて保存します. これを何度か繰り返し,インデックスに登録したい全部のファイルをインデックス化 したところで,ローカルにコピーしたインデックスファイル(例えば,mindex1.dat, mindex2.dat,mindex3.dat,.....等)をつなげて1つのインデックスファイル (mindex.dat)にし,CGIと同じディレクトリにFTP等でアップロードします.
    4. CGIのメモリ使用量に制限がかかっている.
      サーバによってはCGI1プロセスあたりのメモリ使用量に制限をかける設定になって いる場合があります. この場合も上と同様に分割してアップロードするか,genindex.plを使ってローカル PC上でインデックスファイルを作ってアップロードして下さい.
    5. プログラムのバグ.
      今のところバグは見つかっていませんが,可能性はあります.(^o^;

  4. 他のサーバにあるホームページをインデックスしたいのですが?

     残念ながらできません. genindex.cgiが置いてあるサーバだけです. また,genindex.cgiを実際に動作させるユーザ(apache等のWebサーバ)が移動できる ディレクトリと参照できるファイルに限りインデックスに登録できます. ほどんどのサーバでは,同一サーバ上の別のユーザ(あなた以外のユーザ)の ディレクトリに移動したり,ファイルを参照したりすることはできなくなっている と思われますので,基本的にインデックスに登録できるのはあなたのホーム ディレクトリ以下だけです.

Copyright (c) 1999-2002, Katsushi Matsuda. All Right Reserved.