homeホームHTMLに役立つヒント> KISS-Search導入記

KISS-Search導入記

 これは近藤靖浩さんの開発した全文検索システム、KISS-Search導入記です。作者の近藤さんに感謝。この記述ではβ3を対象にしています。現在、こちらでテストしてます(2002/10/1にプロバイダのサーバの仕様が変更され、CGIラッパーが導入されました。このため現在KISS-Searchは動かなくなっています<(_ _)>)。
 「検索テスト」ページも参照してください。

[改定日: 05/06/23 17:58]  あなたはここへ来た、 13006番目の人です。(2001/8/2から)


■■ 目次 ■■


■導入の目的 ▲ページトップ

 僕の導入目的は「コンパクトカメラデータ」内の検索です。ご覧のように、各社のコンパクトカメラのデータを1機種1htmlとして入力しています。現行のコンパクトカメラのデータはほぼ入力し終わったところです。

 この状態で条件を入れて検索すると(例:「28mm/ 単焦点 現行品」)、その条件にあったカメラの一覧が表示される、というのが目的なわけです。現在、メーカー各社は自社の製品についてはホームページに掲載していますが、このように条件を入れて横断検索できるものは他に見あたりません。また、メーカーのホームページデータは「現行品」に限られており、中古で購入した古い機種のデータはないことが多いのです。

 データファイルは現在約300あり、増えることはあっても減ることはないです。現行機種の入力が終わったら、さかのぼって入力する予定です。年間の新製品が20機種と仮定して、90年代だけで200機種となりますから、それを入力すると全部で500ファイルとなる見込みです。できれば80年代の機種もサポートしたいので、さらに200増えるかも(資料がなかなか手に入らない)。

 今は「とほほのWWW入門」の「検索フォーム」を使って検索しています。
 さすがにファイル数が増えすぎたようで、混んでいる時間帯では「検索フォーム」では検索結果が表示されないケースがしばしばあります。なのでもっと強力な検索を導入したいのです。

 NAMAZUはSU権限がなく導入できませんでした。prefixオプションで自分のディレクトリにインストールしようとしてもエラーでダメ。あちこち見て回って、インデックスタイプのKISS-Searchにたどり着いたわけです。


■ファイルのダウンロード ▲ページトップ

KISS-Searchからsearch.tar.gzをダウンロードしてくる。
 必要なファイルはこれだけなのでラクチンラクチン。


■インストール ▲ページトップ


■設定する ▲ページトップ


■インデックスを作る ▲ページトップ

●telnetで「search/.scripts」に移動します。次に「./indexmgr」と打ち込んで、インデックスを作ります。エラーもなく、すんなり動いてくれました。

 僕の場合、300ファイル程度で7分ほどかかりました。できあがったインデックスの大きさは216Kでした。
(追記:2001/3/15インストールをやり直しました。約500ファイルで、インデックスにかかった時間は約50分、できあがったインデックスの大きさは389Kでした。)

※設定・管理にはブラウザから「search/admin/」にアクセスすると管理用ページが表示され、ここから行うこともできます。

 ただし、作者の近藤さんは、ここからインデックスを作ると時間がかかるから、telnetでやった方がいいよといってます。


■管理する ▲ページトップ

●設定・管理にはブラウザから「search/admin/」にアクセスすると管理用ページが表示され、ここから行うこともできます。

 このページから何かするためには、最初にメニューの一番上にある「パスワードの変更」でパスワードを設定しなくてはいけません。なお、僕の場合は「search/admin/.htaccess」と「search/.data」ディレクトリのパーミッションを変更して書き込み可能にしなくてはパスワードの設定ができませんでした。

 また、正しく入力しているにもかかわらず、認証に失敗してしまい、管理機能はまだ試すことができません。何がおかしいんだろう? 認証の失敗については、いったんsearchディレクトリを全部削除し、最初からインストールし直して再度試しても、やはり同様の症状(パスワードの設定はできるが認証を失敗する)でアクセスできません。

解決策:「search/admin/.htaccess」中の「/.data/htpasswd」を、相対パスではなくフルパスで記述することで認証できるようになりました。どうもうちのサーバのせいではないか(内部がかなりトリッキーなんです)と思われる現象です。

 このページでは次のことができます。

パスワードの変更
 最初にパスワードを設定しないと何もできない。時々パスワードを変更することを推奨している。

検索条件の追加と変更
 検索条件を追加したり、編集、削除するときに使う。

 フォームの変更など、入力する窓が小さくて非常にやりにくいのが難点。検索位置の指定など、フルパスの記述はどうしても長くなるのでせめて60程度の幅はほしい。

