スクリプツ・ラボ ホームページ > N-gram検索エンジン MindSearch > オンラインマニュアル > MindSearchHyperマニュアル


アプリケーションの開始・終了時のコマンド



 アプリケーションがMindSearchと通信する上で真っ先に行なうべきことは接続処理ですが、それについては既に MindSearchコアとの通信方法 - 接続 にて解説しました。
 この章では、その次のステップ・・最初に実行すべきスクリプトについて解説します。また最初の処理と同様に重要なものとして最後に実行すべきスクリプトについても合わせて解説します。


「INI」コマンド

 アプリケーションはMindSearchとの接続が終ったら「INI」コマンドを発行してください。文法は次のようになります。
    (形式)
      INI:<PROFILE>
          ←-5桁-→

    (例)
      INI:app01

    (レスポンスの例)
      OK:app0100913910C
 「INI:」に続けて5桁のプロフィール名を付与したスクリプトを発行します。これによりMindSearchとのセッションが開始されます。
 MindSearchはレスポンスとして、「OK:」に続いて14桁の文字を返して来ます。これを「セッションキー」と呼びます。セッションキーは「プロフィール名(5桁)」+「セッション番号(5桁)」+「チェックコード(4桁)」の計14桁です。INIのレスポンスが返すセッションキーは参考情報であり、これをアプリケーションが保存する必要はありません。

 INIコマンドにはもう1種類の使い方があります。
    (形式)
      INI:<SESSIONKEY>
          ←--14桁--→

    (例)
      INI:app0100913910C

    (レスポンスの例)
      OK:app0100913910C
 アプリケーションがSUSコマンドを送出し、セッションを維持したままでの終了をおこない、次に別のタイミングが再度アプリケーションが立ち上がり「先の続き」から処理を開始する場合にこの形式を使います。この仕組みについては セッション管理 をお読み願います。
 MindSearchはこの二種類のINIコマンドの違いをINI:の後方の文字数によって判断します。5桁であれば普通のINIコマンドであり、14桁であれば「再開」の意味のINIコマンドと判定します。


レスポンスのチェック方法

 コマンドの解説から少し外れますが、MindSearchから返されるレスポンスの解析方法について説明をおこないます。
 先のINIコマンドの送信およびそれのレスポンスの受信をPerlで記述したプログラムはたとえば以下のようになります。
        # INIコマンドを発行
        &msch_sendScript( "INI:app01" );

        # レスポンスを受信
        $response = &msch_receiveResponse();
        if ( substr($response,0,3) eq "OK:" )
        {
                return 1;
        }
        else
        {
                return 0;
        }
 上のソースコードを解説します。
 まず、msch_sendScript()を呼び出すことでINIコマンドを発行しています。この関数はPerl向けのMindSearch通信用ライブラリである mschDriver.pl 内で定義されており、スクリプトの送信には常にこれを使います。
 次に、同じく mschDriver.pl 内で定義されている msch_receiveResponse() を呼び出し、レスポンスを受信し、受信したレスポンスを変数 $response に代入しています。
 そのあと、このレスポンスの「先頭から3文字」を調べるために substr()関数を使って先頭3文字を取得し、それが"OK:"に等しいかどうかをif文で調べています。OK:以外のものが返されたらINIコマンドが失敗したと判断しエラーにするためです。
 以上の処理はINIコマンドに限らないことなので他の場面にも応用できるでしょう。ちなみに、sample/program/perlCGI/search.cgi においては、上記最後の7行分の処理をサブルーチンとして独立させ、これを呼び出すことで検査をおこなうようになっています。どのコマンドを送信した時もレスポンスの検査方法は共通だからです。
 なお、コマンドに対するレスポンスの先頭部ですが、正常であれば"OK:"、エラーであれば"NG:"が返されるようになっています。プログラムとしてどちらを見るかで組み方が変わってしまいますが、
     "NG:"が来たらエラー     ←×
と考えるのでなく、
     "OK:"が来たら正常、それ以外はすべてエラー     ←○
と判定してください。
 OK:レスポンスとNG:レスポンスはすべてのコマンドに存在するものなのでここでまとめておきます。

OK:レスポンス
    (形式1)
      OK:
    (形式2)
      OK:<--何らかの情報-->

NG:レスポンス
    (形式)
      NG:<--エラーメッセージ-->



「STA」コマンド(作業開始)

 INIコマンドのあと、さらにもう1つのコマンド実行が必要です(INIと同様に必須です)。

