INTERNET Watch Title Click

【特集】

ホームページにサイト内を検索する機能をつけてみよう

 gooやinfoseekなどの検索サイトを利用している人は多いだろう。インターネット上の数多くのWebサイトの中から自分が知りたいページにたどり着くためには、欠かせないサービスとなっている。

 これと同じように、企業のサイトなどでは、自分のサイト内のみを検索できるようにしているところもいくつかある。たとえばインプレスでも、impress Watchシリーズをすべて検索できる「impress Search」がある。個人でもコンテンツが多い人は自分のサイトに訪れた方が適切なページにアクセスできるようにするために、サイト内を検索する機能を自分で持つことを考えてみよう。

 そこで、今回は自分のサイト内を検索する機能をつける方法を紹介する。

■impress Search
http://search.watch.impress.co.jp/
http://www.impress.co.jp/release/19990907.html


Contents

●検索機能ってなんだろう
●サイト内を検索する機能にはどういったものがあるか
●検索サイトで自分のサイトだけを検索する
●検索サイトの有料サービス
●自分で検索CGIを設置しよう
●検索アクションを起こしたときにファイルを検索するタイプ
 --実際に自分で検索CGIを設置しよう
●前もってインデックスを作成するタイプ
 --実際に自分で検索CGIを設置しよう
●サイト検索の運用、メンテナンス


●検索機能ってなんだろう

 検索というとgooやinfoseekを思い浮かべる人も多いだろうが、今回紹介する機能は、自分のサイトの中を検索するための機能だ。掲示板やカウンターの場合と同じように、他のサーバーから検索してもらう方法もあるが、自分ですでに持っているファイルの情報なので、検索機能を自分で持つ方がよいだろう。

 なお、いくつかのプロバイダーでは、会員向けに検索サービスを提供しているところもある。今後は、掲示板やカウンターサービスと同じように、会員向けに検索機能を提供するプロバイダーも増えてきそうだ。

■goo

http://www.goo.ne.jp/

■Infoseek Japan
http://www.infoseek.co.jp/


●サイト内を検索する機能にはどういったものがあるか

 検索機能は、掲示板やカウンターなどと同様に、CGIが動作するサーバーに自分で設置する検索CGIと、他のサーバで検索処理をするサービスを利用するものがある。
 自分のサーバーでCGIが動作する場合は検索CGIを自分で設置し、自分のサーバーでCGIが動作しない場合には他のサーバーで検索処理をするサービスを利用しよう。他のサーバーで検索処理する場合、自分のサイトに絞って検索をしてくれる有料サービスを利用するのが確実だが、gooやinfoseekを利用してドメインを絞って検索する方法も紹介しておく。


●検索サイトで自分のサイトだけを検索する

 gooやinfoseekの検索フォームを用意しているページをときどき見かける。検索してみると、そのサイト内を検索できるのかと思えば、他のサイトも含めた検索結果がでてしまい、慌ててしまうこともある。
 そこで、自分のサイトだけを検索する方法を紹介する。例えば、gooの場合「gooへのリンクの張り方」からソースを入手すると、検索フォームをつけられる。この中で、

<INPUT type=text name="MT" value="" size=42><BR>

の前に、

<INPUT type=hidden name="Domain" value="www.watch.impress.co.jp">
<INPUT type=hidden name="RD" value="DM">

と追加すると「www.watch.impress.co.jp」のドメインのみに絞って検索できるようになる。ただし、gooをベースにしているので、当然のことながらgooで検索されないページは出てこない。また、あくまでもドメイン指定なので、「www.watch.impress.co.jp/internet/」などのように、ディレクトリを指定することもできない。

 ちなみに、ページ検索であることもわかっていることなので、検索対象を指定する

<SELECT name="WTS" >
<OPTION value="ntt" selected>日本語のページ
<OPTION value="ink">海外のページ
<OPTION value="new">ニュース・雑誌
<OPTION value="bok">書籍
</SELECT>

も削除していいだろう。
 infoseekについても、「サイトサーチ」に説明が書かれているのでそれを読めば設置方法がわかる。もちろん、こちらもinfoseekで検索されないサイトは出てこない。また、gooもinfoseekも、データーベース更新までに時間がかかるので、自分のサイト内のページを書き換えてもすぐに検索結果に反映されるわけではない。

