2.3 問合せアプリケーションのクイック・ツアー

基本的なテキスト問合せアプリケーションでは、ユーザーが問合せワードまたは句を入力すると、アプリケーションは、問合せに最も一致するドキュメントのリストを戻します。このようなアプリケーションでは、CONTEXT索引が作成され、CONTAINSを使用してこの索引の問合せが行われます

通常は、問合せアプリケーションにはユーザー・インタフェースが必要です。CONTEXT索引タイプを使用してこのような問合せアプリケーションを作成する方法の例は、「CONTEXT問合せアプリケーション」を参照してください。

ここに示された例では、テキスト表へのロード、ドキュメントの索引付けおよび索引の問合せのための基本SQL文を提供します。

2.3.1 テキスト表の作成

表を作成して表にドキュメントをロードするには、次のステップを実行します。

  1. 新規ユーザーとして接続

    表を作成する前に、ユーザーのIDが作成されていることを前提とします。

    CONNECT myuser;
    
  2. テキスト表の作成

    次の例では、CREATE TABLE文を使用して、id列およびtext列を持つdocsという表を作成します。この例では、id列を主キーとしています。text列は、VARCHAR2です。

    CREATE TABLE docs (id NUMBER PRIMARY KEY, text VARCHAR2(200));

    ノート:

    サポートされる主キーの型は、NUMBER、VARCHAR2、DATE、CHAR、VARCHARおよびRAWです

  3. ドキュメントの表へのロード

    SQLのINSERT文を使用して、テキストを表にロードします。

    docs表への移入には、INSERT文を使用します。

    INSERT INTO docs VALUES(1, '<HTML>California is a state in the US.</HTML>');
    INSERT INTO docs VALUES(2, '<HTML>Paris is a city in France.</HTML>');
    INSERT INTO docs VALUES(3, '<HTML>France is in Europe.</HTML>');

2.3.2 SQL*Loaderを使用した表へのロード

SQL*Loaderを使用して、バッチで表をロードできます。

次のステップを実行して、SQL*Loaderで表へのロードをバッチで実行します。

  1. CONTEXT索引の作成

    HTMLファイルを索引付けするには、次のようにCONTEXT索引をテキスト列に作成します。HTMLの索引付けであるため、この例では、フィルタ処理が不要なNULL_FILTERプリファレンス型とHTML_SECTION_GROUP型を使用します。PDF、Microsoft Wordまたはその他の書式設定されたドキュメントを索引付けする場合は、FILTERプリファレンスとしてCTXSYS.AUTO_FILTER(デフォルト)を使用します。

    CREATE INDEX idx_docs ON docs(text)
         INDEXTYPE IS CTXSYS.CONTEXT PARAMETERS
         ('FILTER CTXSYS.NULL_FILTER SECTION GROUP CTXSYS.HTML_SECTION_GROUP');
    

    この例では、HTMLドキュメントの索引付けに推奨されているHTML_SECTION_GROUPセクション・グループも使用します。HTML_SECTION_GROUPを使用すると、特定のHTMLタグ内を検索して、フォント情報などの不要なマークアップを索引から削除できます。

  2. CONTAINSの使用による表の問い合せ

    まず、読みやすいように、SELECT文の出力書式を設定します。text列の幅を40文字にします。

    COLUMN text FORMAT a40;
    

    次に、SELECT文でCONTAINSを使用して表を問い合せます。これの問合せにより、問合せを満たすドキュメントIDが取得されます。次の問合せは、ワードFranceを含むドキュメントをすべて検索します。

    SELECT SCORE(1), id, text FROM docs WHERE CONTAINS(text, 'France', 1) > 0;
    
      SCORE(1)         ID TEXT
    ---------- ---------- ----------------------------------------
             4          3 <HTML>France is in Europe.</HTML>
             4          2 <HTML>Paris is a city in France.</HTML>
  3. ドキュメントの表示

    実際のアプリケーションでは、選択したドキュメントを、問合せの語句がハイライト表示された状態で表示する場合があります。Oracle Textを使用すると、CTX_DOCパッケージによってドキュメントをマークアップできます。

    SQL*Plusの無名PL/SQLブロックを使用して、HTMLドキュメントのマークアップを表示できます。ただし、実際のアプリケーションでは、ドキュメントをブラウザで表示する場合があります。

    このPL/SQLの例では、CTX_DOC.MARKUPのインメモリー・バージョンを使用して、ドキュメント3のワードFranceをハイライト表示します。マークアップ・テキストを格納するために一時CLOB (キャラクタ・ラージ・オブジェクト・データ型)が割り当てられ、標準出力に戻されます。終了前に、CLOBの割当てが解除されます。

    SET SERVEROUTPUT ON;
    DECLARE
      2  mklob CLOB;
      3  amt NUMBER := 40;
      4  line VARCHAR2(80);
      5  BEGIN
      6    CTX_DOC.MARKUP('idx_docs','3','France', mklob);
      7    DBMS_LOB.READ(mklob, amt, 1, line);
      8    DBMS_OUTPUT.PUT_LINE('FIRST 40 CHARS ARE:'||line);
      9    DBMS_LOB.FREETEMPORARY(mklob);
     10    END;
     11  /
    FIRST 40 CHARS ARE:<HTML><<<France>>> is in Europe.</HTML>
    
    PL/SQL procedure successfully completed.
  4. データ操作後の索引の同期化

    CONTEXT索引を作成する場合、索引を明示的に同期化して、テキスト表に対する挿入、更新または削除にあわせて索引を更新します。

    Oracle Textでは、CTX_DDL.SYNC_INDEXプロシージャを使用して索引を同期化できます。

    docs表に行を追加します。

    INSERT INTO docs VALUES(4, '<HTML>Los Angeles is a city in California.</HTML>');
    INSERT INTO docs VALUES(5, '<HTML>Mexico City is big.</HTML>');
    

    索引は同期化されていないため、これらの新しい行は、cityを問い合せても戻りません。

    SELECT SCORE(1), id, text FROM docs WHERE CONTAINS(text, 'city', 1) > 0;
    
      SCORE(1)         ID TEXT
    ---------- ---------- --------------------------------------------------
             4          2 <HTML>Paris is a city in France.</HTML>
    

    したがって、2MBのメモリーを使用して索引を同期化し、問合せを再実行します。

    EXEC CTX_DDL.SYNC_INDEX('idx_docs', '2M');
    
    PL/SQL procedure successfully completed.
    
    COLUMN text FORMAT a50;
    SELECT SCORE(1), id, text FROM docs WHERE CONTAINS(text, 'city', 1) > 0;
    
      SCORE(1)         ID TEXT
    ---------- ---------- --------------------------------------------------
             4          5 <HTML>Mexico City is big.</HTML>
             4          4 <HTML>Los Angeles is a city in California.</HTML>
             4          2 <HTML>Paris is a city in France.</HTML>

    関連項目:

    SQL*Loaderを使用したデータ・ファイルからテキスト表へのロード方法の例は、PSP Webアプリケーションの作成を参照してください