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

 msearchとは
最新バージョン(1.52)を公開しました.
1.50と1.51をお使いの方は必ずバージョンアップして下さい.

■ユーザサイト一覧  こんなに使われている! 使用されている方は,ご連絡下さい.
■スキン配布サイト一覧  好きなスキンを選ぼう! スキンを配布されている方は,ご連絡下さい.

 ホームページ内全文検索エンジンmsearchとは,個人または比較的小規模の法人 ホームページ内の検索を提供するCGIプログラムです.
 以下のような機能があります.

  1. 検索用インデックスを作るので,作らないタイプの検索エンジンより高速.
  2. インデックス作成,検索ともにperlで動作.
  3. 提供するperlスクリプトのみで動作するので,カスタムCGIを設置できるWebサーバならどこでもインストール可能.
  4. and検索,or検索,not検索,タイトル検索,URL検索が可能.
  5. 3種類(降順,昇順を含め6種類)のランキング(結果表示のソート)が可能.
  6. キーワードがマッチした部分の強調表示が可能.
  7. 検索対象HTMLページの漢字コードはSJIS,JIS,EUC全てをサポート.
  8. 全角1文字の検索キーワードも正しく検索可能.しかも高速.
  9. 様々なインデックス化のオプションをインデックス作成CGIから指定可能.
  10. インデックスの更新は,自動的に差分を調べて作られるので高速.
  11. インデックスに登録したくないキーワードの指定が可能.
  12. 検索結果表示画面をHTMLで記述できるので,簡単にカスタマイズ可能.
  13. 検索ログを出力可能.
  14. Cookieによるインデックス作成オプション記憶で更新が簡単.
  15. 複数のインデックスを切り替えて検索可能.
  16. 無料.(^o^)
 実際に動作しているmsearchを使うには,作成者の ホームページでどうぞ.
 作成者への連絡は右のアドレスにメールして下さい.

upupさん(HP)に作って頂いたmsearch のバナーです.大と小があります. msearchのページ(ここです)にリンクを張って頂く際にご利用下さい.
バナーの著作権はupupさんにあります. リンク元のサイト様にバナー画像をダウンロードしてご利用頂く分には 問題ございませんが,再配布や加工(サイズ変更を除く)はご遠慮下さい.
  

強力バックアップサイト
□msearch導入記 水沢・penguin-19・和彦さんによるmsearch導入記です.インストール方法, 評価,改造方法,インストール時のチェックツールの配布等,役に立つ情報が満載 です.
□Unicode版msearch 毛流麦花(もーるばっか)さんによるunicode版msearchの配布サイトです. 正式版,msearch1.52(U1)を公開中.Unicode対応に尽力されています. msearchがグローバル化!!

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

 現在の最新バージョンは1.52です.
【重要】 msearch 1.50および1.51では,ディレクトリトラバースの脆弱性が発見されました. 1.50または1.51をご利用の方は至急1.52にバージョンアップして下さい.
脆弱性に関する詳細情報はこちらで公開しています.

過去のバージョンの設定方法は以下のページをご覧下さい.
msearch 1.51  msearch 1.46  msearch 1.33  msearch 1.21

 更新履歴