■gooへのリンクの張り方
http://www.goo.ne.jp/help/show.html

■インフォシーク Webkit(ウェブキット)
http://www.infoseek.co.jp/Tool?pg=gid_webkit.html

■インフォシーク サイトサーチ
http://www.infoseek.co.jp/Tool?pg=gid_sites.html


●検索サイトの有料サービス

 gooやinfoseekなどのフリーな検索サイトでドメインを絞る方法を紹介したが、必ずしも検索対象となる保証はないようだ。それとは別に、有料の検索サービスも登場している。これを使うと、自分のサイト内のデータを検索サイト内の専用サービスに渡し、検索できるようになる。

■サイト内検索アウトソーシングサービス - Fresheye
http://www.fresheye.com/pf/sld001.htm
 検索サイト「フレッシュアイ」の企業向けサイト内検索サービス。フレッシュアイの機能を利用している。フレッシュアイのサーバーを利用し、データベースの更新は毎日行なわれる。初期導入費300,000円、運営費200,000円/月~。

■グローバルコモンズサーチエンジンホスティング
http://www1.global-commons.co.jp/seh/index.html
 グローバルコモンズが提供するサイト内検索サービス。グローバルコモンズのサーバーを利用し、データベースの更新は1週間に1度行なわれる。一週間の無料お試し期間がある。初期設定料5,000円、5MBディスク使用量コース:5,000円/年~。


●自分で検索CGIを設置しよう

 検索CGIは、サーバー内のファイルを検索して結果を表示するタイプが多い。
 その中でも、検索アクションを起こしたときにファイルを検索するタイプのものと、前もってインデックスを作成しておき、検索アクションを起こしたときに素早く検索できるタイプのものがある。前者は情報量が多いと検索に時間がかかり、Webサーバーがタイムアウトを起こしてしまうので、コンテンツが多いときには利用できない。また、検索のたびに検索処理を行なうため、サーバーに負荷がかかるので注意が必要だ。一方後者はインデックス作成には時間がかかるが、一度インデックスを作成してしまえば検索時にはサーバーに負荷がかかることもなく検索できる。コンテンツの量などを見て、どちらがよいか考えよう。


●検索アクションを起こしたときにファイルを検索するタイプ

 こちらのタイプは、インデックスを作成するタイプよりも簡単に設置できる。ただし、コンテンツの量が多いサイトには向いていないので、そうしたサイトでは使わない方がいいだろう。

■ネットサーフレスキュー[Web裏技]
http://www.rescue.ne.jp/
各種の有名なCGIがダウンロードできる。「簡易サーチエンジン」が検索CGIにあたる。これは「Matt's Script Archive」の検索CGI「Simple Search」をネットサーフレスキューが日本語対応させ、日本のサーバー向けに改造したものだ。ただし、日本語コードはSJISにしか対応していない。プロバイダー別の設置情報も数々掲載されている。

■Matt's Script Archive
http://www.worldwidemart.com/scripts/
各種の世界的に有名なCGIがダウンロードできる。「Simple Search」が検索CGIにあたる。日本語に対応していないため、日本語の検索はできない。

■Simple Search for Japanese
http://www.hartc.com/search/searchinst.html
「Matt's Script Archive」の検索CGI「Simple Search」を日本語対応したもの。

■wwwsrch.cgi
http://wakusei.cplaza.ne.jp/twn/wwwsrch.htm
同じサーバー上の指定したディレクトリの下を検索。 

■Ninja Search Engine 
http://www.cinovi.com/cgitips/searchengine/
キーワード検索やジャンル別検索登録機能を持ったサーチエンジン。


●実際に自分で検索CGIを設置しよう

 では、実際に自分で「ネットサーフレスキュー[Web裏技]」に掲載されている「簡易サーチエンジン」をUNIXベースのサーバーに設置する方法を紹介しよう。CGIの設置には環境を調査したり、最後に動作を確認したりといった必要があるが、それについては掲示板CGIの解説(本誌6月21日号参照)などを参考にしていただければよいので省略する。