STAコマンド
    (形式)
      STA

    (レスポンスの例)
      OK:MindSearch Hyper Ver.2.0 (SDK) / MaxSessions=2000 / MaxConnections=3 /
       Build=2009-05-23 11:37 / BasePath=/home/foo/msch/mshyper
 STAは 'STart with Asynchronous mode'の略です。非同期検索モードによる作業開始を表わします。
 STAコマンドのレスポンス「OK:」の後ろには多量の情報が含まれます。MindSearchのエディション名、バージョン番号、最大同時接続数、ビルド日付、ベースパスが返されているのが分かります。この情報はもちろんアプリケーションが利用できますが、どちらかと言うと人に読まれることを意識した情報です。
一般にレスポンス"OK:"の後ろ側は付加的な情報であって、アプリケーションはこれを無視して良いことが多いです

「FIN」「SUS」コマンド(作業終了)

FINコマンド
    (形式)
      FIN

    (レスポンス)
      OK:
 FINは 'Finish'の略です。アプリケーションの終了をMindSearchコアに通知します。アプリケーションはレスポンスを受け取ったら(そのレスポンスが何であれ)ソケットを切断してください。
 FINコマンドで終了する場合には、セッション情報は抹消されるので、接続中におこなった検索結果を後から取得することはできません。

SUSコマンド
    (形式)
      SUS

    (レスポンス)
      OK:<SESSIONKEY>
         ←--14桁--→

    (レスポンスの例)
      OK:app0100913910C
 SUSは 'Suspend'の略です。MindSearchとの交信の最後に発行するという点はFINコマンドに似た機能ですが、アプリケーションの現在の稼動状態をディスクに退避していわば「一旦終了」の状態にするところが異なります。
 アプリケーションはレスポンスを解析してください。先頭3文字が"OK:"であればSUSコマンドは正しく処理されたことを表わします。レスポンスから先頭3文字を取り除いた残りの部分(必ず14桁)のセッションキーを取り出し、アプリケーション内部に保存してください(たとえば、セッションキーをHidden変数に組み入れて次画面に情報を伝えてください)。このセッションキーは、次にCGIが再度立ち上がり、MindSearchと再接続し、検査結果の続きを取得するためにRESコマンドを発行するのに使います(詳しい解説は セッション管理 を参照ください)。



「RES」コマンド(作業再開)

RESコマンド
    (形式)
      RES

    (レスポンスの例)
      OK:MindSearch Hyper Ver.2.0 (SDK) / MaxSessions=2000 / MaxConnections=3 /
       Build=2009-05-23 11:37 / BasePath=/home/foo/msch/mshyper
 RESコマンドは「作業の開始をMindSearchに知らせる」という意味ではSTA/STSコマンドに類似のコマンドです。SUSコマンドによってMindSearchと交信終了したアプリケーションは(たとえプロセスが一旦終了した後であっても)、次のタイミングでMindSearchと再接続し、INIコマンドを発行したあと、このRESコマンドを発行することでSUS実行時の環境を復元した状態で作業再開することができます。たとえば、前回取得した検索結果の続きを取得することなどが可能です。
 なお、RESコマンドを使うには、それに先立ち「長形式」のINIコマンドを発行しておく必要があります。INIとRESを両方使う使用例は以下の通りです。
    (送信→)
      INI:app0100913910C        ←注:INI:の引数は長形式の14桁(SUS時のレスポンス値を使うこと)
    (←受信)
      OK:app0100913910C
    (送信→)
      RES
    (←受信)
      OK:MindSearch Hyper Ver.2.0 (SDK) / MaxSessions=2000 / MaxConnections=3 /
       Build=2009-05-23 11:37 / BasePath=/home/foo/msch/mshyper
 セッション管理 も合わせてお読み願います。



「CHR」コマンド(文字コード指定)

CHRコマンド
    (形式)
      CHR:sjis
      CHR:euc

    (レスポンスの例)
      OK:sjis
      OK:euc
 CHRコマンドはアプリケーションとMindSearchとの通信における文字コードを指定するものです。
 セクション 「文字コードについて」 でも解説しましたが通信時の標準の文字コードはEUC-JPです。これをSHIFT_JISに変更する、あるいは元のEUCに戻すことができます。
 なお、本指定にかかわらず、MindSearchの内部処理はすべてEUC-JPです。
Javaが外部との通信をEUCとした場合に一部の文字コードが正しく伝達されない(文字化けする)という問題があります。Java側の仕様のようですが本機能はその問題を回避することにも使えます。
アプリケーションをJavaで開発する場合には、本コマンドでMindSearch側動作をSJISに切り替えるだけでなく、Java向け通信ドライバ MschDriver のインスタンス生成時の文字エンコード指定を "shift_jis" としてください。サンプルプログラムの Serach.java では以下の部分になります。
       -------------------------------
       // MschDriverのインスタンス生成
       msch   = new MschDriver( IOcharset );    ←IOcharsetの値を'shift_jis'とする
       -------------------------------


Copyright(C) 2000-2009 Scripts Lab. Inc.