更新日 内容
ver. 1.52
03/08/05
1.52のリリース
ディレクトリトラバースの脆弱性に対応しました.
なお,この対策によってインデックスと設定ファイルの置けるディレクトリが 制限されます.その代わり,特定のディレクトリを許可するオーバーライド サブルーチンを用意しました.詳しくは高度な設定 をご覧下さい.
ver. 1.51
02/06/04
1.51の正式版リリース
なお,1.51βから以下の修正・追加があります.
(1) HTMLのタグ除去方法の再修正.
(2) ログフォーマットの月表示のバグ修正.
ver. 1.51β
12/03/03
1.51のβ版のこっそりリリース
なお,1.50から以下の修正・追加があります.
(1) HTMLのタグ除去方法の修正.インデックスの不具合解消?
(2) ロック解除失敗時のロックファイル削除のバグ修正.
(3) インデックス化抑制タグの導入(<msearch>).thanks 毛流麦花さん.
(4) クエリーの漢字コード判定ヒント文字列への対応.thanks 毛流麦花さん.
(5) 添付jcode.plを2.13にバージョンアップ
(6) 添付fold.plを1.6にバージョンアップ
ver. 1.50
08/21/03
1.50の正式リリース
なお,1.50b2から以下の修正・追加があります.
(1) マッチ部分の抽出文字数を設定ファイルで指定可能に.
(2) genindex.cgiのHTMLでtrタグが抜けていたのを修正.
ver. 1.50β2
07/22/03
以下の修正
(1) genindex.cgiのデフォルトインデックスが古いままだったのを修正.
(2) 最終更新日時($$indexdate$$)のバグを修正.
ver. 1.50β
07/16/03
以下の修正
(1) 検索結果ページ数が1ページの場合にcsetを非表示にしました.
(2) ログ出力形式のフォーマット変数化($logformat).
(3) 『( aaa bbb)』のようなor検索で文字化けするバグの修正.
(4) 『aaa b』のような検索式でハイライトが2重化するバグの修正.
(5) HTML中の非タグ文章『&lt;1章&gt;』が『<1章>』で検索可能に.
(6) genindex.plの非インデックスキーワードの問い合わせが変だったのを修正.
(7) genindex.plでランキングが効かなかったバグを修正.
(8) フォーマット変数$date_formatを$dateformatに変更.
(9) CPU時間の測定開始が設定ファイルを読んだ後だったのを前に変更.
以下の機能追加
(1) インデックス切り替え機能に対応. 詳しくは高度な設定FAQを ご覧下さい.
(2) インデックス毎に設定ファイルを切り替えられるように. 詳しくは高度な設定FAQを ご覧下さい.
(3) alt属性中の文字をインデックスに追加できるオプションを設置.
(4) インデックス補助ツールを追加.
ver. 1.46
12/25/02
以下の修正
(1) Cross Site Scriptingの<script>タグ等のタグ以外の脆弱性に対応しました.
(2) 検索結果のサマリー表示の「...」を半角にしました.
(3) 日時表示のフォーマット変数化($date_format).
(4) ログファイルの漢字コードが指定可能に($logencoding).
(5) HTML出力漢字コードが指定可能に($encoding).
(6) config.datとスクリプト中のHTMLの</tr>と</td>タグを入れました.
(7) PHP等のタグ除去.
(8) <title lang=**>に対応.
(9) genindex.plの出力漢字コードにJISを追加.
ver. 1.45
4/10/02
以下の修正
(1) '$'と'?'を含む検索式で正常に検索できなかったバグを修正しました.
ver. 1.44
4/1/02
以下の修正
(1) インデックスの形式を変えました.これは英語等の日本語以外のページの検索 にも対応するためです.
(2) 悪意ある検索式を排除するようにしました.
(3) インデックス作成時の出力メッセージを整理しました.
(4) インデックス作成時のデバッグ情報出力をフォームから指定できるように しました.
ver. 1.43
3/4/02
以下の修正
(1) URL検索で"foo/bar"のように"/"等のメタキャラクタが含まれる場合に正しく 検索できなかったが,それを修正.
(2) フォーマット変数$$url$$がURL検索の際,正しいURLではなく,HTMLのタグが 含まれてしまう仕様上のバグを修正
フォーマット変数についてはFAQをご覧下さい.
ver. 1.42
1/31/02
Cross-Site Scriptingに対応(その2)
1.41では<script>しか対応していなかったのを他の危険なタグにも対応.
ver. 1.41
1/31/02
Cross-Site Scriptingに対応
1.40以下のmsearchではCross-Site Scriptingに対するバルナビリティがあり ました.1.41ではこの問題を解決しています.
1.41へのバージョンアップは,1.40のmsearch.cgiを1.41のものに入れ替える だけでOKです.
ver. 1.40
1/24/02
1.40を正式公開開始
1.40は以下の特徴があります.
(1) 全角1文字検索の速度向上.他の検索とほぼ同じ速度(10倍以上)を実現.
(2) 半角英文字検索の速度向上.2割程度向上.
(3) 検索結果画面のフォーマット(HTMLによるスキン作成)化.
(4) 検索ログ出力に対応.
ver. 1.40β3
1/21/02
以下の修正
(1) helpフォーマットでもindexnum変数が参照できるように修正.
(2) ログを出力できるように修正.
(3) キーワードに半角英文字がある場合の検索速度向上.
ver. 1.40β2
1/20/02
以下の修正
(1) 全件表示ができないバグの修正.
(2) 検索結果が0件のときにcsetとnsetを表示してしまうバグの修正.
(3) CGI引数でquery引数に値がない場合にも対応.
ver. 1.40β1
1/18/02
1.40のベータテスト開始
ver. 1.33
10/10/01
1.33を正式公開開始
ver. 1.33β
09/29/01
以下のバグを修正
(1) 半角カタカナのキーワードで検索できない.
以下の機能の追加
(1) インデックス時の非対象ディレクトリと非対象ファイルの指定に正規表現が 使えるように.
(2) インデックスに登録したくないキーワードを指定できるように.
これらの追加機能については,インストール方法をご覧 下さい.
ver. 1.32
09/12/01
1.31の検索結果のリンクが変になるバグを修正
ver. 1.31
09/11/01
全角1文字の検索を正しくできるように修正 (FAQで詳しく説明)
ver. 1.3
08/25/01
1.3を正式公開開始
ver. 1.3β3
08/18/01
以下の修正
(1) マイナスから始まるキーワードに対応.
(2) カッコで囲まれたキーワードに対応.
(3) URL検索で強調表示されないバグを修正.
(4) 少しだけ高速化.
ver. 1.3β2
08/17/01
以下の仕様変更
(1) 検索結果を表(table)から定義(dt)に.
(2) マッチした部分の強調表示が変更可能に.
ver. 1.3β
08/16/01
以下の新規機能を追加
(1) OR検索が可能に.
(2) 検索結果の各項目をナンバリング.
以下の仕様の修正
(1) 検索結果の一部表示が先頭ではなく,マッチした部分に.
(2) マッチした部分のボールド表示.
(3) 英数文字が全角の大文字で表示されていたのを元ページに忠実に.
以下の様に機能を縮小
(1) ソートの種類からページ内容の昇順・降順を削除.
(2) 検索時のソートの指定を削除し,インデクシング時に指定する.
大幅な機能増強ですが,ほとんど速度は落ちないように苦慮しました.
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
作成者のホームページで運用開始.

 動作環境
 msearchは以下の環境での動作します.