1:検索CGIをダウンロードする

 設置する予定のサーバーに検索CGIが設置できることを調査したら、CGIや関連ファイルをダウンロードしよう。ここでは「nkf」を使わず「jcode.pl」を利用する「「簡易サーチエンジン」v1.12の説明をするので、「jsearch.cgi」と「jcode.pl」もダウンロードする。ただし、サーバーにすでに「jcode.pl」が用意されている場合は、そちらを使うこともできる。

■ネットサーフレスキュー - 簡易サーチエンジン
http://www.rescue.ne.jp/cgi-rescue/cgi?jsearch
http://www.ask.ne.jp/~rescue/cgi/jsearch/v2/jsearch.cgi

■漢字コードコンバートPerlライブラリ「jcode.pl」
ftp://ftp.iij.ad.jp/pub/IIJ/dist/utashiro/perl/

2:検索CGIをサーバーに合わせる

 ダウンロードした検索CGIを動作させるには、プログラムの一部をサーバーに合わせて、テキストエディターで書き換えなければならない。難しい作業ではあるが、検索CGIの中に「ここを書き換える」といった説明があるので安心してほしい。
 「簡易サーチエンジン」の「jsearch.cgi」の場合は、以下のとおりだ。

 (1) Perlの設定をサーバーに合わせる

 Perlで組まれた検索CGIは、一番先頭の行に「Perl」の場所が書かれている。これをインストールするサーバーに合わせる必要がある。
 「簡易サーチエンジン」はオリジナルでは「#!/usr/local/bin/perl」となっている。「/usr/local/bin/perl」以外にPerlがある場合は、「#!」以降を書き換えよう。

 (2) jcode.plの設定をサーバーに合わせる

 「jcode.pl」が用意されていないサーバーでは、「1:」でダウンロードしたものがそのまま使える。この場合、何も書きかえる必要はない。
 サーバーにすでに「jcode.pl」が用意されている場合は、そちらを使うこともできる。この場合、jsearch.cgiの中でjcode.plを呼び出している部分を書き換える必要がある。オリジナルでは「require './jcode.pl';」となっている。これを、サーバーに用意されている場所に合わせて、「require '/usr/local/bin/jcode.pl';」などのように変更する。

 (3) その他の変更点、カスタマイズ

 その他、説明書をよく読むか、検索CGIの中で「必ず設定してください」などのように書いてある部分を探して、必要事項を書き換えよう。例えば、海外のWebサーバーに設置する場合に、検索CGIが時間を利用する場合に日本時間を取得できるようにしたり、検索CGIとHTMLファイルを別の場所に置くWebサーバーを使用する場合にディレクトリ構造や検索CGIの呼び出し方を変えたりなどの変更項目もある。

 「簡易サーチエンジン」の場合は、「$body = 」、「$title = 」、「$modoru_url = 」というページに表示される情報と、「$base = 」、「$baseurl = 」、「@TARGET = 」という検索をするのに必要な情報がある。書き換える場合には、「=」の後が「'」で始まり、最後が「';」で終わるという条件を崩してはいけない。
 この設定はWebに表示されるディレクトリ構成と、実際のサーバー上のディレクトリ構成から設定をする必要がある。例えば、

