ホーム > HTMLに役立つヒント>msearch導入記 > m_andor.cgi
and検索、or検索を別々の入力欄に記入して検索させたい、という要望があるようなので、簡単な中間CGIを作りました。m_andor.cgiといいます。必要に応じて改造して使ってください。CGIを使わないJAVAscript版も用意しました。
HTMLの検索フォーム(またはmsearchのconfig.datを変更して同様のページを出力させるようにする。)で検索キーワードを入力する。 ↓ m_andor.cgiが入力を受けてor検索を整形してmsearch.cgiに渡す。 ↓ msearch.cgiで検索して結果表示。 ↓ 2度目以後の検索はmsearch.cgiで行う。
という流れになります。
もっと直接的な方法に、msearch.cgi自体を改造する方法があります。しかし、msearch.cgiを改造すると、バージョンアップの際にいちいち再改造が必要になります。
中間CGIを使えば、msearch.cgiがバージョンアップしても、検索式の文法が変更されない限り再改造の必要がありません。ただし、CGIを2つ介することになりますので、サーバの負担は増えます。
検索用HTMLの例を示します。このように、and検索用とor検索用のふたつの入力フィールドを用意します。
この3点が検索用HTMLの注意点です。
<form action="m_andor.cgi"accept-charset="x-euc-jp" method="post" enctype="x-www-form-urlencoded">
<p>and検索キーワード<input name="query_and" type="text" size="30"><br> (スペースで区切ってキーワードを複数指定すると、and検索となります)</p>
<p>or検索キーワード<input name="query_or" type="text" size="30"><br> (スペースで区切ってキーワードを複数指定すると、or検索となります)</p>
<p>(and検索とor検索は同時に指定できます。例:andに「aaa」、orに「bbb ccc」を指定すると、「bbbかcccを含み、aaaも含むページ」が検索されます。)</p>
<p><input name="name" type="submit" value="検索"> </form>
上記のソースは次のようになります。下でテスト検索もできます。デザインは適当に変更してください。
and検索キーワード (スペースで区切ってキーワードを複数指定すると、and検索となります)
or検索キーワード (スペースで区切ってキーワードを複数指定すると、or検索となります)
(and検索とor検索は同時に指定できます。例:andに「aaa」、orに「bbb ccc」を指定すると、「bbbかcccを含み、aaaも含むページ」が検索されます。)
なお、最初の検索後も同様な機能を持たせたいなら(検索結果画面にも同様の機能を持たせたいなら)、msearchのconfig.datに手を入れて、上のフォームを出力するようにする必要があります。
m_andor.txtをクリックして、表示されたテキストを「m_andor.cgi」という名前で保存します。この時、漢字/改行コードはEUC/LFで保存してください。必ず漢字コード・改行コードをコントロールできるテキストエディタを使ってください。
デバッグ用のルーチンもそのままというスクリプトなので、目障りだったらデバッグ部分とかさくっと削除してください。
このスクリプトはクライアント(ブラウザ)に対して結果(画面)を出力しないため、本来なら「m_andor.pl」という名前にするのが正しいです。
.plファイルでCGI動作を許しているサーバ(ちょっと言い方変ですが(^^;)では.plファイルにするといいでしょう。ここではperlスクリプトのお作法に反し、汎用性を考えてあえて.cgiとして説明をすすめます。
3-2-1. 最初の行をプロバイダの設定に合わせて「#!/usr/local/bin/perl」か「#!/usr/bin/perl」に変更してください。 3-2-2. m_andor.cgiは特に必要がない限りmsearch.cgiと同じディレクトリにおきます。msearch.cgiと別のディレクトリにおく場合だけ、次の2カ所の設定を変更する必要があります。 ########### 設定開始 ############### # msearch.cgiと同じディレクトリにおいて使うことが前提です。 # その場合は以下の設定は変更する必要はありません。 # 必要な場合だけ変更してください。 # msearch.cgiの位置を相対パスで。 # 同じディレクトリなら「./msearch.cgi」とする。 $msearch = "./msearch.cgi"; # jcode.plの位置を相対パスで。 # 同じディレクトリなら「./jcode.pl」とする。 $jcode = "./jcode.pl"; ########### 設定ここまで ###############
########### 設定開始 ############### # msearch.cgiと同じディレクトリにおいて使うことが前提です。 # その場合は以下の設定は変更する必要はありません。 # 必要な場合だけ変更してください。 # msearch.cgiの位置を相対パスで。 # 同じディレクトリなら「./msearch.cgi」とする。 $msearch = "./msearch.cgi"; # jcode.plの位置を相対パスで。 # 同じディレクトリなら「./jcode.pl」とする。 $jcode = "./jcode.pl"; ########### 設定ここまで ###############
########### 設定開始 ############### # msearch.cgiと同じディレクトリにおいて使うことが前提です。 # その場合は以下の設定は変更する必要はありません。 # 必要な場合だけ変更してください。
# msearch.cgiの位置を相対パスで。 # 同じディレクトリなら「./msearch.cgi」とする。 $msearch = "./msearch.cgi";
# jcode.plの位置を相対パスで。 # 同じディレクトリなら「./jcode.pl」とする。 $jcode = "./jcode.pl";
########### 設定ここまで ###############
パーミッションは通常755にします。サーバによって制約がある場合はCGIの動作パーミッションにしてください。すでにmsearch.cgiが動いているなら、それと同じパーミッションでOKです。
後は検索HTMLにブラウザでアクセスし、検索するだけです。
msearch ver.1.5で使うための設定ファイル「m_andor.cfg」を用意しました。クリックして表示されたテキストを「m_andor.cfg」という名前で保存してください(EUC/LFで)。呼び出し時に「msearch.cgi?config=m_andor」とすると呼び出せます。
検索フォームを受け取り、「q_and」と「q_or」に記入されたキーワードを取り出し、q_orをor検索のために()で囲い、and検索と合体した上、URIエンコードしてmsearch.cgiに渡します。非常に簡単な作りです。
詳しく知りたい場合はスクリプトを眺めてください。コメントをこれでもかと入れてありますから、だいたいわかるはずです。
単機能なCGIですので、サーバの負担は軽いと思うんですが…。
あ、検索HTMLの例ではメソッドをPOSTにしていますが、GETメソッドでも動作します。するはずです……テストしてないや。
なお、「msearch導入記/スキン」でご紹介している簡単検索はこのCGIでは使えません。queryを受け取ったり、それをつなぐ機能がないからです。
中間CGIを使わず、JAVAscriptで直接msearch.cgiに引き渡す方法もあります。利点は余分なCGIを使わずにすみ、サーバの負荷が軽くなることです。
逆に弱点は、JAVAスクリプトがOFF、またはサポートしないブラウザでは動作しないという点です。
サンプルファイルをこちらに置きました。ソースを見てください。改造などはご自由にどうぞ。Macintosh版IEでしか動作検証していないので、動かなかったらごめん。
やっていることは「m_andor.cgiのやっていること」と同じです。
あらかじめ、AND検索用キーワード入力欄(name="query_and")、OR検索用キーワード入力欄(name="query_or")、それに隠しフィールドとしてhidden指定でキーワード欄(name="query")を作っておきます。
「検索」がクリックされたら整形・合体してquery欄に入力してCGIに送信しています。
なお、msearch.cgiのバージョンは問いません。すべてで動作するはず。
JAVAscript版に、さらに選択入力(簡単検索)を搭載したバージョンです。
通常、ノーマルなmsearchを表示しておいて、検索近辺に「詳細な検索」としてこのページへのリンクをつけておくとよいのではないかと思います。こんな感じ。あ、下の検索窓は動作しません。「詳細検索」をクリックしてください。
※詳細検索
googleやgooなどの大手検索サイトでもこういう手法を用いていますね。
なお、「詳細検索」で表示されるページからは、実際に検索も可能になっています。テストしてみてください。
m_andor.cgiはフリーウェアです。自由に使用・改変・改変したものを再配布してかまいません。僕の許可はいりません。スクリプト中の作者の表示を削除しても全然OKです。msearch.cgi本体に組み込むルーチンの叩き台にするのもOKです。
お約束ですが、このCGI/JAVAscriptを使用して損害や不利益を被ってもいっさいの保証はありません。
なお、もっと便利に修正したぞ、という場合はご報告していただけると嬉しいです。このページから配布ページにリンクさせていただきます。
2003/8/20 m_andorJS.html ver.0.1
JAVAscript版の最初のバージョン。
2003/7/16 m_andor.cgi ver.0.2
入力がなかった場合でも「()」が入ってしまうバグを修正(^^; 他にもバグってるかも。こんなに短いCGIなのになぁ。
2003/7/15 m_andor.cgi ver.0.1
最初のバージョン。極めて単機能。
ホーム >HTMLに役立つヒント>msearch導入記 > m_andor.cgi