プラットフォーム LINUXを含むUNIX系OS
Perlバージョン Perl 5.004以降,jperlは不可

 インストール方法
 インストールの方法について説明します. なお,ここでは,HTMLやCGI,perlについてある程度わかっている人を前提にして います.

  1. まずあなたのホームページにCGIが設置できるか調べて下さい.

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

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

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

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

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

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

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

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

     ブラウザを使い,CGIが動作するかチェックして下さい. 各サーバによって違いますが,ここではfreewebを例に取り説明します. 各自のホームディレクトリのcgi-binというディレクトリ直下に6つのファイルを アップロードしたとします. すると,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をブラウザで開いて下さい. 下のようなインデックス作成フォームが表示されます(各入力欄は空白です).

    それぞれについて説明します.

     インデックス名とは,検索対象とするインデックスの名前です. 何も記入しなければ,デフォルトの"default"となります.実際に作られる インデックスファイルは,このインデックス名に".idx"が付加されます. また,デフォルト以外のインデックスを検索対象にする時には,msearchの検索CGIを 呼び出すURLにそのインデックス名を指定する必要があります. 例えば,インデックス名が"test"だとすると,"msearch.cgi?index=test"と指定する 必要があります.デフォルトインデックスの場合は指定する必要はありません(指定 しても構いません).なお,複数のインデックスを同時に検索することはできません. インデックスを切り替えて使うことになります. 一つの検索エンジン(msearchのこと)が複数の検索対象(インデックス単位)に対応 できるということです.

     対象ディレクトリとは,インデックスに登録する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"を指定しています.
    また,非対象ディレクトリの指定では,正規表現を使って指定することが可能です. ただし,この場合は,相対パスではなく,ディレクトリ名 のみでの正規表現のマッチが行われます. 例えば,"(_vti_cnf)"と指定すると,対象ディレクトリ以下にあるディレクトリの うち,"_vti_cnf"という名前のディレクトリが全て非対象 ディレクトリとなります. この正規表現による非対象ディレクトリの指定のためには,正規表現を"("と")"で 囲む必要があります. もちろん,正規表現ですから,上の"(_vti_cnf)"は"(^_.*f)"のように記述しても 構いません. ただしこの場合は,"_conf"というディレクトリも非対象ディレクトリとなります. 正規表現によるものと相対パスによるものは同時に指定可能です.

     非対象ファイルには,対象ディレクトリより下にあるインデックス化した くないファイルを指定します. 非対象ディレクトリ以下のファイルは指定する必要はありません. 対象ディレクトリ以下だけど,あるファイルのみインデックス化したくない場合, そのファイルを指定します. 非対象ディレクトリと同様に対象ディレクトリからの相対パスで指定します. 複数指定する場合は半角のカンマ","で繋げて下さい.
    非対象ディレクトリの指定と同様に非対象ファイルの指定にも正規表現が使えます. この場合も相対パスではなく,ファイル名単位での正規表現マッチとなります.

     非対象キーワードには,検索対象に入れたくないキーワードを指定します. ここで指定したキーワードで検索した場合,検索結果は0件となります. 半角カンマ(",")を使い,複数指定できます. 例えば,「検索」と「私」というキーワードを検索対象にしたくない場合は, "検索,私"と指定します. ここで 指定したキーワードは検索結果の一部表示にも出てきませんので注意して 下さい. ただし,タイトルに含まれるキーワードは削除しません.

     ランキング方法では,検索結果の表示に順序(ソート方法)を選択します. 選択できるランキング方法には,以下の7種類があります.

    1. なし :見つけた順
    2. 最終更新時刻-降順 :新しい順
    3. 最終更新時刻-昇順 :古い順
    4. タイトル-降順 :タイトル文字のアルファベット逆順
    5. タイトル-昇順 :タイトル文字のアルファベット順
    6. URL-降順 :URL文字のアルファベット逆順
    7. URL-昇順 :URL文字のアルファベット順
    好きなランキング方法を選んで下さい. インデックスを更新する際にも変更可能です.

     alt文字の追加は,imgタグ中のalt属性の文字列を検索対象に加えるか どうかを指定します.この例では「追加する」になっていますので,alt属性内の 文字列も検索対象となります.

     パスワードには,3の各種設定で設定したパスワードを入力して下さい. このCGIはインターネットでつながっているどこからでも動かすことができるので, パスワードがばれると悪意ある人がインデックスを壊したり,改変したり,また サーバに対して高負荷をかけたりする恐れがあります.

     デバッグモードをチェックすることで,インデックス作成時に詳しい 情報を出力します. インデックスが作成できない場合は,ここをチェックして実行した結果を見ること で原因究明が行える場合があります. インデックス作成が正常にできる場合は,ここをチェックする必要はありません. また,インデックスに登録するページが多い場合,Webサーバによって強制的に CGIの実行が中断される場合があります. ここをチェックすることで,これを防ぐことが可能です.

     入力が終われば,インデックス作成ボタンを押します. すると,下のような表示がされるはずです.

    途中で止まったり,「インデックスを保存しています.完了(?ファイル)」という 表示がされなかった場合は,FAQを参照のこと.
     ver1.2から,ローカルPCでインデックスを作るPerlプログラムを添付しました. ActivePerl等のPerl環境がインストールされているPCのDOS Promptで,genindex.pl を実行します(genindex.plの他にindexing.plも同じディレクトリにある必要があり ます). すると,genindex.cgiのインデックス作成フォームと同じ入力項目を順に質問して くるので,genindex.cgiと同じオプションを入力して下さい(コマンドラインでの 入力になりますので,genindex.cgiのようにCookieによるインデックス作成オプ ションの記憶はできません). するとその実行ディレクトリにdefault.idxが作られます. FTP等でサーバにアップロードすることで上のgenindex.cgiと同様のことが行えます.
     また,インデックスは一度作ればそれで終わりではなく,自分のホームページの 更新を行った都度インデックスを更新して下さい. ページを追加したり,ページの修正をしたり,ページを削除した場合です. 追加されたページ,修正されたページ,削除されたページは自動的に判別し, インデックスを更新しますので,基本的に上で入力した値のままインデックスを 作成するだけです.

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

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

    例えば,旅行記という文字が含まれているページを検索する場合は,テキスト ボックスにキーワード("旅行記")を入力し,検索ボタンを押します.
     後はgoogoogleと同じ要領です.  検索フォームを自分のホームページに貼り付けたい場合は,FAQ を参照して下さい.

  8. インデックスを管理しましょう.

     インデックス型検索エンジンの場合,インデックスを作成した時点での検索対象 ファイルの中身で検索が実行されます. そのため,インデックスを作成した後でホームページの内容に修正や追加が削除が あったとしても,それは自動的に反映されません. その度ごとにインデックスを作り直す必要があります. ただし,msearchではなるべく簡単にインデックスが更新できるようにCookieに対応 したり,差分のみを更新しています.

     ver.1.50からはインデックス管理に関わるメニューを追加しました. と言っても,大した管理機能ではありません.ftpのクライアントソフトを 使わなくても基本的な操作ができるようにしただけです.(汗)
    6のインデックス作成フォームに「msearch用インデックス補助ツール」という リンクがあります.これをクリックすると下の様なインデックス補助ツールが 表示されます(省略しています).

    インデックス作成フォームに戻るには,「msearch用インデックス作成フォーム」と いうリンクをクリックして下さい.
     メニューには,(1)各種情報の取得,(2)インデックスの削除, (3)空インデックスの作成,(4)インデックスの結合,があります. 詳細な説明はメニューに書いてあるので省きますが,補足だけしておきます. (1)の各種情報の取得は,インデックスが上手くできない時などにその原因を調査 するための情報が一通り出てきます.掲示板で質問する時にご利用下さい.ただし, セキュリティ上問題のある項目も出てきますので,適宜削除して下さい. (4)のインデックスの結合は,サーバの制限で一度に対象ファイル全部のインデックス ができない場合に,ディレクトリ単位毎にインデックスを作り,それらのインデックス をマージするために使って下さい.もちろん,ディレクトリ単位のインデックスを 作る時には,"default"以外のユニークな名前を付けて下さい("dir01","dir02"等).

 高度な設定
 ここでは,msearch.cgiの引数について説明します. cgiの引数は,URLで直接指定するか,HTMLのinputタグを用いて指定します. 以下は引数の一覧です.
変数名説明
query 検索式が入ります.queryが空の場合は,help画面が表示されます. 検索式は検索結果画面が表示された後でも引き継がれます.
num 一画面に表示する検索結果の件数です.デフォルトでは,設定ファイルの resultフォーマット変数の繰り返し数が使われますが,URL等で明示的に指定 するとこちらを優先します.
set 表示する検索結果のページ番号です.先頭ページは1です.検索フォーム(HTML) でinputタグを使ってset=2のように引数として与えると,必ず2ページ目が表示 されることになります(意味はないし,迷惑ですが...).
index 検索対象のインデックスを指定します.indexが空の場合は,デフォルトの インデックス(default)を検索対象とします.検索フォーム(HTML)でselectタグを 使ってインデックスを切り替える等ができます.
config 設定ファイルを指定します.configが空の場合は,indexの値と同じ設定 ファイルを読み込みます.
hint クエリーの漢字コードを判定するためのヒント文字列を与えます.hintが 空の場合は,msearchで漢字コードを判定しますが,漢字コード自身の問題が あるため,完全ではありません.是非hintを付けることをお勧めします.
 検索フォーム(HTML)を用いてもう少し具体的に説明します. 以下の検索フォームはFAQで示しているものです.