/home/user/public_html/
(このディレクトリが、Webサイトhttp://<provider>/~<user>/と見える)
/home/user/public_html/jsearch.cgi
/home/user/public_html/index.html
/home/user/public_html/01.html ~ 99.html
/home/user/public_html/doc/
/home/user/public_html/doc/01.txt ~ 99.txt

というディレクトリ構成で、index.htmlおよび01.html~99.htmlと/doc/01.txt~99.txtを検索対象とする場合は

$base = './';
$baseurl = '/~<user>/';
@TARGET = ('*.html','doc/*.txt');

となる。index.htmlは含めない場合には

@TARGET = ('??.html','doc/*.txt');

と2文字のファイルのみ対象にするなどの方法で設定すればよい。

 (4) 本体以外のファイルの作成、カスタマイズ

 検索CGIによっては、本体以外のファイルが必要になることがあるので説明書を確認しよう。検索アクションをおこしたときにファイルを検索するタイプでも、検索対象を別ファイルに記述するものもある。「簡易サーチエンジン」の場合は本体以外のファイルを用意する必要はない。


3:サーバー側を設定する

 検索CGIの設定や本体以外ファイルの設定が済んだら、サーバー側にWebチャットCGIを設置する準備をする。

 (1) 「.htaccess」を作成する

 WWWサーバーやプロバイダーによっては、WebチャットCGIを動作させるために、「.htaccess」というファイルを作成する必要がある。必要かどうかはサーバーやプロバイダーの説明書を確認すること。サーバーによっては不要であったり、逆にこのファイルがあると動作しなくなることもある。
 このファイルを作るには、「.htaccess」というファイルを新規で作成し、「AddType application/x-httpd-cgi .cgi」と書いてセーブする。これを検索CGIをアップロードするときに一緒に転送すればよい。

 (2) サーバーにディレクトリを作成する

 検索CGIによっては、検索中に一時ファイルを作成するためにディレクトリを用意するものもあるので、ディレクトリを用意しておかなければならない。また、検索CGIが複数ファイルで構成されている場合は管理しやすいように1つのディレクトリにまとめておいたほうがよいだろう。

4:ファイルをアップロードする

 いよいよ、用意した検索CGIやデータファイルと「jcode.pl」、「.htaccess」などの関連ファイルをサーバーにアップロードする。「簡易サーチエンジン」の場合は、「jsearch.cgi」と「jcode.pl」と必要に応じて「.htaccess」をアップロードする。
 アップロードにはFTPクライアントを使用する。このとき注意するのは、いままで説明したファイルはすべてアスキーファイルなので、「アスキーモード」で転送するのを忘れないことだ。ただし、壁紙などを設定した場合は、その壁紙画像は「バイナリーモード」で転送する。
 FTPクライアントによっては、「.txt」のファイルはアスキーモードで、「.cgi」や「.pl」のファイルはバイナリーモードで転送されることがある。FTPクライアントの設定をよく確かめよう。

5:ファイルのパーミッションの変更

 ファイルを転送したら、転送したファイルや作成したディレクトリのパーミッション(権限)を、検索CGIが動作するために設定する必要がある。パーミッションを設定するには、UNIXとそのサーバーのシステムを学んでおく必要がある。検索CGI本体や関連ファイルだけでなく、検索対象のファイル(*.htmlや*.txt)が検索CGIから検索できるように、それらのパーミッションもよく確かめておく必要がある。
 「簡易サーチエンジン」の場合は、jsearch.cgiは「755」、jcode.plや.htaccessは「644」に設定するのが基本だ。ただし、サーバによっては検索対象のファイルのパーミッションが検索CGIから見えないこともあるので「644」などに設定しなおそう。
 パーミッションをどう設定するかは、CGIやサーバーによって設定が異なるので、説明書を参考にしよう。また、設定をしっかりしておかないと、同じプロバイダーの別のユーザーによってファイルを消されたり、書きかえられたりするという可能性もあるので、十分に注意しよう。

6:動作確認をする

 この時点でほとんどの場合は動作すると思われるので、実際に検索CGIにアクセスしてみよう。アクセスができたらいろいろなキーワードで検索して、検索対象のすべてのディレクトリが検索できるか確かめておこう。
 この時点で動作しない場合には、設定が足りないこともある。
 エラーの確認で一番基本なのは、Webサーバーのerror_logファイルを確認することだ。ただし、プロバイダーなどでerror_logを含むログが見られないサーバーもある。そのような時はエラーを推測する必要がある。推測する方法は掲示板CGIの解説(本誌6月21日号参照)の「8:動作確認をする」を参考にしてほしい。


●前もってインデックスを作成するタイプ

 こちらのタイプは前もってインデックスを作成するので、検索時には非常に高速に結果を表示する。インデックスを作成してそれを検索時に利用できるので、こちらのタイプはローカルディスクだけでなく、他のサーバーも検索対象にできるものもある。

■全文検索システム Namazu
http://openlab.ring.gr.jp/namazu/
有名な検索システム。前もってインデックスを作成するので、検索がとても速い。別途「KAKASI」などの日本語文書処理システムをインストールしておく必要がある。UNIX用のほか、Windows用、OS/2用などがある。基本的にはローカルディスクを対象とするが、「httpdown」や「wget」などのソフトを併用すると、他のサーバーも検索対象にできる。

■KISS-Search
http://www2.osk.3web.ne.jp/~nkon/
個人のページでも全文検索をできるように作ったというサーチエンジン。小型のプログラムでインデックスも小さい。KISS-Searchのページに他の検索エンジンリストがある。

■private goo
http://private.goo.ne.jp/
企業向けに、検索サイト「goo」で販売している検索エンジンソフト「プライベートgoo」。gooの技術を元に開発された商品で、gooと同じく情報収集ロボットがデータベースを作成する。HTMLだけでなく、PDF、Wordファイルなども検索することが可能。価格は、Windows NT 対応版、1,000,000円( 年間保守サポート料金150,000円)。ほか、Solaris 対応版などもある。

■Freya
http://odin.ingrid.org/freya/
検索サイト「ODIN」で使われている日本語全文検索エンジン。

■SGSE
http://www.sony.co.jp/sd/Search/SGSE-DL.html
ソニーが開発したフリーの検索エンジン。perlで動作し、wgetを用いて情報収集し、Chasenを用いてインデックスを作成する。

■S.CREW-1.2
http://www.peanuts.gr.jp/Search/download-j.html
ソニーが開発した、フリーの検索エンジン。


●実際に自分で検索CGIを設置しよう

 では、実際に自分で「全文検索システム Namazu」のUNIXバージョンを設置する方法を紹介しよう。
 なお、アーカイブの解凍やプログラムの実行などUNIXの知識を必要とするので、以下は上級者向けに説明する。いくつか省いている箇所もあるので、説明書も読んでインストールしよう。
 「全文検索システム Namazu」は、「namazu.cgi」だけでなく、検索システム「namazu」、インデックス作成プログラム「mknmz」、日本語処理システム「KAKASI」または「Chasen」(ここでは「KAKASI」を例に説明する)をインストールする必要があるので、管理者権限(root)を利用できる人がインストールする必要がある。一般ユーザーでも、どうしても利用する必要がある場合には、管理者と相談して導入を検討してもらうといいだろう。

1:検索CGIをダウンロードする

 「全文検索システム Namazu」をダウンロードしよう。このシステムをインストールするためには、「KAKASI」と「nkf」が必要になる。「KAKASI」は、本体のほか「わかち書きパッチ」と辞書も必要になるので、あわせてダウンロードしよう。「Chasen」を利用する場合は「Namazu」のドキュメントから詳細を調べればわかる。

■全文検索システム Namazu
http://openlab.ring.gr.jp/namazu/
http://openlab.ring.gr.jp/namazu/release/namazu-1.3.0.10.tar.gz

■KAKASI
ftp://ftp.kusastro.kyoto-u.ac.jp/pub/baba/wais/
ftp://ftp.kusastro.kyoto-u.ac.jp/pub/baba/wais/kakasi-2.2.5.tar.gz
ftp://ftp.kusastro.kyoto-u.ac.jp/pub/baba/wais/kakasi-ext.tar.gz
ftp://ftp.kusastro.kyoto-u.ac.jp/pub/baba/wais/kakasidict.940620.gz


2:「KAKASI」をインストール

 まずは「KAKASI」をインストールしよう。「kakasi-2.2.5.tar.gz」を適当な場所に展開したら、srcディレクトリに「kakasidict.940620.gz」を「kakasidict」という名前で展開する。次にわかち書きパッチ「kakasi-ext.tar.gz」を展開したらsrcディレクトリでパッチを当てる。例えば、

$ cd /usr/src/kakasi-2.2.5/src/
$ gzip -d kakasidict.940620.gz
$ mv kakasidict.940620 kakasidict
$ patch < /usr/src/kakasi-ext/patch.kakasi-2.2.5 


という方法がある。これが終われば、コンパイル(make)して、root権限でインストールすれば「KAKASI」のインストールは終わりだ。

$ make
          (←スーパーユーザー になる)
# make install


3:「Namazu」をインストール

 次に「Namazu」をインストールしよう。「namazu-1.3.0.10.tar.gz」を適当な場所に展開したら、srcディレクトリで、「configure」を実行する。「configure」で「kakasi」や「nkf」の場所を自動検出するので、インストールが簡単だ。必要なファイルが見つからない場合はエラーが出るので、問題を解決しよう。これが終われば、コンパイル(make)して、root権限でインストールすれば「Namazu」のインストールは終了する。

$ ./configure
$ make
          (←スーパーユーザー になる)
# make install

4:インデックスを作成する

 「Namazu」のインデックス作成ツール「mknmz」を利用して、インデックスを作成する必要がある。通常「mknmz」を使うとローカルディスクで検索するためのインデックスができてしまうため、Webサイトで公開するためのインデックスを作る必要がある。例えば、

/home/httpd/htdocs/
(このディレクトリが、Webサイトhttp://<domain>/と見える)
/home/httpd/htdocs/index.html
/home/httpd/htdocs/01.html ~ 99.html
/home/httpd/htdocs/doc/
/home/httpd/htdocs/doc/01.txt ~ 99.txt

というディレクトリ構成で、htdocsディレクトリ以降を検索対象とする場合は、下記のようにすればよい。ちなみにカレントディレクトリにインデックスファイルが作成されるので、前もってカレントディレクトリを移動しておく必要がある。下記の例では/home/httpd/namazu/というディレクトリをインデックス用のディレクトリとしている。

$ cd /home/httpd/namazu/
$ mknmz "http://<domain>/" "/home/httpd/htdocs/"

 インデックスを作成するのはかなり時間がかかることがある。Pentium133MHzのlinuxマシンでINTERNET Watch半年分のインデックスを作ったところ1時間ほどかかった。

5:「namazu.cgi」の設定

 「namazu-1.3.0.10.tar.gz」を展開したsrcディレクトリ内に「namazu.cgi」があり、これが検索CGI本体となる。これを適当な場所にコピーする。上記の例では「/home/httpd/htdocs/」がよいだろう。ただし、この「namazu.cgi」単体では先ほど作成したインデッスクの場所がわからない。インデックスの場所など「namazu.cgi」が動作するための設定を行なうには「namazu.cgi」と同ディレクトリに、「.namazurc」を作成する。このファイルのオリジナルは「namazu-1.3.0.10.tar.gz」を展開したlibディレクトリに「namazu.conf-dist」として保存されているので、「.namazurc」という名前でコピーする。

$ cp namazu.conf-dist /home/httpd/htdocs/.namazurc

このファイル内の「INDEX」がインデックスファイルの場所の指定なので、ここに「/home/httpd/namazu/」を指定するだけでよい。なお、先ほど「mknmz」でURLを指定してインデックスを作成したが、「.namazurc」の「REPLACE」で「/home/httpd/htdocs/ http://<domain>/」と指定する方法もある。「.namazurc」にはいろいろな設定ができるので、ドキュメントで確認いただきたい。

6:動作確認をする。

 ここで「http://<domain>/namazu.cgi」にアクセスするとNamazu標準の検索フォームが表示される。この時点で動作しない場合にはドキュメントをもう一度読んでいただき、間違いがないかを確認しよう。
 なお、この検索フォームがあまり好まないという場合は、表示されたページのHTMLソースを例えば「search.html」など好きな名前で保存し、編集して利用すれば「http://<domain>/search.html」として自分で作成した検索フォームが利用できる。
 そのほか、「Namazu」や「KAKASI」は数多くの機能をもっている。それらを最大限に利用してよりよいサイト検索をしてみるといいだろう。


●サイト検索の運用、メンテナンス

 サイトのコンテンツ(ページ数)が多いサイトに、検索エンジンを設置すると、閲覧者にとっては望んだページを素早く閲覧することが可能になる。しかし、逆に検索キーワードによっては、望んだ検索結果が得られず、アクセスした人はどこのページも閲覧しないというデメリットもありえる。
 そうしたことを防ぐため、インデックスを作成する検索CGIでは、ページを更新するたびにインデックスを更新することを忘れてはいけない。また、自分で検索CGIを設置した場合はCGIをカスタマイズして、キーワードがマッチしなかった場合はサイトマップをするなどの方法をとるとよいだろう。そのためにも閲覧者がどのようなキーワードを入れたのか、どのような検索結果が表示されたかなどを研究しておこう。
 ただし、検索CGIに頼らなくても、閲覧者が望んだページにアクセスできるようなページ構成を心がけることも忘れてはいけないだろう。

('99/9/13)

[Reported by ymasa@wizvax.net / Watchers]


INTERNET Watchホームページ

ウォッチ編集部INTERNET Watch担当internet-watch-info@impress.co.jp