インデクスの更新
 新しい検索対象ファイルをインデクスに追加する。あくまで追加用なので、最初にインデックスを構築するときとか、追加するファイル数が50をこす場合はtelnetでするようにいっている。でも、telnetでインデックスを追加する方法が書かれていない。「./indexmgr」でいいのか? どこにも書かれていません。

 telnetで観察したところ、「search/.scripts」に移動して「./indexmgr」することで自動的に変更・追加を検出してくれているようです。

 実際に2ファイルほど追加して更新したところ、1分以内に更新は終了しました。

(追記:2001/3/15 インストールし直したら、管理機能がまた使えなくなりました。管理ページ自体には入れるのですが、管理ページの機能を使おうとしてもインターナルサーバーエラーで動きません。ま、インデックスの更新はtelnetでやるから問題ないですが。)


■検索した感想 ▲ページトップ

 現行の検索フォームと比較すると、検索条件が増えた場合はKISS-searchの方が断然早い。「28mm/ 単焦点 現行品」で検索したところ、6.2秒のCPUタイムで検索を完了した。ヒット数は14。回線の早さもあって(テストはダイヤルアップ環境)、体感スピードは12秒ほどかかった。また、表示がおかしい箇所がいくつか見られた。タイトル部分が前のデータの尻にくっついて同じ行に表示されたのである。まるでタイトルが前のデータの一部のような感じである。
 一方の検索フォームは21.8秒でヒット数は14。

 検索条件が少ない場合、立場は逆転する。「TC-1」で検索をかけると、検索フォームでは3.8秒でヒットは2あった。KISS-searchは30.2秒かかった。ヒット数は同じく2。
 英数字が悪いのかと思って「現行品」で検索してみる。KISS-searchは20.8秒。ヒット数は多いので数えなかった(ナンバリング機能が欲しい)。検索フォームは10.6秒でヒット数は189。
 やはり検索単語が少ないうちは検索フォームの方が速い。

 使われ方でどっちもどっちというのが現在の感想。
 なお、テスト時の検索対象データ数は323ファイルである。
 僕が前提にしている検索は複数の単語をキーワードにした絞り込み検索なんだけど、実際に現行の検索フォームのログを見てみると複数キーワードが2割、8割が1キーワードの検索となっている。うーむ、どちらを重視すべきか迷う。

 また、タイムアウトで結果が表示されなかったという経験は今のところないです。けっこうタフな感じ。
 しかし、あまりに時間がかかり、しかも検索中に画面に何も変化がないため、一般の人が検索すると待ちきれずに別ページに切り替える可能性が高い。結果が表示され、必要な情報が手に入ってこそ役に立つわけだから、このあたり、運用面の配慮がほしいところ。「ただいま検索しています」とか表示できないかな。

 また、複数のキーワードを入れる場合、区切りが半角スペースのみというのもつらいところ。英数字でさえすべて全角でしか書かないという人も相当数存在していて、どうやらFEP操作がやりにくいかららしい。この人たちにとっては半角スペースの入力がかなり苦痛だろう。全角スペースも区切りとして認識してほしい。

 管理用ページからインデックスを更新できるという手軽さは嬉しい。


■改造メモ ▲ページトップ

●いくつか改造しようと思う点を書きます。そのまま改良してほしい点ですね。

  1. 検索結果に再検索用の窓をつける。※改造済み。下記参照
     これがないとやっぱ不便。デフォルトでは検索フォームに戻るリンクもないので、なおさら必要と思われる。
  2. 検索結果に検索フォームに戻るリンクをつける。※改造済み。下記参照
     1.か2.のどちらもないというのは運用上やはり大きなマイナス。
  3. 検索結果にヒットした総数と、各データの前にナンバーをつける。※改造済み。下記参照
     うちの場合、データベース検索なので、いくつのファイルにヒットしたかは大事。これがあるとないとでは大違い。
  4. 検索結果に別窓で開くリンクをつける。※改造済み。下記参照
     これも大事。検索結果を次々開いていくことになるから。別窓で開くかどうかはユーザーに選択させればよい。
  5. 全角スペースを区切りとして使えるようにする。
     うーん、どこで入力をゲットしているのかよく判らん。「search/.scripts/libcgi.pl」だと思うが、うまくいかなかった。
  6. 最後にインデックスを作った日時を表示する。
     これがあるとインデックスし忘れていないかわかるので。これは検索用のhtmlファイルを作り、SSIを利用して「flastmod file=""」すればできるはず。SSIについては「とほほのWWW入門」あたりがわかりやすいので参照してください。
  7. 検索結果に対象ファイルの全文がでてくるので、一部分に制限する。
     これはconfigファイルで設定できたはず…と思ったら、僕の勘違いで一部だけに制限することはできない。残念。実際には前後数行の表示だけで十分で、全文を表示されると転送されるデータ量が増えてしまい、結果的に検索結果の表示の遅さにつながってしまう。
     ちなみに「28mm/ 単焦点 現行品」でKISS-Searchで検索したところ、ヒット数は14で時間は5.7秒、ページの大きさは36Kだった。検索フォームでは14.3秒でヒット数は14、ページの大きさは8Kである。「現行品」でためしたところ、KISS-Search/443K(20.3秒)対検索フォーム/68K(7.6秒)となった。回線速度の遅い環境ではこの差は大きい。もっとも、検索スピードと合わせて考えるとどっちが速いかわからないが。
     ここはオプションがほしいところ。
  8. MAC上でインデックスを作る。
     インデックスづくりはやはりかなりサーバに負担をかけている気がします。できればローカルでインデックスを作り、それをサーバにアップしたいところです。
     しかし、この改造はとても僕には無理(-_-;)
  9. 一つの検索条件設定で、複数のディレクトリを検索させる。
     現状では、一つのディレクトリを指定して、そのディレクトリ以下の階層は検索できますが、並列に並んでいるような場合は検索設定自体を変更するしかないようです。
     残念ながら、これも僕の手には余ります。