<form action="/cgi-bin/msearch.cgi" accept-charset="x-euc-jp"> ---(1)
<table border="0" cellspacing="0" cellpadding="3">
<tr>
<td align="left" bgcolor="#F8FE00">
    <small><font color="black"><b>HP内検索エンジン</b></font></small></td>
<td align="right" bgcolor="#F8FE00">
    <small><a href="/cgi-bin/msearch.cgi">help</a></small></td> ---(2)
</tr>
<tr>
<td valign="center" align="center" bgcolor="#F8FE00">
    <small><input type="text" size="20" name="query" value=""></small></td> ---(3)
<td valign="center" align="left" bgcolor="#F8FE00">
    <small><input type="submit" value="検索"></small></td>
</tr>
</table>
<input type="hidden" name="hint" value="漢字コード判定用文字列"> ---(4)
</form>
(1)と(2)の行でmsearch.cgiを呼び出す設定をしています. (2)は特にヘルプ画面を出す呼び出しで,引数なしになっています. (3)はinputタグのtextボックスに入力された検索式をquery変数にバインドして, 引数としています. (4)は漢字コード判定用の文字列をhintに与えています(ある程度の長さの文字列なら大体OKです).
 ここで少し引数を追加してみます.
<form action="/cgi-bin/msearch.cgi" accept-charset="x-euc-jp"> ---(1)
<table border="0" cellspacing="0" cellpadding="3">
<tr>
<td align="left" bgcolor="#F8FE00">
    <small><font color="black"><b>HP内検索エンジン</b></font></small></td>
<td align="right" bgcolor="#F8FE00">
    <small><a href="/cgi-bin/msearch.cgi">help</a></small></td> ---(2)
</tr>
<tr>
<td valign="center" align="center" bgcolor="#F8FE00">
    <small><input type="text" size="20" name="query" value=""></small></td> ---(3)
<td valign="center" align="left" bgcolor="#F8FE00">
    <small><input type="submit" value="検索"></small></td>
</tr>
<tr>
<td valign="center" align="right" bgcolor="#F8FE00">
    <small>検索対象を選んで下さい</small></td>
<td valign="center" align="left" bgcolor="#F8FE00">
    <select name="index"> ---(5)
        <option value="default">すべて ---(6)
        <option value="northamerica">北米旅行記 ---(7)
        <option value="asia">アジア旅行記 ---(8)
        <option value="europe"ヨーロッパ旅行記 ---(9)
    </select></td>
</tr>
</table>
<input type="hidden" name="num" value="20"> ---(10)
<input type="hidden" name="hint" value="漢字コード判定用文字列"> ---(4)
</form>
(5)の行でindex変数を使っています.続く(6)〜(9)で検索ユーザに検索対象の インデックスを選択させています.それぞれ選んだインデックスの名前(defaultや northamerica等)がindex変数にバインドされて引数となります.
また,(10)の行で一度に表示する件数を20件にしています(検索フォームでこのように 指定するより,設定ファイルで設定することをお勧めします).

 次に,インデックスと設定ファイルの関係について説明します. 以下では,検索フォーム(HTML)ではなく,URLを用います.

インデックス設定ファイル 説明
1つ(デフォルト)1つ(デフォルト) それぞれデフォルト(default.idxとdefault.cfg)を使う場合には,何も設定する 必要はありません.
msearch.cgi?query=○○
1つ(別名)1つ(デフォルト) インデックスをデフォルトではない名前(例えば,camera.idx)を付けて作成して, 設定ファイルがデフォルト(default.cfg)の場合は,indexのみ指定すればOKです.
msearch.cgi?index=default&query=○○
1つ(デフォルト)1つ(別名) インデックスがデフォルト(default.idx)で,設定ファイルがデフォルトでない 名前(例えば,my.cfg)の場合は,configのみ指定すればOKです.
msearch.cgi?config=my&query=○○
複数(デフォルトを含む)1つ(デフォルト) インデックスが複数あり(camera.idx等),設定ファイルがデフォルトの場合は, indexのみ指定すればOKです.
msearch.cgi?index=camera&query=○○
もちろん,デフォルトインデックスを使う場合はindexも不要です.
複数(デフォルトを含む)複数(デフォルトを含む) インデックスに応じて設定ファイルを切り替えたい場合は,URLで明示的に 両方を指定して下さい.
msearch.cgi?index=camera&config=my&query=○○
ただし,インデックスと同じ名前の設定ファイルを用意した場合は,configは 設定する必要ありません.
msearch.cgi?index=camera&query=○○
この例では,camera.idxというインデックスに対応するcamera.cfgという 設定ファイルがあることを前提としています.
すなわち,設定ファイルが明示的に指定されていれば(config=○○) それを使い,指定されなければ,インデックスと同じ名前の設定ファイルを使い,それ もなければデフォルトの設定ファイルを使います.

 msearch 1.52以降は設定ファイルとインデックスの置けるディレクトリが制限さ れています. その制限とは,msearchを設置したディレクトリにしかそれらのファイルを置けなく なっていることです. これはセキュリティを確保するためです. しかし,複数のインデックスや設定ファイルを用意し,それらを切り替えて使って いる場合等,msearchを設置したディレクトリ以外にそれらのファイルを置いて管理 したいという要求があるものと考えます. そこで,msearch 1.52以降では,allow.plというファイルを同梱しています. 以下,インデックスや設定ファイルを特定の場所に置けるようにする設定を説明 します.

  1. allow.plを編集する
    allow.plをEUCが使えるエディタで開きます.
    12行目にある@g_allowがインデックスや設定ファイルを置くことを許可する ディレクトリの配列となります. 例えば,msearch.cgiが/home/user1/cgi-bin/msearch/msearch.cgiという ディレクトリにあるとします./home/user1/cgi-bin/msearch/user1index/user1.idx というインデックスファイルと/home/user2/www/user2.idxというインデックス ファイルを読み込めるようにするには,以下のように@g_allowを設定します.
      @g_allow = (
            "./",
            "user1index/",
            "../../../user2/www/",
            );
    
    先頭の"./"は必要なので消さないで下さい. またこのディレクトリの順番通りにインデックスや設定ファイルを探します. 上記の@g_allowの配列だと,msearch.cgi?index=fooというCGI呼び出しの場合,まず "./"ディレクトリのfoo.idxを探し,次に"user1index/"ディレクトリのfoo.idxを探し, 最後に"../../../user2/www/"ディレクトリのfoo.idxを探します.
     設定ファイルの探し方は若干異なります.msearch.cgi?index=fooというCGI呼び出し の場合,foo.idxというインデックスファイルが例えば"user1index/"ディレクトリに 存在した場合は,その同じディレクトリにfoo.cfgがある場合のみその設定ファイルを 読み込みます. もしfoo.cfgがなければmsearch.cgiがあるディレクトリのdefault.cfgを読み込みます. これを避けたい場合は,msearch.cgi?index=foo&config=barのようにconfigパラメータ を指定して下さい.

  2. allow.plをアップロードする
    編集したallow.plをサーバにアップロードします.

  3. msearch.cgiを編集する
    msearch 1.52に入っているmsearch.cgiをEUCが使えるエディタで開きます. 202行目の「#require './allow.pl';」を「require './allow.pl';」に変更して 下さい(すなわち,"#"を削除).

  4. msearch.cgiをアップロードする
    編集したmsearch.cgiをサーバにアップロードします.
 以上で完了です.

 ログファイルについてですが,設定ファイルが切り替えられるとその設定ファイル で指定されたログファイルにログを出力します. すなわち,設定ファイルを切り替えて使っていて,その設定ファイルすべてで同じ ログファイル名を指定した場合は,すべて同じログファイルにログを出力します. 逆に,ある設定ファイルのみログファイル名を違うファイル名にした場合は,その 設定ファイルを使った検索のログのみ別のログファイルに出力されます.

 全検索対象のファイルに共通して検索キーワードにしたくない文字列の指定は, インデックス作成フォームの「非対象キーワード」で設定できますが,これは全ての ファイルからキーワードを削除してしまいます. あるHTMLファイルの一部分を検索対象に入れたくない場合もあると思います. その場合は,<msearch>タグをHTMLに入れて下さい.