メモ:
search/.scripts/search.cgi
 検索結果の表示はこれを改造する。

search/.scripts/index.cgi
 検索窓の改造はこちら。また、自分でhtmlを作っても良い。


■改造例 ▲ページトップ

(下記の改造を施すなら、くれぐれもオウンリスクでお願いします。サポートはできかねます。)

●背景色変更 34行目あたり
変更前:<body>
変更後:<body bgcolor="#ffffff">


●検索窓関係の改造

1.検索結果に再検索用の窓をつける。
2.検索結果に検索フォームに戻るリンクをつける。

変更前1:12行あたり
require "site_config.pl";

変更後1:
require "site_config.pl";

# 水沢が追加した設定
$cginame = "search.cgi"; # 検索フォーム表示に関係する
$index_name = "▲コンパクトカメラデータに戻る"; # 結果表示の戻り先の名前
$index_url = "../CAMEdata/index.html"; # 結果表示の戻り先htmlのURL
$num_count = 1 ; # 検索結果の頭に表示するための検索ナンバーを初期化する。
$betumado = "betumado.gif" ; # 別窓用アイコンファイル。アイコンファイルは同じディレクトリにおく

変更前2:

<h1>Search Result: $ARGS{'key'}</h1>

変更後2:

<h1>Search Result: $ARGS{'key'}</h1><!--■■以下、水沢追加行 再検索窓と戻りリンクを追加-->
	<form method="GET" action="$cginame">
	<p>キーワード	<input type="text" name="key" value="$ARGS{'key'}" size="60" >
<!--■■セレクトを省いています。必要な場合は下のhiddenではなくこちらを使ってください。
	 検索範囲: 
<select name="cfg"> 
<option value="default" selected>All Documents	</select>
-->
	<input type="hidden" name="cfg" value="default">
	<input type="submit" value="検索"></p>
	</form>
	<a href="$index_url">$index_name</a>
	<br>
<!--■■ここまで水沢追加行-->


●検索結果関係の改造

3.検索結果にヒットした総数と、各データの前にナンバーをつける。(総数の表示は成功していません)
4.検索結果に別窓で開くリンクをつける。
↑上で設定している「betumado.gif」はテキトーに作ってください。面倒な方はこれを使ってください。→ ファイルの置き場所は「search」直下です。

変更前:180行あたり

foreach $file (keys %url){
$comment = "";
$per_file =0;
if ($ARGS{'mode'} eq 'text'){
$output = "\n$url{$file}\n$title{$file}\n";
} else {
$output = "<dt><a href=\"$url{$file}\">$title{$file}</a>\n<dd>";
}

変更後:180行あたり

foreach $file (keys %url){
$num_print = "NO. $num_count "; # 先頭にナンバー追加。水沢追加行
$comment = "";
$per_file =0;
if ($ARGS{'mode'} eq 'text'){
$output = "\n$url{$file}\n$title{$file}\n";
} else {
# ↓最初の<br>は本当はいらないのだが、ときどきタイトル行が
# 前のデータの後ろにくっつくことがあるので入れた。
$output = "<br><dt>●\n$num_print<a href=\"$url{$file}\" target=\"_blank\">
<img src=\"betumado.gif\" BORDER=\"0\"></a>
 <a href=\"$url{$file}\">$title{$file}</a>\n<dd>";
$num_count = $num_count + 1 ; # ナンバーを1増やす。水沢追加行

}

 上の変更後の「$output = 」〜「<a>\n<dd>";」までの3行は、実際には1行にまとめてください。見にくいのでここでは3行に分けてあります。3行でも実際の動作に支障はありませんが、そのままだとアイコンの前に「_」が表示されます。かっちょ悪いです。

 ▲ページトップ


homeホームHTMLに役立つヒント> KISS-Search導入記