ここはインデックス化されます.<br>
<msearch>ここはインデックス化されません.</msearch>
ここもインデックス化されます.<br>
このようなHTMLは,ブラウザでは,
ここはインデックスされます.
ここはインデックス化されません.
ここもインデックスされます.
このように見えます(<msearch>タグはブラウザで無視されます). しかし,『ここはインデックス化されません.』の部分はインデックスには入りません.

 カスタマイズの方法
 ここでは,設定ファイル(default.cfg)を用いた各種設定方法と検索結果画面 およびヘルプ画面のカスタマイズの方法について説明します. ヘルプ画面とは,引数なしでmsearch.cgiを呼び出した時に表示される画面です. 1.40からカスタマイズは設定ファイルで行うようになり,perlのパスの変更以外 の全ての設定をこの設定ファイルで行うことができます. perlのパスさえ,ご自身の環境に合っていれば,msearch.cgiは全く触る必要が なくなりました.
 設定ファイルは,漢字コードがEUCで,改行コードが LFのみとなっています. ローカルで編集する場合はどのような漢字コードや改行コードでも構いませんが, アップロードする際には,EUCとLFに変換しておいて下さい. ほとんどのftpクライアントソフトはこの変換をサポートしているはずです.

 default.cfgファイルは下の図のような構成になっています.

 1の変数設定では,msearchが用いる各種変数を設定します. 2のフォーマット設定では,検索結果画面やヘルプ画面の見た目(フォーマット) を設定します. 以下,それぞれについて説明します. なお,default.cfg中では,行頭に'#'を入れると,行末までをコメントとして 解釈します.

  1. 変数設定
    ここで設定できる変数は以下の通りです.
    変数名デフォルト値 説明
    $home""(なし) フォーマット中で使える変数$$home$$の値となる(後述).
    $highlight1 検索結果に表示されるマッチ箇所の部分文字列中のキーワードをハイライト (強調表示)するかどうか.しない場合は0にする.
    $highlight_deco<b> 上のハイライトの方法.HTMLのタグで書く.
    $tzdiff0 サーバマシンのタイムゾーンと表示したいタイムゾーンとの時間差. 例えば,サーバが米国西海岸にあり,日本時間で表示したい場合は17とする.
    $notitleタイトルなし タイトルがないページのタイトル部分表示($$title$$で使用.後述)文字列.
    $log0 検索のログを出力するかどうか.出力する場合は1とする.
    $logfilemsearch.log 上の検索ログのファイル名.msearch.cgiの置いてあるディレクトリからの 相対パスで書く.
    $logformat ログ出力の書式を指定する.使える変数はdate(日時),remote(接続元), ua(ユーザエージェント),hit(ヒット数),query(検索式)です.dateは, 下の$dateformatで指定した書式です.config.datを参考のこと.
    $logencodingeuc-jp ログの漢字コードを指定する.SJIS(shift_jis)またはJIS(iso-2022-jp)も 指定できる.
    $dateformat 日時表示の書式を指定する.使える変数はyear(年),month(月),day(日), hour(時),minute(分),second(秒).1桁の数値は先頭に0が付く. config.datを参考のこと.
    $encodingeuc-jp msearch.cgiが出力するHTMLの漢字コードを指定する.例えば,i-mode用 の検索システムを作る場合はshift_jisを指定すればOK.iso-2022-jp(JIS)は 正常に検索できない可能性が高い(漢字INと漢字OUTの関係で).
    これらの変数の設定は,default.cfgのどこでも構わないが,各変数単位で, 行頭から以下のように記述する必要がある.
    set $home=http://www.kiteya.net/
    変数名(この場合$home)と=と値(この場合http://www.kiteya.net/)との間と,値 の後にはスペースやタブを入れないで下さい.
     これらの変数はデフォルト値以外の値を設定したい場合にのみ設定すれば OKです. 添付のdefault.cfgのサンプルでは,$homeのみ値を設定しています.

  2. フォーマット設定
     フォーマット設定とは,msearch(実際にはmsearch.cgi)の実行結果の画面表示 のテンプレートを作ることです. msearchの実行結果の画面は,検索結果画面とヘルプ画面の2つがあります. 検索結果画面とは,msearchを検索キーワードをつけて実行した時に出てくる画面 です. ヘルプ画面とは,msearchを引数なしで実行した時に出てくる画面です. こんな感じ です.
     フォーマットは,各画面毎にHTMLを使って定義します. この定義の一般系は,以下の通りです.
    begin format [num]
    HTML
    end
    formatはフォーマットの種類を指定し,numは繰り返し回数が必要な フォーマットの場合に指定し,HTMLの部分にフォーマットをHTMLを使って定義し, endで終了します. なお,変数設定(set)と同様にbeginとendは行頭から 記述して下さい.
     formatには,以下のものがあります.
    フォーマット繰り返し回数 説明
    page不要 検索結果画面のフォーマット.
    result必要 検索結果のヒット項目のフォーマット(pageの下位フォーマット).
    previous不要 検索結果の直前の結果ページへのリンクのフォーマット (pageの下位フォーマット).現在表示中の検索結果が2ページ目だったら, 1ページ目に戻るためのリンク.
    next不要 検索結果の直後の結果ページへのリンクのフォーマット (pageの下位フォーマット).現在表示中の検索結果が1ページ目だったら, 2ページ目に進むためのリンク.
    pset必要 検索結果の現在表示ページより前のページを表示するリンクのフォーマット (pageの下位フォーマット).
    cset不要 検索結果の現在表示ページを表示するフォーマット(pageの下位フォーマット).
    nset必要 検索結果の現在表示ページより後のページを表示するリンクのフォーマット (pageの下位フォーマット).
    help不要 ヘルプ画面のフォーマット.
     各フォーマット中では,どのようなHTMLでも記述することができます. スタイルシート等も使うことができますので,検索結果やヘルプ画面の見かけは ほぼ完全に自由に設定できます. ただ,1つ違うのは,このHTMLの中に特殊な変数を埋め込んでおくと,msearchが 自動的にその変数を該当する値に差し替えて表示する,という点です. この特殊な変数をフォーマット変数と呼びます. フォーマット変数は以下の通りです.
    フォーマット変数使えるフォーマット 説明
    $$result$$page resultフォーマット.
    $$previous$$page previousフォーマット.
    $$next$$page nextフォーマット.
    $$pset$$page psetフォーマット.
    $$cset$$page csetフォーマット.
    $$nset$$page nsetフォーマット.
    $$encoding$$page,help 漢字コードの種類.charsetに使う.
    $$msearch$$page,help msearchのcgi名.
    $$home$$page,help ホームページのURL.
    $$index$$page,help インデックス名.サフィックス(.idx)は除く.
    $$config$$page,help 設定ファイル名.サフィックス(.cfg)は除く.
    $$query$$page 現在の検索式.
    $$rpp$$page,help 1ページあたりの表示件数.
    $$total$$page 検索結果の総数.
    $$set$$page,cset 現在の検索セット(表示ページ)の番号.
    $$from$$page 現在の表示ページに表示される先頭項目の通し番号.
    $$to$$page 現在の表示ページに表示される後尾項目の通し番号.
    $$displaynum$$page 現在の表示ページに表示される項目の件数.
    $$cputime$$page,help かかった処理時間.
    $$indexdate$$page,help インデックスの最終更新日時.
    $$indexnum$$page,help インデックスに登録されているページ総数.helpフォーマットでこの変数を 使うと若干表示が遅くなります(インデックスを読み込むため).
    $$nowdate$$page,help 現在日時.
    $$msearchhp$$page,help msearchの配布ページのURL.
    $$version$$page,help msearchのバージョン.
    $$resultnum$$result ヒット項目の通し番号.
    $$url$$result ヒット項目のURL.
    $$urldeco$$result ヒット項目のURL.ただし,URL検索の場合は,マッチ部分が強調されたURL となります.そのため,<a>タグ内では使わないで下さい.
    $$title$$result ヒット項目のタイトル.
    $$summary$$result ヒット項目のサマリー(マッチ部分文字列).
    $$previousurl$$previous 直前セット(前ページ)へのアクセスURL.
    $$nexturl$$next 直後セット(次ページ)へのアクセスURL.
    $$seturl$$pset,nset 検索セットへのアクセスURL.
    $$setnum$$pset,nset 検索セットの番号.
     この表のフォーマット変数のうち,赤字で書かれている フォーマット変数は特殊な変数です. 上のフォーマットの表に全く同じ名前のフォーマットがあることがポイントです. msearchは,pageフォーマット(検索結果画面)中のこれらの赤字のフォーマット 変数を見つけると,そのフォーマット変数を,フォーマット設定で定義した同じ 変数名のフォーマットで差し替えます. 分かり難いかもしれないので図で説明します.
     msearchは,pageフォーマットを用いて検索結果画面を作成します. pageフォーマット中に現れる普通のフォーマット変数(上の図だと$$msearch$$ や$$total$$などの青字で書かれた変数)は,msearch のメモリ中の値で入れ替えます. 図だと,$$msearch$$はmsearch.cgiに$$total$$は100という値で差し替えられます.
     そして特殊なフォーマット変数(上の図だと$$result$$や$$previous$$などの 赤字で書かれた変数)は,対応するフォーマット(この 場合はresultフォーマットやpreviousフォーマット)のHTMLで差し替えられます. この時対応するフォーマットの中にある普通のフォーマット変数は同様にmsearch のメモリ中の値に差し替えられます(上の図だと$$resultnum$$や$$url$$など).
     特殊なフォーマット変数のうち,$$result$$と$$pset$$と$$nset$$は,それぞれ 対応するフォーマットで設定した繰り返し回数分が繰り返されます. 上の図の場合だと,pageフォーマット中に$$result$$があります. そして$$result$$に対応するフォーマットresultは10回の繰り返し回数が設定 されています. 従って,pageフォーマットの$$result$$の位置に,begin result 10からendまでの 間にある3行が10回繰り返して表示されます. resultフォーマットで参照できるフォーマット変数は呼ばれる毎に値が変わります. この場合,検索結果のマッチ項目が順々に(検索結果の1件目,2件目というように) これらのフォーマット変数に入ることになります.
     また,これら繰り返し回数を指定するフォーマットは,指定された繰り返し 回数に満たない場合は途中で終了します. 例えば,begin result 10としていても,検索結果の件数が8件だと,8回しか 繰り返されません. また,begin pset 5としていても,現在表示しているページが3ページ目だと, 1ページ目と2ページ目の2回しか繰り返されません.
     繰り返し回数の指定をしなくても良いpreviousとnextも同様に表示すべき検索 セット(ページ)がない場合は表示されません. 例えば,検索結果の1ページ目だと,その前のページはないので,previous フォーマットは表示されず,$$previous$$は""(空文字列)で差し替えられます.

 以上でdefault.cfgの設定方法の説明を終りますが,具体的な書き方は添付の default.cfgをご覧下さい.

 また,default.cfg等の設定ファイルは,作者の許可なく再配布が可能です. かっこいいフォーマットができたら公開してみては如何でしょうか?
公開するHPのURLを作者まで連絡して頂ければ,フォーマット公開ページとして リンクしたいと思います. よろしくお願いします.

 FAQ
  1. msearch.cgiやgenindex.cgiをメモ帳で見ると文字化けしているのですが.[全]

    msearchの各スクリプトはEUCという漢字コードで書かれています. そのため,windowsのメモ帳などSJIS漢字コードしか表示できないエディタでは 文字化けしているように見えてしまいます. EUCで書かれたファイルを表示,編集できるエディタをお使い下さい.
    そのようなエディタは Vectorのテキストエディタカテゴリーでたくさん見つけることができます.

  2. 検索フォームをページに貼り付けるには?[全]

    以下に例を示します.

    <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>
    <td align="right" bgcolor="#F8FE00">
        <small><a href="/cgi-bin/msearch.cgi">help</a></small></td>
    </tr>
    <tr>
    <td valign="center" align="center" bgcolor="#F8FE00">
        <small><input type="text" size="20" name="query" value=""></small></td>
    <td valign="center" align="left" bgcolor="#F8FE00">
        <small><input type="submit" value="検索"></small></td>
    </tr>
    </table>
    <input type="hidden" name="hint" value="漢字コード判定用文字列">
    </form>
    
    このHTMLソースを検索フォームを入れたい場所に貼り付けるだけでOKです. ただし,赤色の部分は,そのページのURLから見たCGIの 相対パスか絶対パスを入れて下さい.

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

     基本的に不可能です. しかし,同じことを別の方法で実現することが可能です. 以下のようにします.
     あなたのホームディレクトリを"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つの ディレクトリ以外を非対象ディレクトリとしてインデックスを作るのです.

  4. インデックスが作れないのですが?[全]

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

    1. ディレクトリ移動のパーミッションがない.
      genindex.cgiを置いてあるディレクトリのパーミッションは 755である必要があります(サーバによっては705でも OK).
    2. CGIからファイルを作ることができない制限になっている.
      サーバによってはCGIから新しいファイルを作ることができない設定になっている 場合があります. この場合は,mindex.dat(1.50以降はdefault.idx)という大きさ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等で アップロードします. バージョン1.50以降はmindex.datではなく,default.idxと読み替えて下さい.
    4. CGIのメモリ使用量に制限がかかっている.
      サーバによってはCGI1プロセスあたりのメモリ使用量に制限をかける設定になって いる場合があります. この場合も上と同様に分割してアップロードするか,genindex.plを使ってローカル PC上でインデックスファイルを作ってアップロードして下さい.
    5. プログラムのバグ.
      今のところバグは見つかっていませんが,可能性はあります.(^o^;

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

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

  6. いちいちインデックスを作り直すのが面倒なのですが.[1.2以上]

     もしあなたのお使いのWebサーバでcronが使えるなら定期的にインデックスを自動 更新することが可能です.(※cronって何?という人は諦めて下さい)
    インデックスの自動更新にはgenindex.plを使います. genindex.plは以下のように質問してきます (ver.1.50以上に準拠しています.ver.1.4x以下のバージョンの 場合はこちらを見てください)ので, それに合った値を用意し,shスクリプト(cshやperlでも勿論OK)を作ります.

    1. インデックスの名前は?
    2. インデックス対象ディレクトリは?
    3. インデックス対象ディレクトリのURLは?
    4. インデックス対象ファイルの拡張子は?
    5. 非インデックス対象ディレクトリは?
    6. 非インデックス対象ファイルは?
    7. 非インデックス対象キーワードは?
    8. ランキング方法は?
    9. alt属性の文字をインデックスに含めますか?
    ただし,ランキング方法は0〜6の数値で答えなければなりません.
    [1] 最終更新日時-降順
    [2] 最終更新日時-昇順
    [3] タイトル-降順
    [4] タイトル-昇順
    [5] URL-降順
    [6] URL-昇順
    [0] なし
    また,alt属性についても0〜1の数値で答えなければなりません.
    [1] 含める
    [0] 含めない
    例えばshスクリプトは以下のようになります. 値はインストール方法で使っている値を使っています. ランキングは[1]最終更新日時-降順です.
    (注)非対象キーワードに日本語を使う場合,shスクリプトの 漢字コードはEUCでなければなりません. また,非対象ディレクトリや非対象ファイルに正規表現を用いる場合は, shが展開しないようにクオートして下さい (この意味が分からない人は正規表現を使うのを諦めて下さい).
    ======== shスクリプトの例 =======
    #!/bin/sh
    
    ./genindex.pl <<HERE
    msearch
    ../
    http://www.foo.co.jp/~bar
    .html,.htm,.shtml
    cgi-bin,secret
    secretfile.html
    検索,私
    1
    1
    HERE
    ======== shスクリプトの例 =======
    
    後は,このスクリプトをautogenindex.shとでもして,パスの通ったディレクトリ に置きます. genindex.plはautogenindex.shと同じディレクトリに置いておきます. crontab -eで,このスクリプトを定期的に動かすようにすればOKです. 例えば,毎日午前0にインデックスを更新するためには以下のようにします.
    0 0 * * * autogenindex.sh

  7. 1.21と1.3のインデックスに互換性がありますか?[1.21&1.3]

     残念ながらありません. 1.21から1.3にアップデートするためには,1.21で作ったインデックス(mindex.dat) を削除し,1.3のgenindex.cgiで新しくインデックスを作り直して下さい.

  8. 1.31の「正しい全角1文字の検索」とは何ですか?[1.3以上]

     msearch1.3を含むほとんどのフリーの全文検索エンジン(漢字コードにEUCを用いて いるもの)では,「好」や「粒」や「隆」などの全角文字の1文字だけを検索 キーワードとして検索すると,それらの検索キーワードを含んでいないページを 検索してしまったり(適合率が低下),検索結果の一覧においてマッチ部分を強調 表示している場合,文字化けが起こったりします. これはEUC(正しくはEUC-JP)の漢字コードの構造上の問題です. 例えば,「好」という文字は,「0xB9 0xA5」という2バイトで構成されています. 一方,「テスト」という文字列の「ス」と「ト」はそれぞれ「0xA5 0xB9」と 「0xA5 0xC8」で構成されています. つまり,「スト」を連続して表すと, 「0xA5 0xB9 0xA5 0xC8」です. 本来なら「テスト」には「好」という文字は含まれないのですが,「スト」の 2バイト目と3バイト目(赤字部分)に「好」の 「0xB9 0xA5」がマッチしてしまいます. そのため,過剰検索(キーワードが本当は含まれないのに含まれていると判断 してしまう)が行われてしまいます. また,検索結果の一覧でマッチ部分を強調表示する時に 「スト」の「ス」の後半から「ト」の前半にかけて例えば<b>と</b> などのタグを挿入してしまい,そこから文字化けが発生してしまいます.
     バージョン1.31は,このような過剰検索や文字化けが起こらないようになって います. and検索,or検索,not検索,title検索いずれにおいても正常に検索することが できます. ただし,全角1文字の検索キーワードを使うと検索速度が格段に落ちてしまい ます. 作者のテスト環境では10倍以上遅くなってしまいます. しかし,全角1文字のキーワードを使わないなら,速度は1.3とほとんど変わり ません.
    (注) 1.40からはアルゴリズムを見直し,10倍以上の検索速度向上(つまり他の 検索とほぼ同等)を実現しています.

  9. 全角1文字のキーワードで検索すると止まってしまうのですが?[1.31〜1.33]

     WWWサーバマシンのメモリ不足が原因です.
     全角1文字のキーワードがある場合のみ,キーワードマッチのアルゴリズムを 変えています. 具体的には,perlのバージョン5以上で利用できる「先読み」の正規表現を使って います. そのため,マッチング対象(msearchでは対象ページ1ページに相当)の文字列の長さ が長い場合,メモリ不足でマッチングが止まってしまいます. これを回避するための仕組みがmsearchには備わっています. msearch.cgiの$g_maxsizeというパラメータです. デフォルトでは,20,000バイト以上の長さのページは20,000バイト相当でページを 分割してマッチングをします (この20,000バイトという数値は作者のサーバマシンでマッチングが止まらない サイズです.なお,1Gバイト以上のメモリを積んだサーバマシンで試したところ 20,000バイト以上でも大丈夫でした.). ですので,検索が止まってしまう場合はこの$g_maxsizeの値を少なく(例えば10,000) してみて下さい.
    (注) 1.40以上ではこの問題はなくなっています.

  10. 非対象キーワードで指定したキーワードが検索結果に出てくるのですが? [1.33以上]

     1.32以前のインデックスが存在する場合は,一度インデックスを削除してから, もう一度インデックスを作り直して下さい. 更新がされていないファイルは非対象キーワードを含んでいるかいないかに関わら ず,インデックスの更新はしないため,更新されていないファイルに含まれる非 対象キーワードが検索結果に出てくる可能性があります.
     また,非対象キーワードを変えた場合も同様にインデックスを一旦削除してから, インデックスを作り直して下さい.

  11. 検索結果を別フレームに表示する方法は?[全]

     FAQの2で示した検索フォームで説明すると,先頭の<form action...>を以下の ようにします.

    <form action="/cgi-bin/msearch.cgi" target="result" accept-charset="x-euc-jp">
    
    赤色の部分は検索結果を表示したいフレーム名に適宜 変更して下さい.

  12. フォーマット変数$$url$$はどこが変わったの?[1.43以上]

     1.40〜1.42のフォーマット変数$$url$$にはバグが含まれており,URL検索が行わ れた場合,$$url$$には正しいURLではなく,強調表示されたURLがバインドされて いました. そのため,検索結果のタイトル部分をクリックしても正しいURLに飛ぶことができ ませんでした.
     1.43では正しいURLがバインドされる$$url$$と,強調表示がされる可能性がある (URL検索の場合)URLがバインドされる$$urldeco$$に分かれました. URL検索以外の検索方法の場合は,$$url$$と$$urldeco$$は全く同じ値がバインド されます.

  13. 1.43と1.44のインデックスに互換性がありますか?[1.43&1.44]

     残念ながらありません. 1.43から1.44にアップデートするためには,1.43で作ったインデックス(mindex.dat) を削除し,1.44のgenindex.cgiで新しくインデックスを作り直して下さい.

  14. IBM拡張漢字が入っていると文字化けがするのですが?[全]

     msearchはIBM拡張漢字に対応していません. お手数ですが,同体異文字に修正の上,ご利用下さい.

  15. genindex.plをWindowsのコマンドプロンプト上で実行すると文字化けするのですが?[全]

     Windowsのコマンドプロンプトの漢字コードはSJISです.genindex.plはデフォルト ではEUCで出力します. 実はgenindex.plには隠しコマンドがあります.

    C:\> perl genindex.pl -s
    のように"-s"とオプションを指定するとSJISでgenindex.plと対話できます. また,同様に"-j"とするとJISで出力されます(1.46以降).

  16. 1.50にバージョンアップしたら,インデックスがありませんと言われました.[1.50以上]

     1.50からインデックスのファイル名が変更になりました.インデックス自体は 1.44〜1.46と互換性がありますので,ftpクライアントソフト等を使って従来の インデックス(mindex.dat)を新しいデフォルトインデックス(default.idx)に変更 して下さい.

  17. インデックス名をデフォルト以外にしたら検索できなくなりました.[1.50以上]

     デフォルトのインデックス名(default.idx)の場合は,1.46以前と同様の呼び出し が使えますが,デフォルト以外のインデックス名でインデックスを作った場合には, そのインデックスを使うようにmsearchに指示する必要があります. 例えば,インデックス名を"test"とした場合,↑のFAQの検索フォームは次のように しなければなりません.

    <form action="/cgi-bin/msearch.cgi?index=test" 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>
    <td align="right" bgcolor="#F8FE00">
        <small><a href="/cgi-bin/msearch.cgi?index=test">help</a></small></td>
    </tr>
    <tr>
    <td valign="center" align="center" bgcolor="#F8FE00">
        <small><input type="text" size="20" name="query" value=""></small></td>
    <td valign="center" align="left" bgcolor="#F8FE00">
        <small><input type="submit" value="検索"></small></td>
    </tr>
    </table>
    <input type="hidden" name="hint" value="漢字コード判定用文字列">
    </form>
    
    赤字の部分が修正箇所です.

  18. 検索フォームではインデックスとスキンが正常に指定できるのですが, 検索結果画面以降ではうまくいきません.[1.50以上]

     検索フォームと同じように設定ファイルの中でもインデックスと設定ファイル を引数として渡すように設定しなければなりません. すなわち,設定ファイルの検索結果画面のフォーマット(begin page〜end)や ヘルプ画面のフォーマット(begin help〜end)でもインデックスとスキン(設定ファイル) が引数としてmsearch.cgiに渡るようにしなければならないということです. デフォルト設定ファイル(default.cfg)を見て下さい. 検索結果画面のフォーマットの中で,次のような指定をしています.

    <input type="hidden" name="index" value="$$index$$">
    <input type="hidden" name="config" value="$$config$$">
    
    この指定で直前に使われたインデックスとスキンを次の検索でも使うように msearch.cgiに指示している訳です.
    また,ヘルプも同様です.
    <a href="$$msearch$$?index=$$index$$&config=$$config$$">ヘルプ</a>
    
    このように,検索結果画面に表示されるヘルプのリンクをクリックした場合には, 同じインデックスとスキンでヘルプ画面を表示するようにmsearch.cgiに指示して います.
    ヘルプ画面のフォーマットでも同じように設定して下さい.

  19. ディレクトリトラバースの脆弱性(JVN#8BAAAB4E)は対応しなければなりませ んか?[1.50〜1.51]

     可能な限り速やかに1.52以上にバージョンアップして下さい. 詳しい情報はこちらをご覧下さい.

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