ヘッダーをスキップ
Oracle Textリファレンス
10gリリース2(10.2)
部品番号: B19214-01
  目次へ
目次
索引へ
索引

前へ
前へ
次へ
次へ
 

2 Oracle Text索引付けの要素

この章では、Oracle Textの索引の作成に使用できる様々な要素について説明します。

この章の内容は次のとおりです。

概要

索引の作成にCREATE INDEXを使用する場合、または索引の管理にALTER INDEXを使用する場合は、オプションでパラメータ文字列に索引付けプリファレンス、ストップリストおよびセクション・グループを指定できます。プリファレンス、ストップリストまたはセクション・グループを指定することによって、Oracle Textがテキストを索引付けする方法を1つずつ設定できます。

プリファレンス・クラス 説明
データストア ドキュメントの保存方法
フィルタ ドキュメントのプレーン・テキストへの変換方法
レクサー 索引付けされる言語
ワードリスト ステミング問合せおよびファジー問合せの拡張方法
記憶域 索引表の格納方法
ストップリスト 索引付けしないワードまたはテーマ
セクション・グループ セクション内の問合せの使用可能化、およびドキュメント・セクションの定義方法

この章では、各プリファレンスの設定方法について説明します。オプションを使用可能にするには、この章で説明する型の1つを使用してプリファレンスを作成します。

たとえば、ドキュメントを外部ファイルに格納するように指定するには、FILE_DATASTORE型を使用してmydatastoreというデータストア・プリファレンスを作成できます。mydatastoreをデータストア・プリファレンスとしてCREATE INDEXのPARAMETERS句に指定します。

プリファレンスの作成

データストア、レクサー、フィルタ、分類、ワードリストまたは記憶域プリファレンスを作成するには、CTX_DDL.CREATE_PREFERENCEプロシージャを使用し、この章で説明する型の1つを指定します。一部の型に対しては、CTX_DDL.SET_ATTRIBUTEプロシージャで属性も設定できます。

索引付けの型は、索引プリファレンスの作成に使用できる索引付けオブジェクトのクラスに名前を付けます。したがって、型は抽象IDですが、プリファレンスは型に対応するエンティティです。システム定義プリファレンスの多くは、型と同じ名前(例: BASIC_LEXER)が付いていますが、正確な対応は保証されていません(たとえば、DEFAULT_DATASTOREプリファレンスはDIRECT_DATASTORE型を使用しますが、CHARSET_FILTER型に対応するシステム・プリファレンスはありません)。索引付けの型やシステム・プリファレンスの存在または性質を推測する場合には、注意が必要です。

CREATE INDEXALTER INDEXで索引付けプリファレンスを指定します。索引付けプリファレンスにより、索引の作成方法が決定されます。たとえば、レクサー・プリファレンスは、索引付けするテキストの言語を示します。独自(ユーザー定義)のプリファレンスを作成して指定したり、システム定義のプリファレンスを利用することもできます。

ストップリストを作成するには、CTX_DDL.CREATE_STOPLISTを使用します。CTX_DDL.ADD_STOPWORDを使用すると、ストップリストにストップワードを追加できます。

セクション・グループを作成するには、CTX_DDL.CREATE_SECTION_GROUPを使用してセクション・グループの型を指定します。 CTX_DDL.ADD_ZONE_SECTIONまたはCTX_DDL.ADD_FIELD_SECTIONを使用すると、セクション・グループにセクションを追加できます。

データストア型

データストア型を使用して、テキストの格納方法を指定します。データストア・プリファレンスを作成するには、次のデータストア型の1つを使用する必要があります。

表2-1 データストア型

データストア型 使用する場合
DIRECT_DATASTORE
データをテキスト列に内部的に格納する場合。各列が単一のドキュメントとして索引付けされます。
MULTI_COLUMN_DATASTORE
データをテキスト表の複数の列に格納する場合。列が連結され、各行に1つずつ仮想ドキュメントが作成されます。
DETAIL_DATASTORE
データをテキスト列に内部的に格納する場合。ドキュメントがディテール表のテキスト列にある1つ以上の行で構成され、ヘッダー情報はマスター表に格納されます。
FILE_DATASTORE
データをオペレーティング・システム・ファイルに外部的に格納する場合。ファイル名が、テキスト列の各行に1つずつ格納されます。
NESTED_DATASTORE
データを、NESTED TABLEに格納する場合。
URL_DATASTORE
データをインターネットまたはイントラネット上にあるファイルに外部的に格納する場合。Uniform Resource Locator(URL)がテキスト列に格納されます。
USER_DATASTORE
ドキュメントが、索引付け時にユーザー定義ストアド・プロシージャによって合成されます。

DIRECT_DATASTORE

テキスト列の各行にドキュメントが1つずつ直接格納されるテキストには、DIRECT_DATASTORE型を使用します。DIRECT_DATASTOREには属性がありません。

CHARVARCHARVARCHAR2BLOBCLOBBFILEまたはXMLTypeの列型がサポートされています。


注意:

列がBFILEの場合、索引所有者は、BFILEによって使用されるすべてのディレクトリに対して読取り権限を持っている必要があります。

DIRECT_DATASTORE CLOBの例

次の例では、テキスト・データを格納するCLOB列がある表を作成します。表の作成後、2つの行にテキスト・データを移入し、システム定義プリファレンスCTXSYS.DEFAULT_DATASTOREを使用して表を索引付けします。

create table mytable(id number primary key, docs clob);

insert into mytable values(111555,'this text will be indexed');
insert into mytable values(111556,'this is a direct_datastore example');
commit;

create index myindex on mytable(docs)
  indextype is ctxsys.context
  parameters ('DATASTORE CTXSYS.DEFAULT_DATASTORE');

MULTI_COLUMN_DATASTORE

テキストが複数の列に格納されている場合は、このデータストアを使用します。索引付け時、システムはテキスト列を連結し、列テキストにタグ付けして、テキストを単一ドキュメントとして索引付けします。XMLに似たタグ付けはオプションです。バイナリ列をフィルタ処理して連結するように、システムを設定することもできます。

MULTI_COLUMN_DATASTOREには次の属性があります。

表2-2 MULTI_COLUMN_DATASTORE属性

属性 属性値
columns 索引付け時に連結する列のカンマで区切られたリストを指定します。元表に関するSELECT文の列リストに使用可能な式も指定できます。この中には、各種の式、PL/SQLファンクション、列別名などが含まれます。

NUMBER列型およびDATE列型はサポートされています。これらの型は、索引付け前にデフォルトの書式マスクを使用してテキストに変換されます。書式設定には、TO_CHARファンクションを列リストで使用できます。

RAW列およびBLOB列は、バイナリ・データとして直接連結されます。

LONGLONG RAWNCHARNCLOB、NESTED TABLEの各列およびコレクションはサポートされていません。

列リストは500バイトに制限されています。

filter カンマで区切られたY/Nフラグのリストを指定します。各フラグはCOLUMNSリストの列に対応しており、AUTO_FILTERを使用して列をフィルタ処理するかどうかを示します。

次の使用可能な値のいずれかを指定します。

Y: 列はAUTO_FILTERでフィルタ処理されます。

Nまたは値なし: 列はフィルタ処理されません(デフォルト)。

delimiter 列テキストを区切るデリミタを指定します。次のいずれかを使用します。

COLUMN_NAME_TAG: 列テキストは、XMLに似たオープン・タグとクローズ・タグで区切られます(デフォルトの動作)。

NEWLINE: 列テキストは改行で区切られます。


索引付けとDML

索引付けには、CREATE INDEX文で指定するダミー列を作成する必要があります。ダミー列の内容は、その列名が列属性で指定されていないかぎり、仮想ドキュメントの一部にはなりません。

索引は、ダミー列の更新時にのみ同期化されます。必要に応じて、変更内容を伝播するためにトリガーを作成できます。

MULTI_COLUMN_DATASTOREの例

次の例では、3つのテキスト列を持つmy_multiという複数列のデータストア・プリファレンスを作成します。

begin
ctx_ddl.create_preference('my_multi', 'MULTI_COLUMN_DATASTORE');
ctx_ddl.set_attribute('my_multi', 'columns', 'column1, column2, column3');
end;

MULTI_COLUMN_DATASTOREフィルタの例

次の例では、複数列のデータストア・プリファレンスを作成して、bar列がAUTO_FILTERでフィルタ処理されることを示します。

ctx_ddl.create_preference('MY_MULTI','MULTI_COLUMN_DATASTORE');
ctx_ddl.set_attribute('MY_MULTI', 'COLUMNS','foo,bar');
ctx_ddl.set_attribute('MY_MULTI','FILTER','N,Y');


複数列のデータストアは、foo列およびbar列の内容をフェッチして、barをフィルタ処理し、複合ドキュメントを次のように構成します。

<FOO>
foo contents
</FOO>
<BAR>
bar filtered contents (probably originally HTML)
</BAR>

Nを指定する必要はありません。また、列ごとにフラグを設定する必要もありません。適用する列を示すカンマを付けて、Yのみを指定してください。次に例を示します。

ctx_ddl.create_preference('MY_MULTI','MULTI_COLUMN_DATASTORE');
ctx_ddl.set_attribute('MY_MULTI', 'COLUMNS','foo,bar,zoo,jar');
ctx_ddl.set_attribute('MY_MULTI','FILTER',',,Y');


これにより、列zooのみがフィルタ処理されます。

タグ付けの動作

索引付け時、列ごとに仮想ドキュメントが作成されます。仮想ドキュメントは、リスト順に連結され自動的に列名タグが追加された列の内容で構成されています。次に例を示します。

create table mc(id number primary key, name varchar2(10), address varchar2(80));
insert into mc values(1, 'John Smith', '123 Main Street');

exec ctx_ddl.create_preference('mymds', 'MULTI_COLUMN_DATASTORE');
exec ctx_ddl.set_attibute('mymds', 'columns', 'name, address');

これによって、次の仮想テキストが索引付けのために作成されます。

<NAME>
John Smith
</NAME>
<ADDRESS>
123 Main Street
</ADDRESS>

システムでは、タグ自体は無視して、タグで囲まれたテキストを索引付けします。

セクションとしての列の索引付け

これらのタグをセクションとして索引付けするには、オプションで、BASIC_SECTION_GROUPを使用してフィールド・セクションを作成できます。


注意:

MULTI_COLUMN_DATASTOREを使用した場合、セクション・グループは作成されません。これらのタグに対してセクションを作成するには、セクション・グループを作成する必要があります。

式またはファンクションを使用する場合、列別名が使用されていないかぎり、タグは使用する式の最初の30文字で構成されます。

たとえば、次の式を使用するとします。

exec ctx_ddl.set_attibute('mymds', 'columns', '4 + 17');

次の仮想テキストが生成されます。

<4 + 17>
21
</4 + 17>

次の式を使用するとします。

exec ctx_ddl.set_attibute('mymds', 'columns', '4 + 17 col1');

次の仮想テキストが生成されます。

<col1>
21
<col1>

列名または列別名が小文字で二重引用符で囲まれていないかぎり、タグは大文字になります。次に例を示します。

exec ctx_ddl.set_attibute('mymds', 'COLUMNS', 'foo');

次の仮想テキストが生成されます。

<FOO>
content of foo
</FOO>

小文字のタグを生成するには、次のようにします。

exec ctx_ddl.set_attibute('mymds', 'COLUMNS', 'foo "foo"');

この式によって、次のタグが生成されます。

<foo>
content of foo
</foo>

DETAIL_DATASTORE

データベースのディテール表に直接格納されているテキストには、DETAIL_DATASTORE型を使用します。この場合、マスター表に索引付けされたテキスト列があります。

DETAIL_DATASTOREには次の属性があります。

表2-3 DETAIL_DATASTORE属性

属性 属性値
binary Oracle TextにTRUEを指定すると、各ディテール表の行の後ろに改行文字は追加されません。

Oracle TextにFALSEを指定すると、各ディテール表の行の後ろに改行文字(¥n)が自動的に追加されます。

detail_table ディテール表の名前(必要な場合はOWNER.TABLE)を指定します。
detail_key ディテール表の外部キー列の名前を指定します。
detail_lineno ディテール表の順序列の名前を指定します。
detail_text ディテール表のテキスト列の名前を指定します。

マスター表/ディテール表の索引の同期化

ディテール表が変更された場合、索引の同期化時に再索引付け操作はトリガーされません。マスター表の索引付けされた列が変更された場合のみ、索引の同期化時に再索引付け操作がトリガーされます。

ディテール表にトリガーを作成すると、マスター表の行の索引付けされた列に変更内容を伝播できます。

マスター表/ディテール表の例

この例では、マスター表およびディテール表が互いにどのように関連しているかを示します。

マスター表の例

マスター表は、マスター/ディテールの関係にあるドキュメントを定義します。各ドキュメントに識別番号を割り当てます。次の表は、my_masterというマスター表の例です。

列名 列型 説明
article_id NUMBER 各ドキュメントに一意のドキュメントID(主キー)
author VARCHAR2(30) ドキュメントの作成者
title VARCHAR2(50) ドキュメントのタイトル
body CHAR(1) CREATE INDEX内で指定するダミー列


注意:

DETAIL_DATASTORE型を使用する場合は、マスター表に主キー列を組み込む必要があります。

ディテール表の例

ディテール表にはドキュメントのテキストがあり、通常、その内容はいくつかの行に分散して格納されます。次のディテール表my_detailは、article_id列でマスター表my_masterと関連しています。この列によって、各ディテール表の行(サブドキュメント)が属するマスター・ドキュメントを識別します。

列名 列型 説明
article_id NUMBER マスター表に関連するドキュメントID
seq NUMBER article_idで定義されるマスター表のドキュメント順序
text VARCHAR2 ドキュメント・テキスト

ディテール表の例の属性

この例で、DETAIL_DATASTORE属性には次の値が指定されます。

属性 属性値
binary TRUE
detail_table my_detail
detail_key article_id
detail_lineno seq
detail_text text

CTX_DDL.CREATE_PREFERENCEを使用して、DETAIL_DATASTOREを持つプリファレンスを作成します。CTX_DDL.SET_ATTRIBUTEを使用して、このプリファレンスに属性を設定します。次に、これを行う方法を示します。

begin
ctx_ddl.create_preference('my_detail_pref', 'DETAIL_DATASTORE');
ctx_ddl.set_attribute('my_detail_pref', 'binary', 'true');
ctx_ddl.set_attribute('my_detail_pref', 'detail_table', 'my_detail');
ctx_ddl.set_attribute('my_detail_pref', 'detail_key', 'article_id');
ctx_ddl.set_attribute('my_detail_pref', 'detail_lineno', 'seq');
ctx_ddl.set_attribute('my_detail_pref', 'detail_text', 'text');
end;
マスター/ディテールの索引の例

このマスター/ディテールの関係で定義されたドキュメントを索引付けするには、CREATE INDEXでマスター表の列を指定します。指定する列は、許容される型のいずれかである必要があります。

この例ではbody列を使用します。この列には、マスター/ディテールの索引の作成を可能にし、コードの可読性を向上させる機能があります。my_detail_prefプリファレンスは、必要な属性でDETAIL_DATASTOREに設定されます。

CREATE INDEX myindex on my_master(body) indextype is ctxsys.context
parameters('datastore my_detail_pref');

この例では、titleまたはauthor列を指定して索引を作成することもできます。ただし、これを指定すると、これらの列が変更された場合に、索引の再作成操作がトリガーされます。

FILE_DATASTORE

FILE_DATASTORE型は、ローカル・ファイル・システム上のファイルに格納されているテキストに使用します。


注意:

FILE_DATASTOREは、特定のタイプのリモート・マウント・ファイル・システムでは機能しないことがあります。

FILE_DATASTOREには次の属性があります。

表2-4 FILE_DATASTORE属性

属性 属性値
path path1:path2:pathn

path

ファイル・システムに外部的に格納されたファイルのフル・ディレクトリ・パス名を指定します。このようにフル・ディレクトリ・パスを指定する場合、テキスト列に組み込む必要があるのはファイル名のみです。

pathには複数のパスを指定できます(パスは、UNIXの場合はコロン(:)、Windowsの場合はセミコロン(;)で区切ります)。ファイル名は、テキスト表のテキスト列に格納されます。

この属性を使用して外部ファイルのパスを指定しない場合は、テキスト列にあるファイル名にパスを組み込む必要があります。

PATH属性の制限事項

PATH属性には、次の制限事項があります。

  • PATH属性を指定した場合、索引付けされた列では単純なファイル名のみ使用できます。ファイル名の一部としてPATH属性をパスと結合することはできません。ファイルが複数のフォルダまたはディレクトリに存在する場合、PATH属性を設定せずに、索引付けされた列にPATHを含む完全なファイル名を指定する必要があります。

  • Windowsシステムでは、ファイルはローカル・ドライブに配置する必要があります。リモート・ドライブがローカル・ドライブ文字にマップされているかどうかに関係なく、ファイルをリモート・ドライブに配置することはできません。

FILE_DATASTOREの例

この例では、パス/mydocsを持つCOMMON_DIRというファイル・データストア・プリファレンスを作成します。

begin
 ctx_ddl.create_preference('COMMON_DIR','FILE_DATASTORE');
 ctx_ddl.set_attribute('COMMON_DIR','PATH','/mydocs');
end;

mytable表にデータを移入する場合、テキスト列にはファイル名の挿入のみが必要となります。path属性によって、索引付け操作中に検索する場所がシステムに示されます。

create table mytable(id number primary key, docs varchar2(2000));
insert into mytable values(111555,'first.txt');
insert into mytable values(111556,'second.txt');
commit;

次のように索引を作成します。

create index myindex on mytable(docs)
  indextype is ctxsys.context
  parameters ('datastore COMMON_DIR');

URL_DATASTORE

次のファイルに格納されるテキストには、URL_DATASTORE型を使用します。

  • HTTPまたはFTPを使用してアクセスするWorld Wide Web上のファイル

  • ファイル・プロトコルを使用してアクセスするローカル・ファイル・システム内のファイル

各URLを単一のテキスト・フィールドに格納します。

URLの構文

テキスト・フィールドに格納するURLの構文は、次のとおりです(カッコ内は、オプションのパラメータです)。

[URL:]<access_scheme>://<host_name>[:<port_number>]/[<url_path>]

access_scheme文字列は、ftphttpまたはfileのいずれかです。次に例を示します。

http://mymachine.us.oracle.com/home.html

この構文はRFC1738仕様に部分的に適合しているため、次の制限がURLの構文に適用されます。

  • URLには、印字可能なASCII文字のみが含まれる必要があります。印字できないASCII文字およびマルチバイト文字は、%xx表記法でエスケープする必要があります。このxxは特殊文字の16進コードを表します。


    注意:

    login:password@構文がURL内でサポートされるのは、FTPアクセス・スキームの場合のみです。

URL_DATASTORE属性

URL_DATASTOREには次の属性があります。

表2-5 URL_DATASTORE属性

属性 属性値
timeout タイムアウトを秒単位で指定します。有効値の範囲は15〜3600秒です。デフォルトは30です。
maxthreads 同時に実行できるスレッドの最大数を指定します。1〜1024の数を使用します。デフォルトは8です。
urlsize URL文字列の最大長をバイト単位で指定します。32〜65535の数を指定します。デフォルトは256です。
maxurls URLバッファの最大サイズを指定します。32〜65535の数を指定します。デフォルトは256です。
maxdocsize ドキュメントの最大サイズを指定します。256〜2,147,483,647バイト(2GB)の数を指定します。デフォルトは2,000,000です。
http_proxy HTTPプロキシ・サーバーのホスト名を指定します。オプションで、hostname:portという形式でコロンを使用してポート番号を指定します。
ftp_proxy FTPプロキシ・サーバーのホスト名を指定します。オプションで、hostname:portという形式でコロンを使用してポート番号を指定します。
no_proxy 非プロキシ・サーバーのドメインを指定します。カンマで区切られた文字列を使用して、最大16個のドメイン名が指定できます。

timeout

接続や読込みなどのネットワーク処理がタイムアウトになるまでの時間、およびアプリケーションにタイムアウト・エラーを戻すまでの時間の長さを秒単位で指定します。timeoutの有効値の範囲は15〜3600で、デフォルトは30です。


注意:

タイムアウトはネットワーク処理を基準にしています。タイムアウトの合計時間はtimeoutに指定された時間より長くなることがあります。

maxthreads

同時に実行できるスレッドの最大数を指定します。maxthreadsの有効値の範囲は1〜1024で、デフォルトは8です。

urlsize

データベースに格納されているURLに対して、URLデータストアがサポートする最大長をバイト単位で指定します。URLが最大長より長い場合はエラーが戻ります。urlsizeの有効値の範囲は32〜65535で、デフォルトは256です。


注意:

maxurlsとurlsizeに指定した値の積が5,000,000を超えないようにしてください。

URLで使用できるメモリー・バッファの最大サイズ(maxurls*urlsize)は約5MBです。


maxurls

内部バッファが、テキスト表から取り出されたHTMLドキュメント(行)に保持できる行の最大数を指定します。maxurlsの有効値の範囲は32〜65535で、デフォルトは256です。


注意:

maxurlsurlsizeに指定した値の積が5,000,000を超えないようにしてください。

URLで使用できるメモリー・バッファの最大サイズ(maxurls*urlsize)は約5MBです。


http_proxy

Oracle TextがインストールされているマシンのHTTPプロキシ(ゲートウェイ)として機能するホスト・マシンの完全修飾名を指定します。オプションで、hostname:portという形式でコロンを使用してポート番号を指定できます。

この属性の設定が必要なのは、ファイアウォールの外側にあるWebファイルにアクセスするためにプロキシ・サーバーによる認証が必要なイントラネット上にマシンがある場合です。

ftp_proxy

Oracle TextがインストールされているマシンのFTPプロキシ(ゲートウェイ)として機能するホスト・マシンの完全修飾名を指定します。オプションで、hostname:portという形式でコロンを使用してポート番号を指定できます。

この属性の設定が必要なのは、ファイアウォールの外側にあるWebファイルにアクセスするためにプロキシ・サーバーによる認証が必要なイントラネット上にマシンがある場合です。

no_proxy

イントラネット上のマシンのほとんどすべてにあるドメイン文字列(16個以内、カンマで区切られている)を指定します。ドメインの1つがホスト名内で検出されると、ftp_proxyおよびhttp_proxyに指定されたマシンには要求が送られません。かわりに、要求は、URL内で指定されたホスト・マシンによって直接処理されます。

たとえば、no_proxyus.oracle.comまたはuk.oracle.comという文字列を指定した場合、ホスト名にこのドメインのいずれかが含まれているマシンへのすべてのURL要求は、プロキシ・サーバーでは処理されません。

URL_DATASTOREの例

この例では、URL_PREFというURL_DATASTOREプリファレンスを作成します。このプリファレンスには、http_proxy、no_proxyおよびタイムアウト属性を設定します。設定されない属性には、デフォルトが使用されます。

begin
 ctx_ddl.create_preference('URL_PREF','URL_DATASTORE');
 ctx_ddl.set_attribute('URL_PREF','HTTP_PROXY','www-proxy.us.oracle.com');
 ctx_ddl.set_attribute('URL_PREF','NO_PROXY','us.oracle.com');
 ctx_ddl.set_attribute('URL_PREF','Timeout','300');
end;

表を作成し、その表に値を挿入します。

create table urls(id number primary key, docs varchar2(2000));
insert into urls values(111555,'http://context.us.oracle.com');
insert into urls values(111556,'http://www.sun.com');
commit;

索引を作成するには、データストアとしてURL_PREFを指定します。

create index datastores_text on urls ( docs )
  indextype is ctxsys.context
  parameters ( 'Datastore URL_PREF' );

USER_DATASTORE

USER_DATASTORE型を使用して、索引付け時にドキュメントを合成するストアド・プロシージャを定義します。たとえば、ユーザー・プロシージャによって、1つのドキュメント内に作成者、日付およびテキスト列を合成することで、作成者と日付の情報を索引付けされるドキュメントの一部にすることもできます。

USER_DATASTOREには次の属性があります。

表2-6 USER_DATASTORE属性

属性 属性値
procedure 索引付けされるドキュメントを合成するプロシージャを指定します。

このプロシージャは、任意のユーザーが所有し、索引所有者が実行できる必要があります。

output_type procedureへの2つ目の引数のデータ型を指定します。有効な値は、CLOBBLOBCLOB_LOCBLOB_LOCまたはVARCHAR2です。デフォルトはCLOBです。

CLOB_LOCまたはBLOB_LOCを指定することは、一時CLOBまたは一時BLOBが不要であることを示します。これは、プロシージャによってロケータがIN/OUTの第2パラメータにコピーされるためです。


procedure

索引付けされるドキュメントを合成するプロシージャ名を指定します。この指定は、PROCEDURENAMEまたはPACKAGENAME.PROCEDURENAMEの形式である必要があります。スキーマの所有者名を指定することもできます。

指定するプロシージャには、次のように定義された2つの引数が必要です。

procedure (r IN ROWID, c IN OUT NOCOPY <output_type>)

1つ目の引数rは、ROWID型にしてください。2つ目の引数cは、output_type型である必要があります。NOCOPYは、可能な場合は参照によってパラメータcを渡すようにOracle Textに指示する、コンパイラ・ヒントです。


注意:

プロシージャ名およびその引数には、どのような名前でも付けることができます。この例では、説明を単純にするために、rおよびcという引数を使用しています。

ストアド・プロシージャは、索引付けされる行ごとに1回コールされます。現在行のROWIDが引数として渡されるたびに、このプロシージャは、ドキュメントのテキストを2つ目の引数(output_type型で指定)に書き込む必要があります。

制約

次の制約が、procedureに適用されます。

  • すべてのユーザーがprocedureを所有できますが、そのユーザーには、procedureを正しく実行するデータベース権限が必要です。

  • procedureは、索引所有者が実行できる必要があります。

  • procedureは、COMMITのようなトランザクション制御文またはDDLを発行できません。

索引付け後のプロシージャの編集

ストアド・プロシージャを変更または編集する場合、そのプロシージャをベースにしている索引には通知されないため、このような索引を手動で再作成する必要があります。ストアド・プロシージャが他の列を使用し、その列の値が変更された場合、行は再索引付けされません。行が再索引付けされるのは、索引列が変更されたときのみです。

output_type

procedureへの2つ目の引数のデータ型を指定します。CLOBBLOBCLOB_LOCBLOB_LOCまたはVARCHAR2のいずれかを指定できます。

CLOBを含むUSER_DATASTOREの例

次のように定義されたarticles表のように、作成者、タイトルおよびテキスト・フィールドが分割されている表を考えます。

create table articles(
    id       number,
    author   varchar2(80),
    title    varchar2(120),
    text     clob );

作成者フィールドおよびタイトル・フィールドは、索引付けドキュメントのテキストの一部になります。ユーザーappownerが、テキスト、作成者およびタイトル・フィールドからドキュメントを合成するストアド・プロシージャを作成するとします。

create procedure myproc(rid in rowid, tlob in out clob nocopy) is
  begin
      for c1 in (select author, title, text from articles
                  where rowid = rid)
      loop
 dbms_lob.writeappend(tlob, length(c1.title), c1.title);
   dbms_lob.writeappend(tlob, length(c1.author), c1.author);
   dbms_lob.writeappend(tlob, length(c1.text), c1.text);
 end loop;
    end;

このプロシージャは、ROWIDおよび一時CLOBロケータを取得し、すべての列を一時CLOBに連結します。forループは1回のみ実行されます。

ユーザーappownerは、次のようにプリファレンスを作成します。

begin
ctx_ddl.create_preference('myud', 'user_datastore');
ctx_ddl.set_attribute('myud', 'procedure', 'myproc');
ctx_ddl.set_attribute('myud', 'output_type', 'CLOB');
end;

appownerが、このプリファレンスを使用して索引をarticles(text)に作成する場合、索引付け操作では、ドキュメント・テキストにある作成者およびタイトルが参照されます。

BLOB_LOCを含むUSER_DATASTOREの例

次のプロシージャは、OUTPUT_TYPE BLOB_LOCで使用できます。

procedure myds(rid in rowid, dataout in out nocopy blob)
is
  l_dtype varchar2(10);
  l_pk    number;
begin
  select dtype, pk into l_dtype, l_pk from mytable where rowid = rid;
  if (l_dtype = 'MOVIE') then
    select movie_data into dataout from movietab where fk = l_pk;
  elsif (l_dtype = 'SOUND') then
    select sound_data into dataout from soundtab where fk = l_pk;
  end if;
end;

ユーザーappownerは、次のようにプリファレンスを作成します。

begin
ctx_ddl.create_preference('myud', 'user_datastore');
ctx_ddl.set_attribute('myud', 'procedure', 'myproc');
ctx_ddl.set_attribute('myud', 'output_type', 'blob_loc');
end;

NESTED_DATASTORE

NESTED_DATASTORE型は、NESTED TABLEに行として格納されているドキュメントを索引付けするために使用します。

表2-7 NESTED_DATASTORE属性

属性 属性値
nested_column NESTED TABLE列の名前を指定します。この属性は必須です。列名のみを指定します。スキーマ所有者または格納表の名前は指定しないでください。
nested_type NESTED TABLEの型を指定します。この属性は必須です。所有者名および型を指定する必要があります。
nested_lineno 行を順序付けする、NESTED TABLE内の属性名を指定します。これは、ディテール・データストアのDETAIL_LINENOに似ています。この属性は必須です。
nested_text 行のテキストを含むNESTED TABLE型内の列名を指定します。これは、ディテール・データストアのDETAIL_TEXTに似ています。この属性は必須です。LONG列型は、NESTED TABLEテキスト列としてはサポートされていません。
binary FALSEを指定すると、ドキュメント・テキストの合成時に、改行が自動的に挿入されます。TRUEを指定すると、これは行われません。この属性は必須ではありません。デフォルトはFALSEです。

NESTED TABLEデータストアを使用する場合、拡張索引作成機能フレームワークではNESTED TABLE列の索引付けが禁止されているため、ダミー列を索引付けする必要があります。例を参照してください。

NESTED TABLEのDMLは、索引付けに使用されたダミー列には自動的に伝播されません。NESTED TABLEのDMLをダミー列に伝播するには、アプリケーション・コードまたはトリガーによって、ダミー列を明示的に更新する必要があります。

索引に対するフィルタのデフォルトは、nested_text列の型によって異なります。

妥当性チェックの間に、その型が存在するかどうか、およびnested_linenoとnested_textに対して指定した属性がNESTED TABLE型に存在するかどうかがOracle Textによりチェックされます。指定されたNESTED TABLE列が索引付けされた表に存在するかどうかはチェックされません。

NESTED_DATASTOREの例

この項では、NESTED_DATASTORE型を使用して、NESTED TABLEの行として格納されたドキュメントを索引付けする例を示します。

NESTED TABLEの作成

次のコードは、NESTED TABLEおよびNESTED TABLEの記憶表mytabを作成します。

create type nt_rec as object (
  lno number, -- line number
  ltxt varchar2(80) -- text of line
);

create type nt_tab as table of nt_rec;
create table mytab (
   id number primary key, -- primary key
   dummy char(1), -- dummy column for indexing
   doc nt_tab -- nested table
)
nested table doc store as myntab;

NESTED TABLEへの値の挿入

次のコードは、NESTED TABLEの親行で、IDが1であるものに値を挿入します。

insert into mytab values (1, null, nt_tab());
insert into table(select doc from mytab where id=1) values (1, 'the dog');
insert into table(select doc from mytab where id=1) values (2, 'sat on mat ');
commit;
NESTED TABLEプリファレンスの作成

次のコードは、NESTED TABLE型nt_tabおよび親表mytabの定義に従って、NESTED_DATASTOREにプリファレンスおよび属性を設定します。

begin
-- create nested datastore pref
ctx_ddl.create_preference('ntds','nested_datastore');

-- nest tab column in main table
ctx_ddl.set_attribute('ntds','nested_column', 'doc');

-- nested table type
ctx_ddl.set_attribute('ntds','nested_type', 'scott.nt_tab');

-- lineno column in nested table
ctx_ddl.set_attribute('ntds','nested_lineno','lno');

--text column in nested table
ctx_ddl.set_attribute('ntds','nested_text', 'ltxt');
end;
NESTED TABLEへの索引の作成

次のコードは、NESTED TABLEデータストアを使用して索引を作成します。

create index myidx on mytab(dummy) -- index dummy column, not nest table
indextype is ctxsys.context parameters ('datastore ntds');
ネストしたデータストアの問合せ

次のSELECT文は、NESTED TABLEから作成された索引を問い合せます。

select * from mytab where contains(dummy, 'dog and mat')>0;
-- returns document 1, since it has dog in line 1 and mat in line 2.

フィルタ型

フィルタ型を使用して、ドキュメントをフィルタ処理して索引付けテキスト文字列を取得するためのプリファレンスを作成します。フィルタ処理によって、プレーン・テキスト、HTMLおよびXMLドキュメントの他に、ワード・プロセッサ形式のドキュメントおよび形式設定されたドキュメントの索引付けができるようになります。

形式設定されたドキュメントについては、ドキュメントをその固有の形式で格納した後、フィルタを使用してそのドキュメントの一時的なプレーン・テキストまたはHTML形式を作成します。Oracle Textにより、プレーン・テキストまたはHTMLで形式設定されたドキュメントから導出されたワードが索引付けされます。

フィルタ・プリファレンスを作成するには、次の型のうちいずれか1つを使用する必要があります。

表2-8 フィルタ型

フィルタ 使用される場合
CHARSET_FILTER
キャラクタ・セット変換フィルタです。
AUTO_FILTER
形式設定されたドキュメントのフィルタ処理用Autoフィルタです。
NULL_FILTER
フィルタ処理は必要ありません。プレーン・テキスト、HTMLまたはXMLドキュメントの索引付けに使用します。
MAIL_FILTER
MAIL_FILTERを使用して、RFC-822、RFC-2045メッセージを索引付け可能なテキストに変換します。
USER_FILTER
カスタム・フィルタ処理に使用するユーザー定義外部フィルタです。
PROCEDURE_FILTER
カスタム・フィルタ処理に使用するユーザー定義ストアド・プロシージャ・フィルタです。

CHARSET_FILTER

CHARSET_FILTERを使用して、非データベース・キャラクタ・セットからデータベースで使用されるキャラクタ・セットにドキュメントを変換します。

CHARSET_FILTERには次の属性があります。

表2-9 CHARSET_FILTER属性

属性 属性値
charset 変換元キャラクタ・セットのグローバリゼーション・サポート名を指定します。

UTF16AUTOを設定すると、このフィルタは、キャラクタ・セットの設定がUTF16 big-endianであるか、little-endianであるかを自動的に識別します。

日本語キャラクタ・セットの自動識別にはJAAUTOを指定します。このフィルタは、JA16EUCまたはJA16SJISのカスタム文字仕様を自動的に識別し、データベース・キャラクタ・セットに変換します。このフィルタは、データ・ファイルにキャラクタ・セットが混在する場合の日本語に有効です。



関連項目

サポートされているグローバリゼーション・サポート・キャラクタ・セットの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

UTF16 big-endianおよびlittle-endianの識別

キャラクタ・セットがUTF-16の場合、UTF16AUTOを指定するとbig-endianまたはlittle-endianを自動的に識別できます。Oracle Textでは、ドキュメント行の最初の2バイトを調べて、自動識別を実行します。

最初の2バイトが0xFE、0xFFの場合、そのドキュメントはlittle-endianと認識され、この2バイトを除いた残りのドキュメントが索引付けのために渡されます。

最初の2バイトが0xFF、0xFEの場合、そのドキュメントはbig-endianと認識され、この2バイトを除いた残りのドキュメントが索引付けのために渡されます。

最初の2バイトがそれ以外の場合、そのドキュメントはbig-endianとみなされ、最初の2バイトを含むドキュメント全体が索引付けのために渡されます。

複合キャラクタ・セット列の索引付け

複合キャラクタ・セット列は、異なるキャラクタ・セットを持つドキュメントを格納する列です。たとえば、1つのテキスト表に、WE8ISO8859P1のドキュメントとUTF8のドキュメントが格納されていることがあります。

異なるキャラクタ・セットのドキュメントを持つ表を索引付けするには、キャラクタ・セット列を持つ元表を作成する必要があります。この列では、ドキュメントのキャラクタ・セットを行ごとに指定します。ドキュメントは、Oracle Textによりデータベース・キャラクタ・セットに変換され、索引付けされます。

キャラクタ・セット変換は、CHARSET_FILTERで機能します。キャラクタ・セット列がNULL、または認識されない場合、Oracle Textにより変換元キャラクタ・セットは、charset属性に指定されたものの1つとみなされます。


注意:

ドキュメント・フォーマット列がTEXTに設定されている場合、キャラクタ・セット変換は、AUTO_FILTERでも機能します。

複合キャラクタ・セットの索引付けの例

キャラクタ・セット列を持つ表を、次のように作成するとします。

create table hdocs (
     id number primary key,
     fmt varchar2(10),
     cset varchar2(20),
     text varchar2(80)
);

このフィルタのプリファレンスを作成します。

begin
cxt_ddl.create.preference('cs_filter', 'CHARSET_FILTER');
ctx_ddl.set_attribute('cs_filter', 'charset', 'UTF8');end

プレーン・テキストのドキュメントを挿入し、キャラクタ・セット名を指定します。

insert into hdocs values(1, 'text', 'WE8ISO8859P1', '/docs/iso.txt');
insert into hdocs values (2, 'text', 'UTF8', '/docs/utf8.txt');
commit;

索引を作成し、キャラクタ・セット列を指定します。

create index hdocsx on hdocs(text) indextype is ctxsys.context
  parameters ('datastore ctxsys.file_datastore
  filter cs_filter
  format column fmt
  charset column cset');

AUTO_FILTER

AUTO_FILTERは、PDFおよびMicrosoft Word™のドキュメントを含む、ほとんどのドキュメント形式をフィルタ処理する汎用フィルタです。単一書式および複合書式の両方の列の索引付けに使用します。このフィルタは、プレーン・テキスト、HTML、XHTML、SGMLおよびXMLドキュメントを自動的にバイパスします。


関連項目

AUTO_FILTERがサポートしている形式のリストおよびこのフィルタを使用する環境の設定方法は、付録B「Oracle Textでサポートされているドキュメント形式」を参照してください。


注意:

AUTO_FILTERは、廃止されたINSO_FILTERに代わるものです。INSO_FILTERを使用するアプリケーションに変更を加えずに機能するように、2つのフィルタ間の下位互換性を最大限確保していますが、一部相違が発生する可能性があります。このため、ユーザーは新しいプログラムでAUTO_FILTERを使用し、可能な場合は、INSO_FILTERのインスタンスおよび旧アプリケーションでそのインスタンスを使用するすべてのシステム・プリファレンスまたは定数を置換してください。

AUTO_FILTERプリファレンスには次の属性があります。

表2-10 AUTO_FILTER属性

属性 属性値
timeout AUTO_FILTERタイムアウトを秒単位で指定します。0〜42,949,672の数を使用します。デフォルトは120です。この値を0(ゼロ)に設定すると、この機能は使用禁止になります。

この待機時間がどのように使用されるかは、timeout_typeの設定方法によって異なります。

この機能は、行に対応しているキャラクタ・セット列やフォーマット列によってAUTO_FILTERがバイパスする行には使用できません。たとえば、その形式がTEXTにマークされている場合です。

この機能を使用して、Oracle Textの索引付け操作が停止中のフィルタ操作を無制限に待機するのを回避します。

timeout_type HEURISTICまたはFIXEDを指定します。デフォルトはHEURISTICです。

Outside In HTML Exportによる出力が増加した場合に、すべてのタイムアウト秒をチェックする場合は、Oracle TextにHEURISTICを指定します。出力が増加していない場合、そのドキュメントに対する操作は終了します。エラーはCTX_USER_INDEX_ERRORSビューに記録され、操作は次の索引付け対象のドキュメント行に移動します。

フィルタ処理が正常に進行中か停止中かに関係なく、タイムアウト秒後にOutside In HTML Exportの処理を終了するには、FIXEDを指定します。この値は、大規模なドキュメントのフィルタ処理を正常に行うために時間をかけるより、索引付けのスループットが重要な場合に便利です。

output_formatting この属性を設定しても、フィルタのパフォーマンスまたはフィルタの出力に影響はありません。 下位互換性の目的でのみ保持されています。

形式設定されたドキュメントの索引付け

Microsoft Wordなどの形式設定されたドキュメントを含むテキスト列を索引付けするには、AUTO_FILTERを使用します。このフィルタは、ドキュメント形式を自動的に検出します。CTXSYS.AUTO_FILTERシステム定義プリファレンスを、PARAMETERS句で次のように使用できます。

create index hdocsx on hdocs(text) indextype is ctxsys.context
  parameters ('datastore ctxsys.file_datastore
  filter ctxsys.auto_filter');

注意:

CTXSYS.AUTO_FILTERは、廃止されたCTXSYS.INSO_FILTERに代わるものです。 CTXSYS.INSO_FILTERを使用するプログラムはまだ機能しますが、新しいプログラムでは、CTXSYS.AUTO_FILTERを使用してください。

複合フォーマット列のプレーン・テキストまたはHTMLの明示的なバイパス

複合フォーマット列は、複数のドキュメント形式を含むテキスト列です。これには、Microsoft Word、PDF、プレーン・テキストおよびHTMLドキュメントを含む列などがあります。

AUTO_FILTERによって、複合フォーマット列を索引付けして、プレーン・テキスト、HTMLおよびXML文書を自動的にバイパスできます。ただし、組込みのバイパス・メカニズムを使用しない場合は、行をテキストとして明示的にタグ付けし、AUTO_FILTERがその行を無視して、ドキュメントを処理しないように指定できます。

元表内のフォーマット列では、テキスト列に含まれるドキュメントのタイプを指定できます。指定できるドキュメント・タイプは、TEXTBINARYおよびIGNOREです。索引付け中に、AUTO_FILTERは、TEXTと指定されたすべてのドキュメントを無視します(キャラクタ・セット列が指定されていない場合)。(TEXTフォーマット列タイプのドキュメントとIGNOREタイプのドキュメントの相違点は、TEXTドキュメントは索引付けされてフィルタには無視されるのに対し、IGNOREドキュメントはまったく索引付けされない点です。IGNOREを使用すると、イメージ・ファイルなどのドキュメントまたは索引付けしない言語のドキュメントが無視されます。IGNOREはどのフィルタ・タイプにも使用できます。)

AUTO_FILTERのバイパス・メカニズムを設定するには、元表にフォーマット列を作成する必要があります。

次に例を示します。

create table hdocs (
     id number primary key,
     fmt varchar2(10),
     text varchar2(80)
);

主にWordドキュメントを索引付けすると想定すると、Wordドキュメントをフィルタするために、フォーマット列にBINARYを指定します。一方、AUTO_FILTERにHTMLドキュメントを無視させるには、フォーマット列にTEXTを指定します。

たとえば、次の文によってテキスト表に2つのドキュメントを追加し、1つのドキュメントの形式にBINARYを、もう1つのドキュメントの形式にTEXTを割り当てるとします。

insert into hdocs values(1, 'binary', '/docs/myword.doc');
insert in hdocs values (2, 'text', '/docs/index.html');
commit;

索引を作成するには、CREATE INDEXを使用して、パラメータ文字列にフォーマット列名を指定します。

create index hdocsx on hdocs(text) indextype is ctxsys.context
  parameters ('datastore ctxsys.file_datastore
  filter ctxsys.auto_filter
  format column fmt');

フォーマット列にTEXTまたはBINARYを指定しない場合は、BINARYが使用されます。


注意:

AUTO_FILTERを使用する場合は、CREATE INDEXにフォーマット列を指定する必要はありません。

AUTO_FILTERによるキャラクタ・セット変換

ドキュメント形式列がTEXTに設定されている場合、AUTO_FILTERはドキュメントをデータベースのキャラクタ・セットに変換します。この場合、AUTO_FILTERはキャラクタ・セット列を検索して、ドキュメントのキャラクタ・セットを判断します。

キャラクタ・セット列値がOracle Textキャラクタ・セット名でない場合、ドキュメントはキャラクタ・セット変換なしで渡されます。


注意:

AUTO_FILTERを使用している場合は、キャラクタ・セット列を指定する必要はありません。

キャラクタ・セット列を指定して、フォーマット列を指定しない場合、AUTO_FILTERCHARSET_FILTERのように機能します。ただし、この場合、日本語キャラクタ・セットの自動識別は行われません。


関連項目

「CHARSET_FILTER」

NULL_FILTER

NULL_FILTER型は、プレーン・テキストまたはHTMLが索引付けされ、フィルタ処理を行う必要がない場合に使用します。NULL_FILTERには属性がありません。

HTMLドキュメントの索引付け

ドキュメント・セット全体がHTMLである場合は、フィルタ・プリファレンスにNULL_FILTERを使用することをお薦めします。

たとえば、HTMLドキュメント・セットを索引付けするには、NULL_FILTERおよびHTML_SECTION_GROUPに対するシステム定義プリファレンスを次のように指定できます。

create index myindex on docs(htmlfile) indextype is ctxsys.context
  parameters('filter ctxsys.null_filter
  section group ctxsys.html_section_group');

関連項目

セクション・グループとHTMLドキュメントの索引付けの詳細は、「セクション・グループ型」を参照してください。

MAIL_FILTER

MAIL_FILTERを使用して、RFC-822、RFC-2045メッセージを索引付け可能なテキストに変換します。入力には、次の制限事項が保持されます。

  • ドキュメントはUS-ASCIIである必要があります。

  • 行の長さは1024バイト以内にする必要があります。

  • RFC-822については、ドキュメントは構文的に有効にする必要があります。

無効な入力に対する動作は定義されていません。逸脱すると、フィルタによってエラーなしで確実に処理される場合もあれば、フェッチ時間またはフィルタ時間のエラーになる場合もあります。

MAIL_FILTERプリファレンスには次の属性があります。

表2-11 MAIL_FILTER属性

属性 属性値
INDEX_FIELDS 出力に保持するフィールドのカンマで区切られたリストを指定します。これらのフィールドは、タグ・マークアップに変換されます。INDEX_FIELDSがFROMに設定されている場合の例を示します。

From: Scott Tiger

次のように変換されます。

<FROM>Scott Tiger</FROM>

トップレベルのフィールドのみがこのように変換されます。

AUTO_FILTER_TIMEOUT メール・フィルタによって起動されるAUTO_FILTERフィルタ処理のタイムアウト値を指定します。デフォルトは60です。(INSO_TIMEOUT属性を置換してINSO_TIMEOUTとの下位互換性を保ちます。)
AUTO_FILTER_OUTPUT_FORMATTING TRUEまたはFALSEを指定します。デフォルトはTRUEです。

この属性は以前のINSO_OUTPUT_FORMATTING属性に代わるものです。ただし、現行のリリースへの影響はありません。

PART_FIELD_STYLE INDEX_FIELDS属性で識別される下位レベル・フィールドの変換方法を指定します。INDEX_FIELDSにより識別される最上位レベルのメッセージ部分のフィールドは、常にタグ・マークアップに変換されます(前述のINDEX_FIELDSの説明を参照してください)。つまり、PART_FIELD_STYLEは、添付された電子メールなど下位レベル部分の変換を制御します。

可能な値は、IGNORE(デフォルト。索引付けに部分フィールドが含まれない)、TAG(最上位レベルの部分フィールドで実行されるように、部分フィールド名をタグに変換)、FIELD(部分フィールド名をタグとしてではなく、フィールドとして保持)、およびTEXT(部分フィールド名を削除し、索引付け用にフィールドの内容のみを保持)です。PART_FIELD_STYLEの機能の例は、「Mail_Filterの例」を参照してください。


フィルタの動作

このフィルタは、ドキュメントごとに次の処理を行います。

  • ヘッダー・フィールドの読取りおよび削除

  • Content-transfer-encodingフィールドの値によって、メッセージ本文のデコード(必要に応じて)

  • メール・フィルタ構成ファイルで指定されたContent-Typeフィールドの値、およびユーザー指定の動作によって、処理を実行します。(「メール・フィルタ構成ファイル」を参照してください。)有効な処理は、次のとおりです。

    • 出力テキストの本文を作成します(INCLUDE)。 キャラクタ・セットがContent-Typeヘッダー・フィールドのINLCUDE部分にない場合は、元表のキャラクタ・セット列で指定する値にデフォルト設定されます。 作成したキャラクタ・セット列をCREATE INDEXコマンドのパラメータ文字列で指定します。

    • AUTO_FILTERで本文の内容をフィルタ処理します(AUTO_FILTERディレクティブ)。

    • 出力テキストから本文の内容を削除します(IGNORE)。

  • 構成ファイルの型に動作が指定されていない場合、デフォルトは次のとおりです。

    • text/*: 出力テキストの本文を作成します。

    • application/*: AUTO_FILTERで本文の内容をフィルタ処理します。

    • image/*, audio/*, video/*, model/*: 無視

  • マルチパート・メッセージが解析され、メール・フィルタが各パートに再帰的に適用されます。各パートが出力に追加されます。

  • 作成されたテキストはすべて、必要に応じてデータベース・キャラクタ・セットにキャラクタ・セット変換されます。

メール・フィルタ構成ファイル

MAIL_FILTERフィルタは、メール・ドキュメントのフィルタ処理の方法を指定するディレクティブを含む、メール・フィルタ構成ファイルを使用します。メール・フィルタ構成ファイルは、編集可能なテキスト・ファイルです。このファイルでは、Content-Typeごとにデフォルトの動作をオーバーライドできます。構成ファイルには、IANAからOracleグローバリゼーション・サポートへのキャラクタ・セット名マッピングも含まれています。

ファイルは、ORACLE_HOME/ctx/configに存在する必要があります。使用するファイル名は、新しいシステム・パラメータMAIL_FILTER_CONFIG_FILEに格納されます。このファイル名はインストール時にdrmailfl.txtに設定され、デフォルトの内容として有効になります。

独自のメール・フィルタ構成ファイルを作成して、新規バージョンまたはパッチ・セットのインストールにより上書きされないようにすることをお薦めします。メール・フィルタ構成ファイルは、データベース・キャラクタ・セットである必要があります。

メール・フィルタ構成ファイルの構造

ファイルには、BEHAVIORおよびCHARSETSという2つのセクションがあります。behaviorセクションの最初の部分は、次のとおりです。

[behavior]

続く行はそれぞれ、MIMEタイプ、空白、動作の指定で始まります。MIMEタイプは、完全なTYPE/SUBTYPEまたはTYPEのみで、そのタイプのすべてのサブタイプに適用されます。TYPE/SUBTYPEを指定すると、TYPEの指定がオーバーライドされ、デフォルトの動作がオーバーライドされます。動作は、INCLUDE, AUTO_FILTERまたはIGNOREです(定義は「フィルタの動作」を参照してください)。次に例を示します。

application/zip IGNORE
application/msword  AUTO_FILTER
model               IGNORE

"multipart"または"message"タイプに動作を指定することはできません。これらのタイプに動作を指定すると、その行は無視されます。タイプの指定が重複している場合、後に指定した方が優先されます。

行の先頭に#記号を付けることで、メール構成ファイルにコメントを含めることができます。

charsetマッピング・セクションの最初の部分は、次のとおりです。

[charsets]

各行は、次のように、IANA名、空白、Oracleグローバリゼーション・サポート・キャラクタ・セット名で構成されます。

US-ASCII US7ASCI
ISO-8859-1   WE8ISO8859P1

メール・フィルタがマッピングを取得する方法は、このファイルのみです。デフォルトはありません。

構成ファイルを変更すると、変更は、それ以降に索引付けされたドキュメントのみに影響します。ファイルを変更した後に、共有プールをフラッシュする必要があります。

MAIL_FILTERの例

次のような形式の、件名行が複数ある他の複数の電子メールが添付されている電子メールがあるとします。

To: somebody@someplace
Subject:  mainheader
Content-Type:  multipart/mixed
. . .
Content-Type: text/plain
X-Ref:  some_value
Subject:  subheader 1
. . .
Content-Type:  text/plain
X-Control:  blah blah blah
Subject:  subheader 2
. . .

INDEX_FIELDSを「件名」に設定し、最初にPART_FIELD_STYLEIGNOREに指定します。

CTX_DDL.CREATE_PREFERENCE('my_mail_filt', 'mail_filter');
CTX_DDL_SET_ATTRIBUTE(my_mail_filt', 'INDEX_FILES', 'subject');
CTX_DDL.SET ATTRIBUTE ('my_mail_filt', 'PART_FIELD_STYLE', 'ignore');

索引が作成され、ファイルが次のように索引付けされます。

<SUBJECT>mainheader</SUBJECT>

PART_FIELD_STYLETAGに指定した場合は、次のようになります。

<SUBJECT>mainheader</SUBJECT>
<SUBJECT>subheader1</SUBJECT>
<SUBJECT>subheader2</SUBJECT>

PART_FIELD_STYLEFIELDに指定した場合は、次のようになります。

<SUBJECT>mainheader<SUBJECT>
SUBJECT:subheader1
SUBJECT:subheader2

最後に、PART_FIELD_STYLETEXTに指定した場合は、次のようになります。

<SUBJECT>mainheader</SUBJECT>
subheader1
subheader2

USER_FILTER

USER_FILTER型を使用して、列内のドキュメントをフィルタ処理するための外部フィルタを指定します。USER_FILTERには次の属性があります。

表2-12 USER_FILTER属性

属性 属性値
command 実行可能なフィルタの名前を指定します。

command

列に格納されているすべてのテキストをフィルタ処理するときに使用する、単一外部フィルタの実行可能ファイルを指定します。複数のドキュメント形式が列に格納されている場合、commandに指定された外部フィルタはそれらの形式のすべてを認識し、処理する必要があります。

UNIXでは、指定する実行可能ファイルは、$ORACLE_HOME/ctx/binディレクトリに存在する必要があります。Windowsでは、指定する実行可能ファイルは、%ORACLE_HOME%/binディレクトリに存在する必要があります。

次の2つのパラメータで、ユーザー・フィルタ実行可能ファイルを作成します。1つ目のパラメータは読み取られる入力ファイルの名前で、2つ目のパラメータは書き込まれる出力ファイルの名前です。

すべてのドキュメント形式がAUTO_FILTERでサポートされている場合は、フィルタ処理以外にドキュメントに対する追加処理が必要でないかぎり、USER_FILTERのかわりにAUTO_FILTERを使用します。

ユーザー・フィルタの例

次に、ユーザー・フィルタとして使用されるPerlスクリプトの例を示します。このスクリプトは、1つ目の引数に指定された入力テキスト・ファイルを大文字に変換し、出力を2つ目の引数に指定された場所に書き込みます。

#!/usr/local/bin/perl

open(IN, $ARGV[0]);
open(OUT, ">".$ARGV[1]);

while (<IN>)
{
  tr/a-z/A-Z/;
  print OUT;
}

close (IN);
close (OUT);

このファイルの名前がupcase.plである場合、次のようにフィルタ・プリファレンスを作成します。

begin
  ctx_ddl.create_preference
    (
      preference_name => 'USER_FILTER_PREF',
      object_name     => 'USER_FILTER'
    );
  ctx_ddl.set_attribute
    ('USER_FILTER_PREF','COMMAND','upcase.pl');
end;

次のようにSQL*Plusで索引を作成します。

create index user_filter_idx on user_filter ( docs )
  indextype is ctxsys.context
  parameters ('FILTER USER_FILTER_PREF');

PROCEDURE_FILTER

ドキュメントをストアド・プロシージャでフィルタ処理するには、PROCEDURE_FILTER型を使用します。ストアド・プロシージャは、ドキュメントのフィルタ処理が必要になるたびにコールされます。

この型の属性は、次のとおりです。

表2-13 PROCEDURE_FILTER属性

属性 用途 使用可能な値
procedure フィルタのストアド・プロシージャの名前。 任意のプロシージャ。プロシージャには、PL/SQLストアド・プロシージャを指定できます。
input_type ストアド・プロシージャの入力引数の型。 VARCHAR2、BLOB、CLOB、FILE
output_type ストアド・プロシージャの出力引数の型。 VARCHAR2、CLOB、FILE
rowid_parameter ROWIDパラメータを含めるか。 TRUE/FALSE
format_parameter formatパラメータを含めるか。 TRUE/FALSE
charset_parameter charsetパラメータを含めるか。 TRUE/FALSE

procedure

フィルタ処理に使用するストアド・プロシージャの名前を指定します。プロシージャには、PL/SQLストアド・プロシージャを指定できます。プロシージャは、セーフ・コールアウトになることも、セーフ・コールアウトをコールすることもできます。

rowid_parameterformat_parameterおよびcharset_parameterをFALSEに設定すると、プロシージャに次のシグネチャのいずれかを設定できます。

PROCEDURE(IN BLOB, IN OUT NOCOPY CLOB)
PROCEDURE(IN CLOB, IN OUT NOCOPY CLOB)
PROCEDURE(IN VARCHAR, IN OUT NOCOPY CLOB)
PROCEDURE(IN BLOB, IN OUT NOCOPY VARCHAR2)
PROCEDURE(IN CLOB, IN OUT NOCOPY VARCHAR2)
PROCEDURE(IN VARCHAR2, IN OUT NOCOPY VARCHAR2)
PROCEDURE(IN BLOB, IN VARCHAR2)
PROCEDURE(IN CLOB, IN VARCHAR2)
PROCEDURE(IN VARCHAR2, IN VARCHAR2)

1つ目の引数は、データストアによって渡されたままのフィルタ処理されていない行の内容です。2つ目の引数は、フィルタ処理済のドキュメント・テキストを戻すプロシージャ用の引数です。

プロシージャの属性は必須です。したがって、デフォルトはありません。

input_type

フィルタ・プロシージャの入力引数の型を指定します。次のうちのいずれかを指定できます。

データ型 説明
procedure フィルタのストアド・プロシージャの名前。
input_type ストアド・プロシージャの入力引数の型。
output_type ストアド・プロシージャの出力引数の型。
rowid_parameter ROWIDパラメータを含めるか。

input_type属性は必須ではありません。指定しない場合は、BLOBがデフォルトになります。

output_type

フィルタ・プロシージャの出力引数の型を指定します。次のいずれかの型を指定できます。

データ型 説明
CLOB 出力引数は、IN OUT NOCOPY CLOBです。プロシージャでは、渡されたCLOBにフィルタ処理済の内容を書き込む必要があります。
VARCHAR2 出力引数は、IN OUT NOCOPY VARCHAR2です。プロシージャでは、渡されたVARCHAR2変数にフィルタ処理済の内容を書き込む必要があります。
FILE 出力引数は、IN VARCHAR2である必要があります。フィルタ・プロシージャの入力時、出力引数は一時ファイルの名前です。フィルタ・プロシージャでは、この名前が指定されたファイルにフィルタ処理済の内容を書き込む必要があります。

FILE出力型の使用は、プロシージャがファイルへの書込みができるセーフ・コールアウトの場合のみ有効です。


output_type属性は必須ではありません。指定しない場合は、CLOBがデフォルトになります。

rowid_parameter

TRUEを指定するとフィルタ処理を行うドキュメントのROWIDが、入力および出力パラメータの前に、1つ目のパラメータとして渡されます。

たとえば、INPUT_TYPE BLOBOUTPUT_TYPE CLOB、およびROWID_PARAMETER TRUEを使用したとします。フィルタ・プロシージャには次のようなシグネチャが必要です。

procedure(in rowid, in blob, in out nocopy clob)

この属性は、プロシージャが他の列または表のデータを要求する場合に有効です。この属性は必須ではありません。デフォルトはFALSEです。

format_parameter

TRUEを指定すると、フィルタ処理を行うドキュメントのフォーマット列の値が入力および出力パラメータの前にフィルタ・プロシージャに渡されます。ただし、ROWIDパラメータが有効な場合は、その後に渡されます。

索引付け時にフォーマット列の名前をパラメータ文字列に指定します。このとき、キーワード'format column <columnname>'を使用します。パラメータ・タイプは、IN VARCHAR2である必要があります。

フォーマット列の値は、ROWIDパラメータを介して読み取ることができますが、この属性では、単一フィルタが複数の表構造体で機能できます。これは、format属性が抽象化されており、表またはフォーマット列の名前を認識する必要がないためです。

FORMAT_PARAMETERは必須ではありません。デフォルトはFALSEです。

charset_parameter

TRUEを指定すると、フィルタ処理を行うドキュメントのキャラクタ・セット列の値が入力および出力パラメータの前にフィルタ・プロシージャに渡されます。だたし、ROWIDおよびformatパラメータが有効な場合は、その後に渡されます。

索引付け時にキャラクタ・セット列の名前をパラメータ文字列に指定します。このとき、'charset column <columnname>'を使用します。パラメータ・タイプは、IN VARCHAR2である必要があります。

CHARSET_PARAMETER属性は必須ではありません。デフォルトはFALSEです。

パラメータの順序

ROWID_PARAMETERFORMAT_PARAMETERおよびCHARSET_PARAMETERは、すべて非依存型です。順序はrowid、format、次にcharsetとなります。ただし、フィルタ・プロシージャには、必要最小数のパラメータのみが渡されます。

たとえば、INPUT_TYPEBLOBで、OUTPUT_TYPECLOBとします。フィルタ・プロシージャにすべてのパラメータが必要な場合、そのプロシージャのシグネチャは、次のように指定する必要があります。

(id IN ROWID, format IN VARCHAR2, charset IN VARCHAR2, input IN BLOB, output IN
OUT NOCOPY CLOB)

プロシージャで必要なパラメータがROWIDのみの場合、プロシージャのシグネチャは、次のように指定する必要があります。

(id IN ROWID,input IN BLOB, ouput IN OUT NOCOPY CLOB)

プロシージャ・フィルタの実行要件

PROCEDURE_FILTERプリファレンスを使用して索引を作成するには、索引所有者が、プロシージャに対する実行権限を所有している必要があります。

エラー処理

フィルタ・プロシージャでは、通常のPL/SQL raise_application_error機能を使用して、必要に応じてエラーを戻すことができます。戻されたエラーは、フィルタの起動方法に応じて、CTX_USER_INDEX_ERRORSビューに伝播されるか、あるいはユーザーにレポートされます。

プロシージャ・フィルタ・プリファレンスの例

次のシグネチャを使用して定義するフィルタ・プロシージャCTXSYS.NORMALIZEを考えてみます。

PROCEDURE NORMALIZE(id IN ROWID, charset IN VARCHAR2, input IN CLOB,
output IN OUT NOCOPY VARCHAR2);

このプロシージャをフィルタとして使用するには、フィルタ・プリファレンスを次のように設定します。

begin
ctx_ddl.create_preference('myfilt', 'procedure_filter');
ctx_ddl.set_attribute('myfilt', 'procedure', 'normalize');
ctx_ddl.set_attribute('myfilt', 'input_type', 'clob');
ctx_ddl.set_attribute('myfilt', 'output_type', 'varchar2');
ctx_ddl.set_attribute('myfilt', 'rowid_parameter', 'TRUE');
ctx_ddl.set_attribute('myfilt', 'charset_parameter', 'TRUE');
end;

レクサー型

レクサー・プリファレンスを使用して、索引付けするテキストの言語を指定します。レクサー・プリファレンスを作成するには、次のレクサー型のうちいずれか1つを使用する必要があります。

表2-14 レクサー型

データ型 説明
BASIC_LEXER
空白のデリミタ付きワードを使用する英語およびほとんどのヨーロッパ言語で、テキストからのトークンの抽出に使用するレクサー
MULTI_LEXER
異なる複数言語のドキュメントを含む表の索引付けに使用するレクサー
CHINESE_VGRAM_LEXER
中国語テキストからのトークンの抽出に使用するレクサー
CHINESE_LEXER
中国語テキストからのトークンの抽出に使用するレクサー
JAPANESE_VGRAM_LEXER
日本語テキストからのトークンの抽出に使用するレクサー
JAPANESE_LEXER
日本語テキストからのトークンの抽出に使用するレクサー
KOREAN_MORPH_LEXER
韓国語テキストからのトークンの抽出に使用するレクサー
USER_LEXER
特定言語を索引付けするために作成するレクサー
WORLD_LEXER
異なる複数言語のドキュメントを含む表の索引付けに使用する、ドキュメントの言語を自動検出するレクサー

BASIC_LEXER

BASIC_LEXER型を使用して、英語およびサポートされているその他すべての空白のデリミタ付き言語のテキスト索引を作成するために、トークンを識別します。

また、BASIC_LEXERを使用して、拡張キャラクタ・セットを持つ空白のデリミタ付き言語に対する基本文字変換、コンポジット・ワードの索引付け、大/小文字を区別した索引付けおよび代替スペルを使用可能にします。

英語およびフランス語では、BASIC_LEXERを使用してテーマの索引付けを使用可能にできます。


注意:

索引付けの前にレクサーがトークンに対して実行した処理(文字の削除や基本文字変換など)は、問合せ時に問合せ語句に対しても実行されます。これによって、問合せ語句は、テキスト索引内のトークンのフォームと確実に一致します。

BASIC_LEXERは、任意のデータベース・キャラクタ・セットをサポートしています。

BASIC_LEXERには次の属性があります。

表2-15 BASIC_LEXER属性

属性 属性値
continuation 文字
numgroup 文字
numjoin 文字
printjoin 文字
punctuation 文字
skipjoin 文字
startjoin トークンの先頭にある英数字以外の文字(文字列)
endjoin トークンの末尾にある英数字以外の文字(文字列)
whitespace 文字(文字列)
newline NEWLINE (¥n)

CARRIAGE_RETURN (¥r)

base_letter NO(使用禁止)

YES(使用可能)
base_letter_type GENERIC(デフォルト)

SPECIFIC
override_base_letter TRUE

FALSE(デフォルト)

mixed_case NO(使用禁止)

YES(使用可能)
composite DEFAULT(コンポジット・ワードの索引付けなし、デフォルト)

GERMAN(ドイツ語のコンポジット・ワード索引付け)

DUTCH(オランダ語のコンポジット・ワードの索引付け)
index_stems 0 NONE

1 ENGLISH

2 DERIVATIONAL

3 DUTCH

4 FRENCH

5 GERMAN

6 ITALIAN

7 SPANISH

index_themes YES(使用可能)

NO(使用禁止、デフォルト)

NO(使用禁止、デフォルト)
index_text YES(使用可能、デフォルト)

NO(使用禁止)
prove_themes YES(使用可能、デフォルト)

NO(使用禁止)
theme_language AUTO(デフォルト)

(任意のグローバリゼーション・サポート対象言語)
alternate_spelling GERMAN(ドイツ語の代替スペル)

DANISH(デンマーク語の代替スペル)

SWEDISH(スウェーデン語の代替スペル)

NONE(代替スペルなし、デフォルト)
new_german_spelling YES

NO(デフォルト)


continuation

ワードが次の行に続き、そのワードを1つのトークンとして索引付けする必要があることを示す文字を指定します。最も一般的な連結文字はハイフン'-'およびバックスラッシュ'\'です。

numgroup

数字列の中で使用する場合に、1つの大きな数字の集まりをいくつかの桁にグループ分けすることを示す文字を指定します。

たとえば、カンマ','は、数字列の中で使用されている場合、千の位のグループ分けを示すことがあるため、numgroup文字として定義されることがあります。

numjoin

数字列の中で使用する場合に、Oracle Textでは数字の文字列を1つの単位またはワードとみなして索引付けするように文字を指定します。

たとえば、ピリオド'.'は、数字列の中で使用される場合、小数点を示すことがあるため、numjoin文字として定義されることがあります。


注意:

numjoinおよびnumgroupのデフォルト値は、データベースに指定されたグローバリゼーション・サポート初期化パラメータによって決定されます。

通常、BASIC_LEXERのレクサー・プリファレンスを作成する場合、numjoinまたはnumgroupのいずれにも値を指定する必要はありません。


printjoin

英数字以外の文字を指定します。この文字は、ワード内(先頭、中程または末尾)にあれば英数字として処理され、テキスト索引にトークンとともに組み込まれます。連続しているprintjoinも同様に処理されます。

たとえば、ハイフン'-'およびアンダースコア'_'文字がprintjoinとして定義されている場合、pseudo-intellectual_file_などの語句は、pseudo-intellectualおよび_file_としてテキスト索引に格納されます。


注意:

printjoin文字が同時にpunctuation文字としても定義されている場合は、その文字の直後の文字が標準の英数字であるか、printjoin文字またはskipjoin文字として定義されていれば、その文字は英数字としてのみ処理されます。

punctuation

ワードの末尾に使用される場合に、文の終わりを示す英数字以外の文字を指定します。デフォルトは、ピリオド'.'、疑問符'?'および感嘆符'!'です。

punctuationとして定義されている文字は、テキストの索引付け前に削除されます。ただし、punctuation文字がprintjoin文字としても定義されている場合は、その文字がトークンの最後の文字である場合にのみ削除されます。

たとえば、ピリオド(.)がprintjoin文字とpunctuation文字の両方に定義されている場合は、索引付けおよび問合せのときに次のように変換されます。

トークン 索引付けされたトークン
.doc .doc
dog.doc dog.doc
dog..doc dog..doc
dog. dog
dog... dog..

また、BASIC_LEXERは、punctuation文字をnewline文字およびwhitespace文字と組み合せて使用し、文/段落検索用の文デリミタおよび段落デリミタを決定します。

skipjoin

英数字以外の文字を指定します。この文字がワード内で使用されている場合、そのワードを単一のトークンとして識別します。ただし、その文字はテキスト索引内にトークンとともに格納されません。

たとえば、ハイフン文字'-'がskipjoinとして定義されている場合、ワードpseudo-intellectualは、テキスト索引にpseudointellectualとして格納されます。


注意:

printjoinおよびskipjoinは相互に排他的です。同じ文字を両方の属性に指定できません。

startjoin/endjoin

startjoinは、トークンの最初の文字として検出された場合、明示的にトークンの始まりを識別する文字を指定します。その文字は、そのすぐ後に続く他のstartjoin文字と同様に、トークンに対するテキスト索引内のエントリに含まれます。また、startjoin文字列の最初のstartjoin文字は、暗黙的に前のトークンを終了します。

endjoinは、トークンの最後の文字として検出された場合、明示的にトークンの終わりを識別する文字を指定します。その文字は、そのすぐ後に続く他のstartjoin文字と同様に、トークンに対するテキスト索引内のエントリに含まれます。

次のルールがstartjoinendjoinの両方に適用されます。

  • startjoin/endjoinに指定された文字は、BASIC_LEXERのその他の属性には指定できません。

  • startjoin/endjoin文字は、トークンの最初または最後にのみ使用できます。

Printjoinは、endjoinおよびstartjoinと異なり、使用場所の制限はありません。たとえば、$がstartjoinあるいはprintjoinの場合、$35は1つのトークンとして索引付けられますが、endjoinの場合は2つのトークンとして索引付けられます。

whitespace

トークン間で空白として扱われる文字を指定します。BASIC_LEXERは、文および段落検索用の文デリミタとして機能する文字列を識別するため、whitespace文字をpunctuation文字およびnewline文字と組み合せて使用します。

whitespaceの事前定義のデフォルト値は、'space'と'tab'です。これらの値は変更できません。whitespaceとして文字を指定すると、これらのデフォルト値に追加されます。

newline

テキストの行の終わりを示す文字を指定します。BASIC_LEXERは、文および段落検索用の段落デリミタとして機能する文字列を識別するため、newline文字をpunctuation文字およびwhitespace文字と組み合せて使用します。

newlineに対する有効値は、NEWLINEおよびCARRIAGE_RETURN(改行)のみです。デフォルトはNEWLINEです。

base_letter

発音区別記号(ウムラウト、セディーユ、揚音アクセントなど)を持つ文字を、テキスト索引に格納する前に、基本形に変換するかどうかを指定します。デフォルトはNO(基本文字変換は使用禁止)です。基本文字変換およびbase_letter_typeの詳細は、「基本文字変換」を参照してください。

base_letter_type

GENERICまたはSPECIFICを指定します。

GENERIC値はデフォルトで、基本文字変換が、すべての言語に適用される1つの変換表を使用することを示します。基本文字変換およびbase_letter_typeの詳細は、「基本文字変換」を参照してください。

override_base_letter

base_letteralternate_spellingを同時に有効にすると、シリアル変換によって予期しない結果が生じないように、base_letterのオーバーライドが必要になることがあります。「代替スペルによる基本文字変換のオーバーライド」を参照してください。デフォルトはFALSEです。

mixed_case

レクサーがトークンをテキストに表示されたままにするか、あるいはすべて大文字に変換するかを指定します。デフォルトではNO(トークンはすべて大文字に変換される)です。


注意:

Oracle Textでは、ワード問合せを、問合せされる索引の大/小文字の区別に確実に一致させます。そのため、テキスト索引に対して大/小文字の区別を有効にすると、その索引に対する問合せでは常に大文字と小文字が区別されます。

composite

GERMANまたはDUTCHテキストに対して、コンポジット・ワードの索引付けを使用可能または使用禁止にするかどうかを指定します。デフォルトはNO(コンポジット・ワードの索引付けは使用禁止)です。

ドイツ語ディクショナリで通常1エントリであるワードは、複合語幹に分割されませんが、ディクショナリのエントリでないワードは、複合語幹に分割されます。

索引付けされた複合語幹を取得するには、ステミング問合せ(例: $bahnhof)を発行する必要があります。ワードリスト・ステマーの言語は、複合語幹の言語と一致している必要があります。

ステミング・ユーザー・ディクショナリ

Oracle Textには、システム・ステミング・ディクショナリ($ORACLE_HOME/ctx/data/enlx/dren.dct)が付属しており、ENGLISHおよびDERIVATIONALのステミングに使用されます。独自の言語のユーザー・ディクショナリを作成し、ワードの分解方法をカスタマイズできます。表2-16にこのユーザー・ディクショナリを示します。

表2-16 ステミング・ユーザー・ディクショナリ

ディクショナリ 言語
$ORACLE_HOME/ctx/data/frlx/drfr.dct フランス語
$ORACLE_HOME/ctx/data/delx/drde.dct ドイツ語
$ORACLE_HOME/ctx/data/nllx/drnl.dct オランダ語
$ORACLE_HOME/ctx/data/itlx/drit.dct イタリア語
$ORACLE_HOME/ctx/data/eslx/dres.dct スペイン語

ステミング・ユーザー・ディクショナリは、表2-16の言語以外の言語に対しては、サポートされていません。

このユーザー・ディクショナリの書式は、次のとおりです。

input term <tab> output term

分解されたワードの個々の部分は、#文字で区切る必要があります。ドイツ語のワードHauptbahnhofに対するエントリの例を次に示します。

Hauptbahnhof<tab>Haupt#Bahnhof
Hauptbahnhofes<tab>Haupt#Bahnhof
Hauptbahnhof<tab>Haupt#Bahnhof
Hauptbahnhoefe<tab>Haupt#Bahnhof
index_themes

英語またはフランス語のテーマ情報の索引付けには、YESを指定します。これによってABOUT問合せがより正確になります。index_themes属性およびindex_text属性の両方にNOを指定することはできません。

BASIC_LEXERを使用し、index_themesに値を指定しない場合、この属性はデフォルトのNOに設定されます。

このパラメータは、CTXCATも含めたすべての索引タイプに対してTRUEに設定できます。CATSEARCHでABOUT問合せを発行する場合は、CONTEXT文法による問合せテンプレートを使用してください。


注意:

index_themesを使用するには、ナレッジ・ベースがインストールされている必要があります。ナレッジ・ベースは、Oracle Textとともにインストールされていない場合があります。ナレッジ・ベースの詳細は、『Oracle Textアプリケーション開発者ガイド』を参照してください。

prove_themes

テーマを検証するには、YESを指定します。テーマの検証では、ドキュメント内の関連テーマが検索されます。関連テーマが検索されない場合、親テーマはそのドキュメントから排除されます。

テーマの検証は大規模なドキュメントに対して使用可能です。ワード数の少ない短い記述のテキストで親テーマが検証されることはほとんどなく、結果的にABOUT問合せによる再コールでのパフォーマンスが低下します。

テーマの検証によって、ABOUT問合せの精度が向上し、再コール数が減少(戻される行が減少)します。ABOUT問合せでの再コールが増加し、検索精度が低下する可能性がある場合は、テーマの検証を使用禁止にできます。デフォルトはYESです。

prove_themes属性は、CONTEXT索引およびCTXRULE索引に対してサポートされています。

theme_language

index_themesYESに設定されている場合は、テーマ生成にどのナレッジ・ベースを使用するかを指定します。index_themesNOに設定されている場合は、このパラメータを設定しても、何も影響はありません。

任意のグローバリゼーション・サポート対象言語またはAUTOを指定できます。指定する言語のナレッジ・ベースが必要です。このリリースで提供されているのは、英語とフランス語のナレッジ・ベースのみです。それ以外の言語では、独自のナレッジ・ベースを作成できます。

デフォルトはAUTOです。AUTOに設定すると、環境の言語に従って、システムがこのパラメータを設定します。

index_stems

語幹索引付けに使用するステマーを指定します。次のいずれかを選択できます。

  • NONE

  • ENGLISH

  • DERIVATIONAL

  • DUTCH

  • FRENCH

  • GERMAN

  • ITALIAN

  • SPANISH

索引付け時に、トークンが通常の形式に加えて、単一の基本形にステミングされます。語幹索引付けによって、ステミング($)問合せ(例: $computed)の問合せパフォーマンスが向上します。

index_text

ワード情報の索引付けには、YESを指定します。index_themes属性およびindex_text属性の両方にNOを指定することはできません。

デフォルトはNOです。

alternate_spelling

ドイツ語、デンマーク語またはスウェーデン語のいずれかを指定して、これらの言語のうちの1つの代替スペルを使用可能にします。代替スペルを使用可能にすると、任意の代替形式でワードを問合せできます。

デフォルトでは、代替スペルはオフになっていますが、Oracleがadmin/defaultsで提供している言語固有のスクリプト(ドイツ語: drdefd.sql、オランダ語: drdefdk.sql、スウェーデン語: drdefs.sql)では、代替スペルがオンになっています。インストールでこれらのスクリプトを使用している場合、代替スペルがオンになります。ただし、代替スペルがない場合は、NONEを指定します。Oracle Textが使用する代替スペルの規則については、「代替スペル」を参照してください。

new_german_spelling

BASIC_LEXERを使用する問合せが、ドイツ語のワードの従来のスペルと改良された(新規の)スペルを戻すかどうかを指定します。new_german_spellingがYESに設定されている場合、従来の形式と新規の形式のワードが索引付けされます。NOに設定されている場合、ワードは問合せに指定されたとおりに索引付けされます。デフォルトはNOです。

BASIC_LEXERの例

次の例では、printjoin文字を設定し、BASIC_LEXERを使用してテーマの索引付けを使用禁止にします。

begin
ctx_ddl.create_preference('mylex', 'BASIC_LEXER');
ctx_ddl.set_attribute('mylex', 'printjoins', '_-');
ctx_ddl.set_attribute ( 'mylex', 'index_themes', 'NO');
ctx_ddl.set_attribute ( 'mylex', 'index_text', 'YES');
end;

テーマを索引付けせず、前述のprintjoinキャラクタ・セットを使用して索引を作成するには、次の文を発行します。

create index myindex on mytable ( docs )
  indextype is ctxsys.context
  parameters ( 'LEXER mylex' );

MULTI_LEXER

MULTI_LEXERは、異なる複数の言語のドキュメントを含むテキスト列の索引付けに使用します。たとえば、このレクサーを使用して、英語、ドイツ語および日本語のドキュメントを格納するテキスト列を索引付けできます。

このレクサーには属性がありません。

元表に言語列が存在する必要があります。マルチ言語表に索引付けするには、索引の作成時に言語列を指定します。

CTX_DDL.CREATE_PREFERENCEを使用して、マルチレクサー・プリファレンスを作成します。CTX_DDL.ADD_SUB_LEXERプロシージャを使用して、そのマルチレクサー・プリファレンスに言語固有のレクサーを追加します。

索引付け時に、MULTI_LEXERは、各行の言語列の値を調べ、言語固有のレクサーに切り替えた後、ドキュメントを処理します。

WORLD_LEXERレクサーは、マルチ言語の索引付けも実行しますが、個別の言語列に対して実行する必要はありません(つまり、自動言語検出が実行されます)。WORLD_LEXERの詳細は、「WORLD_LEXER」を参照してください。

マルチ言語のストップリスト

MULTI_LEXERを使用する場合、索引付け用のマルチ言語のストップリストも使用できます。

MULTI_LEXERの例

次のように、主キー、テキスト列および言語列を持つマルチ言語表を作成します。

create table globaldoc (
   doc_id number primary key,
   lang varchar2(3),
   text clob
);

保持するドキュメントのほとんどが英語で、ドイツ語または日本語のドキュメントが少しある表を考えてみます。3つの言語を処理するには、英語、ドイツ語および日本語に対して1つずつの、3つのサブレクサーを作成する必要があります。

ctx_ddl.create_preference('english_lexer','basic_lexer');
ctx_ddl.set_attribute('english_lexer','index_themes','yes');
ctx_ddl.set_attribute('english_lexer','theme_language','english');

ctx_ddl.create_preference('german_lexer','basic_lexer');
ctx_ddl.set_attribute('german_lexer','composite','german');
ctx_ddl.set_attribute('german_lexer','mixed_case','yes');
ctx_ddl.set_attribute('german_lexer','alternate_spelling','german');

ctx_ddl.create_preference('japanese_lexer','japanese_vgram_lexer');

マルチレクサー・プリファレンスを作成します。

ctx_ddl.create_preference('global_lexer', 'multi_lexer');

格納されているドキュメントのほとんどが英語であるため、CTX_DDL.ADD_SUB_LEXERを使用して、英語のレクサーをデフォルトにします。

ctx_ddl.add_sub_lexer('global_lexer','default','english_lexer');

ここで、CTX_DDL.ADD_SUB_LEXERプロシージャを使用して、ドイツ語および日本語のレクサーをそれぞれの言語に追加します。また、言語列がISO標準言語コード639-2で表現されている場合には、これらを代替値として追加します。

ctx_ddl.add_sub_lexer('global_lexer','german','german_lexer','ger');
ctx_ddl.add_sub_lexer('global_lexer','japanese','japanese_lexer','jpn');

次のように、PARAMETERS句にマルチレクサー・プリファレンスおよび言語列を指定して、索引globalxを作成します。

create index globalx on globaldoc(text) indextype is ctxsys.context
parameters ('lexer global_lexer language column lang');

マルチ言語表の問合せ

問合せ時に、マルチレクサー・プリファレンスはセッションの言語設定を調べ、その言語に対してサブレクサー・プリファレンスを使用して問合せを解析します。言語が設定されていない場合は、デフォルト・レクサーが使用されます。

言語が設定されている場合は、問合せが解析され、通常に実行されます。索引には複数言語からのトークンが含まれているため、このような問合せはドキュメントを複数の言語で戻すことができます。問合せを特定の言語に制限する場合は、言語列に構造化句を使用します。

CHINESE_VGRAM_LEXER

CHINESE_VGRAM_LEXER型は、テキスト索引作成用の中国語テキストのトークンを識別します。

CHINESE_VGRAM_LEXER属性

CHINESE_VGRAM_LEXERには次の属性があります。

表2-17 CHINESE_VGRAM_LEXER属性

属性 属性値
mixed_case_ASCII7 ASCII7テキストの大/小文字混在の検索を有効にします(例: catおよびCat)。使用可能な値はYESまたはNO(デフォルト)です。

キャラクタ・セット

データベース・キャラクタ・セットが次のいずれかである場合は、このレクサーを使用できます。

  • AL32UTF8

  • ZHS16CGB231280

  • ZHS16GBK

  • ZHS32GB18030

  • ZHT32EUC

  • ZHT16BIG5

  • ZHT32TRIS

  • ZHT16MSWIN950

  • ZHT16HKSCS

  • UTF8

CHINESE_LEXER

CHINESE_LEXER型は、テキスト索引作成用の中国語(繁体字および簡体字)テキストのトークンを識別します。

このレクサーは、CHINESE_VGRAM_LEXERと比較して次の利点があります。

  • 小型の索引の生成

  • 問合せ応答時間の短縮

  • 実ワード・トークンの生成による問合せ精度の向上

  • ストップワードのサポート

CHINESE_LEXERは異なるアルゴリズムを使用してトークンを生成するため、索引付けに要する時間は、CHINESE_VGRAM_LEXERを使用した場合より長くなります。

データベース・キャラクタ・セットが、Oracleでサポートしている中国語キャラクタ・セットまたはUnicodeキャラクタ・セットである場合は、このレクサーを使用できます。

CHINESE_LEXER属性

CHINESE_LEXERには次の属性があります。

表2-18 CHINESE_LEXER属性

属性 属性値
mixed_case_ASCII7 ASCII7テキストの大/小文字混在の検索を有効にします(例: catおよびCat)。使用可能な値はYESまたはNO(デフォルト)です。

中国語レキシコンのカスタマイズ

中国語レクサーで使用される既存のレキシコン(辞書)を変更するか、ctxlcコマンドを使用して独自の中国語レキシコンを作成できます。

JAPANESE_VGRAM_LEXER

JAPANESE_VGRAM_LEXER型は、テキスト索引作成用の日本語テキストのトークンを識別します。属性はありません。このレクサーは、STEM($)演算子をサポートしています。

JAPANESE_VGRAM_LEXER属性

このレクサーの属性は、次のとおりです。

表2-19 JAPANESE_VGRAM_LEXER属性

属性 属性値
delimiter 全角のスラッシュや全角の中黒など、日本語の特定の空白文字を無視するには、NONEまたはALLを指定します。デフォルトはNONEです。
mixed_case_ASCII7 ASCII7テキストの大/小文字混在の検索を有効にします(例: catおよびCat)。使用可能な値はYESまたはNO(デフォルト)です。

JAPANESE_VGRAM_LEXERキャラクタ・セット

データベース・キャラクタ・セットが次のいずれかである場合は、このレクサーを使用できます。

  • JA16SJIS

  • JA16EUC

  • UTF8

  • AL32UTF8

  • JA16EUCTILDE

  • JA16EUCYEN

  • JA16SJISTILDE

  • JA16SJISYEN

JAPANESE_LEXER

JAPANESE_LEXER型は、テキスト索引作成用の日本語テキストのトークンを識別します。このレクサーは、STEM($)演算子をサポートしています。

このレクサーは、JAPANESE_VGRAM_LEXERと比較して次の利点があります。

  • 小型の索引の生成

  • 問合せ応答時間の短縮

  • 実ワード・トークンの生成による問合せ精度の向上

JAPANESE_LEXERは異なるアルゴリズムを使用してトークンを生成するため、索引付けに要する時間は、JAPANESE_VGRAM_LEXERを使用した場合より長くなります。

日本語レキシコンのカスタマイズ

日本語レクサーで使用される既存のレキシコン(辞書)を変更するか、ctxlcコマンドを使用して独自の日本語レキシコンを作成できます。

JAPANESE_LEXER属性

このレクサーの属性は、次のとおりです。

表2-20 JAPANESE_LEXER属性

属性 属性値
delimiter 全角のスラッシュや全角の中黒など、日本語の特定の空白文字を無視するには、NONEまたはALLを指定します。デフォルトはNONEです。
mixed_case_ASCII7 ASCII7テキストの大/小文字混在の検索を有効にします(例: catおよびCat)。使用可能な値はYESまたはNO(デフォルト)です。

JAPANESE LEXERキャラクタ・セット

JAPANESE_LEXERは、次のキャラクタ・セットをサポートしています。

  • JA16SJIS

  • JA16EUC

  • UTF8

  • AL32UTF8

  • JA16EUCTILDE

  • JA16EUCYEN

  • JA16SJISTILDE

  • JA16SJISYEN

日本語レクサーの例

テキスト索引の作成用にJAPANESE_LEXERを指定すると、JAPANESE_LEXERによって、文はワードに変換されます。

たとえば、次の複合語(「自然言語処理」)があるとします。

nihongo1.gifの説明は次にあります。
画像nihongo1.gifの説明

このワードは、次の3つのトークンとして索引付けされます。

nihongo2.gifの説明は次にあります。
画像nihongo2.gifの説明

文をワードに変換するために、内部ディクショナリが参照されます。内部ディクショナリでワードが検索できない場合、Oracle Textでは、JAPANESE_VGRAM_LEXERを使用して変換します。

KOREAN_MORPH_LEXER

KOREAN_MORPH_LEXER型は、テキスト索引作成用の韓国語テキストのトークンを識別します。

提供されるディクショナリ

KOREAN_MORPH_LEXERは次の4つのディクショナリを使用します。

表2-21 KOREAN_MORPH_LEXERディクショナリ

ディクショナリ ファイル
システム $ORACLE_HOME/ctx/data/kolx/drk2sdic.dat
文法 $ORACLE_HOME/ctx/data/kolx/drk2gram.dat
ストップワード $ORACLE_HOME/ctx/data/kolx/drk2xdic.dat
ユーザー定義 $ORACLE_HOME/ctx/data/kolx/drk2udic.dat

文法、ユーザー定義およびストップワードの各ディクショナリは、KSC 5601またはMSWIN949キャラクタ・セットを使用して作成する必要があります。これらのディクショナリは定義済のルールを使用して変更できます。システム・ディクショナリは変更できません。

未登録のワードは、ユーザー定義ディクショナリ・ファイルに追加できます。新しいワードを指定するルールは、このファイルに含まれています。

サポートされているキャラクタ・セット

データベース・キャラクタ・セットが次のいずれかである場合は、KOREAN_MORPH_LEXERを使用できます。

  • KO16KSC5601

  • KO16MSWIN949

  • UTF8

  • AL32UTF8

KOREAN_MORPH_LEXERは、大/小文字混在の検索を有効にします。

Unicodeのサポート

KOREAN_MORPH_LEXERは、次をサポートします。

  • Unicodeで定義されたKSC5601以外の韓国語の文字のワード

  • 追加文字


関連項目

追加文字の詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

韓国語ドキュメントには、KSC5601以外の文字が使用されているものがあります。KOREAN_MORPH_LEXERは、11,172個の有効な韓国語(ハングル)文字をすべて認識できるため、このような文書も、UTF8またはAL32UTF8キャラクタ・セットを使用することで解析できます。

サロゲート文字を抽出するには、データベースにAL32UTF8キャラクタ・セットを使用します。デフォルトでは、KOREAN_MORPH_LEXERは、シリーズごとの1つのトークンとして、すべてのシリーズのサロゲート文字を抽出します。

韓国語Unicodeサポートの制限事項

ハンジャのハングル(韓国語)への変換の場合、KOREAN_MORPH_LEXERは、KSC5601に定義された4888個のハンジャ文字のみをサポートしています。

KOREAN_MORPH_LEXER属性

KOREAN_MORPH_LEXERを使用する場合、次の属性を指定できます。

表2-22 KOREAN_MORPH_LEXER属性

属性 属性値
verb_adjective 動詞、形容詞および副詞の索引付けに対して、TRUEまたはFALSEを指定します。デフォルトはFALSEです。
one_char_word 1つの音節の索引付けに対して、TRUEまたはFALSEを指定します。デフォルトはFALSEです。
number 数の索引付けに対して、TRUEまたはFALSEを指定します。デフォルトはFALSEです。
user_dic ユーザー・ディクショナリの索引付けに対して、TRUEまたはFALSEを指定します。デフォルトはTRUEです。
stop_dic ストップワード・ディクショナリの使用に対して、TRUEまたはFALSEを指定します。デフォルトはTRUEです。ストップワード・ディクショナリは、KOREAN_MORPH_LEXERに属します。
composite コンポジット名詞の索引付けスタイルを指定します。

コンポジット名詞のみを索引付けするには、COMPOSITE_ONLYを指定します。

コンポジット名詞の名詞コンポーネントをすべて索引付けするには、NGRAMを指定します。

コンポジット名詞自体の他にコンポジット名詞の単一名詞コンポーネントを索引付けするには、COMPONENT_WORDを指定します。デフォルトはCOMPONENT_WORDです。

NGRAMCOMPONENT_WORDの相違点については、例を参照してください。

morpheme 語形分析に対して、TRUEまたはFALSEを指定します。FALSEを設定すると、ドキュメント内の空白などのデリミタで分割されたワードからトークンが作成されます。デフォルトはTRUEです。
to_upper 英語の大文字への変換に対して、TRUEまたはFALSEを指定します。デフォルトはTRUEです。
hanja ハンジャ文字を索引付けするには、TRUEを指定します。FALSEに設定すると、ハンジャ文字はハングル文字に変換されます。デフォルトはFALSEです。
long_word 韓国語の16音節を超える長いワードを索引付けするには、TRUEを指定します。デフォルトはFALSEです。
japanese Unicode(2バイト地域でのみ使用)の日本語の文字を索引付けするには、TRUEを指定します。デフォルトはFALSEです。
english 英数字文字列を索引付けするには、TRUEを指定します。デフォルトはTRUEです。

制限事項

KOREAN_MORPH_LEXERでは、文セクションおよび段落セクションはサポートされていません。

KOREAN_MORPH_LEXERの例: Composite属性の設定

composite属性を使用すると、コンポジット名詞の索引付け方法を制御できます。

NGRAMの例

composite属性に対してNGRAMを指定すると、コンポジット名詞は、すべてのコンポーネント・トークンとともに索引付けされます。たとえば、次のようなコンポジット名詞(「情報処理規則」)があるとします。

1.jpgの説明は次にあります。
画像1.jpgの説明

この名詞は、次の6つのトークンとして索引付けされます。

2.jpgの説明は次にあります。
画像2.jpgの説明

3.jpgの説明は次にあります。
画像3.jpgの説明

NGRAMを次のように指定して索引付けできます。

begin
ctx_ddl.create_preference('my_lexer','KOREAN_MORPH_LEXER');
ctx_ddl.set_attribute('my_lexer','COMPOSITE','NGRAM');
end


索引を作成するには、次のようにします。

create index koreanx on korean(text) indextype is ctxsys.context
parameters ('lexer my_lexer');
COMPONENT_WORDの例

composite属性に対してCOMPONENT_WORDを指定すると、コンポジット名詞およびそのコンポーネントが索引付けされます。たとえば、次のようなコンポジット名詞(「情報処理規則」)があるとします。

1.jpgの説明は次にあります。
画像1.jpgの説明

この名詞は、次の4つのトークンとして索引付けされます。

1.jpgの説明は次にあります。
画像1.jpgの説明

comp.jpgの説明は次にあります。
画像comp.jpgの説明

COMPONENT_WORDを次のように指定して索引付けできます。

begin
ctx_ddl.create_preference('my_lexer','KOREAN_MORPH_LEXER');
ctx_ddl.set_attribute('my_lexer','COMPOSITE','COMPONENT_WORD');
end

索引を作成するには、次のようにします。

create index koreanx on korean(text) indextype is ctxsys.context
parameters ('lexer my_lexer');

USER_LEXER

USER_LEXERを使用して、ユーザーの言語に固有のレクサー処理ソリューションをプラグインします。USER_LEXERによって、Oracle Textでサポートされていない言語のレクサーを定義できます。また、サポートされている言語のレクサーがユーザーのアプリケーションに不適当な場合は、新しいレクサーを定義できます。

ユーザー定義レクサーをOracle Textに登録するには、次の2つのルーチンの指定が必要です。

表2-23 USER_LEXERのユーザー定義ルーチン

ユーザー定義ルーチン 説明
索引付けプロシージャ ドキュメントとストップワードのトークン化を行うストアド・プロシージャ(PL/SQL)出力は、この項に記載されているとおりのXMLドキュメントであることが必要です。
問合せプロシージャ 問合せワードのトークン化を行うストアド・プロシージャ(PL/SQL)出力は、この項に記載されているとおりのXMLドキュメントであることが必要です。

制限事項

USER_LEXERでは、次の機能はサポートされていません。

  • CTX_DOC.GISTおよびCTX_DOC.THEMES

  • CTX_QUERY.HFEEDBACK

  • ABOUT問合せ演算子

  • CTXRULE索引タイプ

  • VGRAM索引付けアルゴリズム

USER_LEXER属性

USER_LEXERには次の属性があります。

表2-24 USER_LEXER属性

属性 属性値
INDEX_PROCEDURE ストアド・プロシージャの名前。デフォルトはありません。
INPUT_TYPE VARCHAR2またはCLOB。デフォルトはCLOBです。
QUERY_PROCEDURE ストアド・プロシージャの名前。デフォルトはありません。

INDEX_PROCEDURE

このコールバック・ストアド・プロシージャは、ドキュメントまたはストップリスト・オブジェクトにあるストップワードのトークン化が必要になると、Oracle Textによってコールされます。

要件

このプロシージャには、PL/SQLストアド・プロシージャを指定できます。

索引所有者は、このストアド・プロシージャに対するEXECUTE権限が必要です。

このストアド・プロシージャは、索引の作成後に置換したり削除することはできません。索引の削除後に、このストアド・プロシージャを置換または削除することはできます。

パラメータ

ユーザー定義レクサーの索引付けプロシージャでは、次の2つのインタフェースがサポートされています。

制限事項

このプロシージャは、次のいずれの操作も実行できません。

  • ロールバック

  • 現行トランザクションの明示的または暗黙的なコミット

  • その他のトランザクション制御文の発行

  • セッション言語または地域の変更

XMLドキュメントのルート要素トークンの子要素は、トークン化されるドキュメントまたはストップワードでトークンが出現した順序で戻される必要があります。

このストアド・プロシージャの動作は、すべてのパラメータに対して決定的であることが必要です。

INPUT_TYPE

ユーザー定義レクサーの索引付けプロシージャでは、2つのインタフェースがサポートされています。1つのインタフェースは、ドキュメントまたはストップワードと、XMLとしてコード化された対応するトークンをVARCHAR2データ型で渡し、もう1つのインタフェースはCLOBデータ型を使用します。この属性は、INDEX_PROCEDURE属性で指定されたストアド・プロシージャが実装するインタフェースを示します。

VARCHAR2インタフェース

表2-25では、トークン化するドキュメントまたはストップリスト・オブジェクトのストップワードをVARCHAR2でOracle Textからストアド・プロシージャに渡し、同様に、トークンをVARCHAR2でストアド・プロシージャからOracle Textに渡すインタフェースについて説明します。

ユーザー定義レクサーの索引付けプロシージャでは、索引付けする列の全ドキュメントが32512バイト以下で、そのトークンが32512バイト以下で表される場合は、このインタフェースを使用してください。この場合、表2-26に示したCLOBインタフェースも使用できますが、通常、VARCHAR2インタフェースはCLOBインタフェースよりも高速に実行されます。

このプロシージャは、次のパラメータを使用して定義する必要があります。

表2-25 INDEX_PROCEDURESのVARCHAR2インタフェース

パラメータ順序 パラメータ・モード パラメータのデータ型 説明
1 IN VARCHAR2 トークン化するドキュメントまたはストップリスト・オブジェクトのストップワード。

ドキュメントが32512バイトを超える場合は、ドキュメント・レベルの索引付けエラーがレポートされます。

2 IN OUT VARCHAR2 XMLとしてコード化されたトークン。

ドキュメントにトークンが含まれていない場合は、NULLを戻すか、または戻されるXMLドキュメントのトークン要素に子要素を含めないでください。

データのバイト長は、32512以下にしてください。

パフォーマンスを改善するには、このパラメータの宣言時にNOCOPYヒントを使用してください。NOCOPYヒントによって、データは値ではなく参照によって渡されます。

このプロシージャが戻すXMLドキュメントには不要なwhitespace文字(通常、可読性の向上のために使用する)を含めないでください。これによって、XMLドキュメントのサイズが縮小され、結果として送信時間が短縮されます。

パフォーマンス向上のために、index_procedureの実行時に、対応するXML Schemaに対するXMLドキュメントの妥当性はチェックされません。

このパラメータは、パフォーマンスの目的でIN OUTになっています。ストアド・プロシージャでINの値を指定する必要はありません。

3 IN BOOLEAN トークン化するドキュメントでのトークンの文字オフセットと文字長がOracle Textで必要な場合、このパラメータはTRUEに設定されます。

トークン化するドキュメントで検出されたトークンの文字オフセットと文字長がOracle Textで不要な場合、このパラメータはFALSEに設定されます。これは、XML属性のoffとlenを使用できないことを意味します。


CLOBインタフェース

表2-26では、トークン化するドキュメントまたはストップリスト・オブジェクトのストップワードをCLOBでOracle Textからストアド・プロシージャに渡し、同様に、トークンをCLOBでストアド・プロシージャからOracle Textに渡すCLOBインタフェースについて説明します。

ユーザー定義レクサーの索引付けプロシージャでは、索引付けする列の1つ以上のドキュメントが32512バイトを超える場合、または対応するトークンが32512バイトを超えるバイト数で表される場合は、このインタフェースを使用してください。

表2-26 INDEX_PROCEDUREのCLOBインタフェース

パラメータ順序 パラメータ・モード パラメータのデータ型 説明
1 IN CLOB トークン化するドキュメントまたはストップリスト・オブジェクトのストップワード。
2 IN OUT CLOB XMLとしてコード化されたトークン。
3 IN BOOLEAN ドキュメントにトークンが含まれていない場合は、NULLを戻すか、または戻されるXMLドキュメントのトークン要素に子要素を含めないでください。

パフォーマンスを改善するには、このパラメータの宣言時にNOCOPYヒントを使用してください。NOCOPYヒントによって、データは値ではなく参照によって渡されます。

このプロシージャが戻すXMLドキュメントには不要なwhitespace文字(通常、可読性の向上のために使用する)を含めないでください。これによって、XMLドキュメントのサイズが縮小され、結果として送信時間が短縮されます。

パフォーマンス向上のために、index_procedureの実行時に、対応するXML Schemaに対するXMLドキュメントの妥当性はチェックされません。

このパラメータは、パフォーマンスの目的でIN OUTになっています。ストアド・プロシージャでINの値を指定する必要はありません。INの値は、常に切り捨てられたCLOBとなります。


1番目と2番目のパラメータは一時CLOBです。これらのCLOBロケータを他のロケータ変数に割り当てないでください。仮パラメータのCLOBロケータを他のロケータ変数に割り当てると、一時CLOBの新しいコピーが作成され、パフォーマンスに影響を与えます。

QUERY_PROCEDURE

このコールバック・ストアド・プロシージャは、問合せ内のワードのトークン化が必要になると、Oracle Textによってコールされます。問合せ内の空白で区切られた文字のグループ(問合せ演算子を除く)は、ワードとして識別されます。

要件

このプロシージャには、PL/SQLストアド・プロシージャを指定できます。

索引所有者は、このストアド・プロシージャに対するEXECUTE権限が必要です。

このストアド・プロシージャは、索引の作成後に置換したり削除することはできません。索引の削除後に、このストアド・プロシージャを置換または削除することはできます。

制限事項

このプロシージャは、次のいずれの操作も実行できません。

  • ロールバック

  • 現行トランザクションの明示的または暗黙的なコミット

  • その他のトランザクション制御文の発行

  • セッション言語または地域の変更

XMLドキュメントのルート要素トークンの子要素は、トークン化される問合せワードでトークンが出現した順序で戻される必要があります。

このストアド・プロシージャの動作は、すべてのパラメータに対して決定的であることが必要です。

パラメータ

表2-27では、ユーザー定義レクサーの問合せプロシージャのインタフェースについて説明します。

表2-27 ユーザー定義レクサーの問合せプロシージャXML Schema属性

パラメータ順序 パラメータ・モード パラメータのデータ型 説明
1 IN VARCHAR2 トークン化する問合せワード。
2 IN CTX_ULEXER_WILDCARD_TAB 問合せワード内のワイルド・カード文字(%および_)の文字オフセット。Oracle Textによって渡された問合せワードにワイルド・カード文字が含まれていない場合、この索引付き表は空になります。

問合せワード内のワイルド・カード文字は、ワイルド・カード問合せ機能が正しく実行されるように、戻されるトークンに保持する必要があります。

文字オフセットは0(ゼロ)を基準にしています。 オフセット情報はUSC-2コードポイント・セマンティクスに準拠します。

3 IN OUT VARCHAR2 XMLとしてコード化されたトークン。

問合せワードにトークンが含まれていない場合は、NULLを戻すか、または戻されるXMLドキュメントのトークン要素に子要素を含めないでください。

データの長さは、32512バイト以下であることが必要です。


トークンのXMLとしてのコード化

ユーザーのストアド・プロシージャが戻すトークンの順序は、XML 1.0ドキュメントで表す必要があります。このXMLドキュメントは、次の各項で示すXML Schemaに対して妥当であることが必要です。

制限事項

この機能のパフォーマンスを向上させるために、Oracle TextのXMLパーサーは妥当性チェックを実行しません。また、XMLの機能に完全に適合する正規のパーサーではありません。つまり、最小限のXML機能がサポートされます。次のXML機能はサポートされません。

  • ドキュメント・タイプ宣言(例: <!DOCTYPE [...]>)およびエンティティ宣言。lt、gt、amp、quotおよびaposの組込みエンティティのみ参照できます。

  • CDATAセクション

  • コメント

  • 処理命令

  • XML宣言(例: <?xml version="1.0" ...?>

  • 名前空間

  • 対応するXML Schema以外で定義された要素および属性の使用

  • 文字参照(例: &#x099F;)

  • xml:space属性

  • xml:lang属性

Locationを使用しないユーザー定義索引付けプロシージャのXML Schema

この項では、3番目のパラメータがFALSEの場合に、ユーザー定義レクサーの索引付けプロシージャが戻すXMLドキュメントに適用される追加の制約について説明します。戻されるXMLドキュメントは、次のXML Schemaに対して妥当であることが必要です。

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

  <xsd:element name="tokens">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element name="eos" type="EmptyTokenType"/>
          <xsd:element name="eop" type="EmptyTokenType"/>
          <xsd:element name="num" type="xsd:token"/>
          <xsd:group ref="IndexCompositeGroup"/>
        </xsd:choice>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>

  <!--
  Enforce constraint that compMem element must be preceeded by word element
  or compMem element for indexing
  -->
  <xsd:group name="IndexCompositeGroup">
    <xsd:sequence>
      <xsd:element name="word" type="xsd:token"/>
      <xsd:element name="compMem" type="xsd:token" minOccurs="0"
maxOccurs="unbounded"/>
    </xsd:sequence>
  </xsd:group>

  <!-- EmptyTokenType defines an empty element without attributes -->
  <xsd:complexType name="EmptyTokenType"/>

</xsd:schema>

次に、このXML Schemaによって適用される制約をいくつか説明します。

  • ルート要素はトークンで、指定は必須です。属性はありません。

  • ルート要素には、子要素を指定しないことも、1つ以上の子要素を指定することも可能です。子要素には、eos、eop、num、wordおよびcompMemのいずれかを指定できます。これらの子要素は、特定のトークン型を表します。

  • compMem要素は、word要素またはcompMem要素の後に指定する必要があります。

  • eos要素とeop要素に属性はありません。これらは空要素であることが必要です。

  • num、wordおよびcompMem要素に属性はありません。これらの要素の内容は、Oracle Textによって正規化されます。whitespace文字の空白文字への変換、隣接する複数の空白文字の単一空白文字への縮小、先頭および末尾の空白の削除、エンティティ参照の置換、および64バイトへの切捨てが行われます。

表2-28では、前述のXML Schemaに定義されている要素名について説明します。

表2-28 ユーザー定義レクサーの索引付けプロシージャXML Schema要素名

要素 説明
word 単純なワード・トークンを表します。この要素の内容はワード自体です。このトークンがストップワードまたは非ストップワードとして識別され、これに対応した処理が行われます。
num 数値トークンを表します。この要素の内容は数値自体です。ストップリスト・プリファレンスにNUMBERSがストップクラスとして追加されている場合、このトークンはストップワードとして処理されます。それ以外の場合、このトークンはワード・トークンと同様に処理されます。

このトークン型のサポートはオプションです。このトークン型をサポートしない場合、NUMERBSストップクラスの追加による影響はありません。

eos 文の終わりを表すトークンです。この情報は、WITHIN SENTENCE問合せをサポートするために使用されます。

このトークン型のサポートはオプションです。このトークン型をサポートしない場合、SENTENCEセクションに対する問合せは期待どおりに実行されません。

eop 段落の終わりを表すトークンです。この情報は、WITHIN PARAGRAPH問合せをサポートするために使用されます。

このトークン型のサポートはオプションです。このトークン型をサポートしない場合、PARAGRAPHセクションに対する問合せは期待どおりに実行されません。

compMem 暗黙的なワード・オフセットが前のワード・トークンと同じであるという点を除いて、word要素と同じです。

このトークン型のサポートはオプションです。


ドキュメント: Vom Nordhauptbahnhof und aus der Innenstadt zum Messegelände.

トークン:

<tokens>
  <word> VOM </word>
  <word> NORDHAUPTBAHNHOF </word>
  <compMem>NORD</compMem>
  <compMem>HAUPT </compMem>
  <compMem>BAHNHOF </compMem>
  <compMem>HAUPTBAHNHOF </compMem>
  <word> UND </word>
  <word> AUS </word>
  <word> DER </word>
  <word> INNENSTADT </word>
  <word> ZUM </word>
  <word> MESSEGELÄNDE </word>
  <eos/>
</tokens>

ドキュメント: Oracle Database 10g Release 1

トークン:

<tokens>
  <word> ORACLE10G</word>
  <word> RELEASE </word>
  <num> 1 </num>
</tokens>

ドキュメント: WHERE salary<25000.00 AND job = 'F&B Manager''

トークン:

<tokens>
  <word> WHERE </word>
  <word> salary&lt;2500.00 </word>
  <word> AND </word>
  <word> job </word>
  <word> F&amp;B </word>
  <word> Manager </word>
</tokens>

Locationを使用したユーザー定義索引付けプロシージャのXML Schema

この項では、3番目のパラメータがTRUEの場合に、ユーザー定義レクサーの索引付けプロシージャが戻すXMLドキュメントに適用される追加の制約について説明します。 戻されるXMLドキュメントは、次のXML Schemaに対して妥当であることが必要です。

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

  <xsd:element name="tokens">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element name="eos" type="EmptyTokenType"/>
          <xsd:element name="eop" type="EmptyTokenType"/>
          <xsd:element name="num" type="DocServiceTokenType"/>
          <xsd:group ref="DocServiceCompositeGroup"/>
        </xsd:choice>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>

  <!--
  Enforce constraint that compMem element must be preceeded by word element
  or compMem element for document service
  -->
  <xsd:group name="DocServiceCompositeGroup">
    <xsd:sequence>
      <xsd:element name="word" type="DocServiceTokenType"/>
      <xsd:element name="compMem" type="DocServiceTokenType" minOccurs="0"
           maxOccurs="unbounded"/>
    </xsd:sequence>
  </xsd:group>

  <!-- EmptyTokenType defines an empty element without attributes -->
  <xsd:complexType name="EmptyTokenType"/>

  <!--
  DocServiceTokenType defines an element with content and mandatory attributes
  -->
  <xsd:complexType name="DocServiceTokenType">
    <xsd:simpleContent>
      <xsd:extension base="xsd:token">
        <xsd:attribute name="off" type="OffsetType" use="required"/>
        <xsd:attribute name="len" type="xsd:unsignedShort" use="required"/>
      </xsd:extension>
    </xsd:simpleContent>
  </xsd:complexType>

  <xsd:simpleType name="OffsetType">
    <xsd:restriction base="xsd:unsignedInt">
      <xsd:maxInclusive value="2147483647"/>
    </xsd:restriction>
  </xsd:simpleType>

</xsd:schema>

このXML Schemaによって適用される制約は次のとおりです。

  • ルート要素はトークンで、指定は必須です。属性はありません。

  • ルート要素には、子要素を指定しないことも、1つ以上の子要素を指定することも可能です。子要素には、eos、eop、num、wordおよびcompMemのいずれかを指定できます。これらの子要素は、特定のトークン型を表します。

  • compMem要素は、word要素またはcompMem要素の後に指定する必要があります。

  • eos要素とeop要素に属性はありません。これらは空要素であることが必要です。

  • num、wordおよびcompMem要素には、必須属性のoffとlenがあります。これらの要素の内容は、Oracle Textによって正規化されます。whitespace文字の空白文字への変換、隣接する複数の空白文字の単一空白文字への縮小、先頭および末尾の空白の削除、エンティティ参照の置換、および64バイトへの切捨てが行われます。

  • off属性の値には0(ゼロ)〜2147483647の整数を指定する必要があります。

  • len属性の値には0(ゼロ)〜65535の整数を指定する必要があります。

表2-28では、前述のXML Schemaに定義されている要素型について説明します。

表2-29では、前述のXML Schemaに定義されている属性について説明します。

表2-29 ユーザー定義レクサーの索引付けプロシージャXML Schema属性

属性 説明
off トークン化するドキュメントに出現するトークンの文字オフセットを表します。

このオフセットは、データストアでフェッチされたドキュメントではなく、ユーザー定義レクサーの索引付けプロシージャに渡された文字ドキュメントに対するものです。データストアでフェッチされたドキュメントは、フィルタ・オブジェクトまたはセクション・グループ・オブジェクト(あるいはその両方)で事前処理されてから、ユーザー定義レクサーの索引付けプロシージャに渡される場合があります。

トークン化するドキュメントの最初の文字のオフセットは0(ゼロ)です。 オフセット情報はUSC-2コードポイント・セマンティクスに準拠します。

len トークン化するドキュメントに出現するトークンの文字長を表します(SQL機能のLENGTHのセマンティクスと同じです)。

この長さは、データストアでフェッチされたドキュメントではなく、ユーザー定義レクサーの索引付けプロシージャに渡された文字ドキュメントに対するものです。データストアでフェッチされたドキュメントは、フィルタ・オブジェクトまたはセクション・グループで事前処理されてから、ユーザー定義レクサーの索引付けプロシージャに渡される場合があります。

長さの情報はUSC-2コードポイント・セマンティクスに準拠します。


off属性の値とlen属性の値の合計は、トークン化するドキュメントの合計文字数以下である必要があります。これによって、ドキュメントのオフセットと参照される文字がドキュメント境界内に保持されます。

ドキュメント: User-defined Lexer

トークン:

<tokens>
  <word off="0" len="4"> USE </word>
  <word off="5" len="7"> DEF </word>
  <word off="13" len="5"> LEX </word>
  <eos/>
</tokens>

ユーザー定義レクサーの問合せプロシージャのXML Schema

この項では、ユーザー定義レクサーの問合せプロシージャが戻すXMLドキュメントに適用される追加の制約について説明します。戻されるXMLドキュメントは、次のXML Schemaに対して妥当であることが必要です。

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

  <xsd:element name="tokens">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element name="num" type="QueryTokenType"/>
          <xsd:group ref="QueryCompositeGroup"/>
        </xsd:choice>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>

<!--
Enforce constraint that compMem element must be preceeded by word element
or compMem element for query
-->
  <xsd:group name="QueryCompositeGroup">
    <xsd:sequence>
      <xsd:element name="word" type="QueryTokenType"/>
      <xsd:element name="compMem" type="QueryTokenType" minOccurs="0"
                                              maxOccurs="unbounded"/>
    </xsd:sequence>
  </xsd:group>

  <!--
  QueryTokenType defines an element with content and with an optional attribute
  -->
  <xsd:complexType name="QueryTokenType">
    <xsd:simpleContent>
      <xsd:extension base="xsd:token">
        <xsd:attribute name="wildcard" type="WildcardType" use="optional"/>
      </xsd:extension>
    </xsd:simpleContent>
  </xsd:complexType>

  <xsd:simpleType name="WildcardType">
    <xsd:restriction base="WildcardBaseType">
      <xsd:minLength value="1"/>
      <xsd:maxLength value="64"/>
    </xsd:restriction>
  </xsd:simpleType>

  <xsd:simpleType name="WildcardBaseType">
    <xsd:list>
      <xsd:simpleType>
        <xsd:restriction base="xsd:unsignedShort">
          <xsd:maxInclusive value="378"/>
        </xsd:restriction>
      </xsd:simpleType>
    </xsd:list>
  </xsd:simpleType>

</xsd:schema>

次に、このXML Schemaによって適用される制約をいくつか説明します。

  • root要素はトークンで、指定は必須です。属性はありません。

  • root要素には、子要素を指定しないことも、1つ以上の子要素を指定することも可能です。子要素には、numまたはwordのいずれかを指定できます。これらの子要素は、特定のトークン型を表します。

  • compMem要素は、word要素またはcompMem要素の後に指定する必要があります。

    compMemの目的は、USER_LEXERの問合せで、1つの問合せに対し複数の形式を戻せるようにすることです。たとえば、ユーザー定義のレクサーにより、銀行という語がBANK(FINANCIAL)およびBANK(RIVER)として索引付けされている場合、問合せプロシージャはword要素として1つ目の語句を戻し、compMem要素として2つ目の語句を戻すことができます。

    <tokens>
      <word>BANK(RIVER)</word>
      <compMem>BANK(FINANCIAL)</compMem>
    </tokens>
    
    

    compMem要素の詳細は、表2-30「ユーザー定義レクサーの問合せプロシージャXML Schema属性」を参照してください。

  • numおよびword要素には、オプション属性のwildcardがあります。これらの要素の内容は、Oracle Textによって正規化されます。whitespace文字の空白文字への変換、隣接する複数の空白文字の単一空白文字への縮小、先頭および末尾の空白の削除、エンティティ参照の置換、および64バイトへの切捨てが行われます。

  • wildcard属性の値は、空白で区切られた整数のリストです整数の最小数は1で、最大数は64です。0(ゼロ)〜378の値を指定する必要があります。リスト内の構成は、任意の順序にできます。

表2-28では、前述のXML Schemaに定義されている要素型について説明します。

表2-30では、前述のXML Schemaに定義されている属性について説明します。

表2-30 ユーザー定義レクサーの問合せプロシージャXML Schema属性

属性 説明
compMem word要素と同じですが、暗黙的なワード・オフセットは前のwordトークンと同じです。Oracle Textでは、このトークンは、前のwordトークン、および問合せ演算子EQUIVを使用して後のcompMemトークンと同一に扱われます。
wildcard 問合せ内の%文字または_文字は、ユーザーがエスケープしないかぎり、他の文字で置換されるワイルド・カード文字とみなされます。問合せ内のワイルド・カード文字は、ワイルド・カード問合せ機能が正しく実行されるように、トークン化時に保持する必要があります。この属性は、要素の内容に含まれるワイルド・カード文字の文字オフセットを表します(SQL機能のLENGTHのセマンティクスと同じです)。これらのオフセットは、要素の内容に対して実行される正規化に応じて調整されます。オフセットは、%文字または_文字のいずれかを指し示す必要があります。

要素の内容に含まれる最初の文字のオフセットは0(ゼロ)です。オフセット情報はUSC-2コードポイント・セマンティクスに準拠します。

トークンにワイルド・カード文字が含まれていない場合、この属性は指定できません。


問合せワード: pseudo-%morph%

トークン:

<tokens>
  <word> PSEUDO </word>
  <word wildcard="1 7"> %MORPH% </word>
</tokens>
Query word: <%>
Tokens:
<tokens>
  <word wildcard="5"> &lt;%&gt; </word>
</tokens>

WORLD_LEXER

WORLD_LEXERは、異なる複数の言語のドキュメントを含むテキスト列の索引付けに使用します。たとえば、このレクサーを使用して、英語、日本語およびドイツ語のドキュメントを格納するテキスト列を索引付けできます。

WORLD_LEXERは、ドキュメントの言語を自動的に検出するという点で、MULTI_LEXERと異なります。MULTI_LEXERと異なり、WORLD_LEXERは、元表に言語列を設定したり、索引の作成時に言語列を指定する必要がありません。さらに、MULTI_LEXERと同様に、サブレクサーを使用する必要もありません。(MULTI_LEXERを参照してください。)

このレクサーには属性がありません。

WORLD_LEXERは、キャラクタ・セットがUnicode 4.0標準によって定義された言語で機能します。WORLD_LEXERが機能できる言語のリストについては、「Worldレクサー機能」を参照してください。

WORLD_LEXER属性

WORLD_VGRAM_LEXERには次の属性があります。

表2-31 WORLD_LEXER属性

属性 属性値
mixed_case テキストの大/小文字混在の検索を有効にします(例: catおよびCat)。使用可能な値はYESまたはNO(デフォルト)です。

WORLD_LEXERの例

WORLD_LEXERを使用して索引を作成する例を次に示します。

exec ctx_ddl.create_preference('MYLEXER', 'world_lexer');
create index doc_idx on doc(data)
  indextype is CONTEXT
  parameters ('lexer MYLEXER
               stoplist CTXSYS.EMPTY_STOPLIST');

ワードリスト

ワードリスト・プリファレンスによって、使用している言語に対するステミングやファジー・マッチングなどの問合せオプションを使用可能にします。また、ワードリスト・プリファレンスを使用すると、サブストリングやプリフィックス索引付けを使用可能にでき、CONTAINSおよびCATSEARCHによるワイルド・カード問合せのパフォーマンスが改善されます。

ワードリスト・プリファレンスを作成するには、BASIC_WORDLISTを使用する必要があります。使用できるのはこの型のみです。

BASIC_WORDLIST

BASIC_WORDLIST型を使用して、テキスト索引に対するステミングおよびファジー・マッチングを使用可能にしたり、プリフィックス索引を作成することができます。


関連項目

STEM演算子およびFUZZY演算子の詳細は、第3章「Oracle Text CONTAINS問合せ演算子」を参照してください。

BASIC_WORDLISTには次の属性があります。

表2-32 BASIC_WORDLIST属性

属性 属性値
stemmer 使用する言語ステマーを指定します。次のうちのいずれかを指定できます。

NULL(ステミングなし)

ENGLISH(英語の語形変化)

DERIVATIONAL(英語の派生語)

DUTCH

FRENCH

GERMAN

ITALIAN

SPANISH

AUTO(前述の言語のステミングに対する自動言語識別。日本語は自動検出されません。)

JAPANESE

fuzzy_match 使用するファジー・マッチング・クラスタを指定します。次のうちのいずれかを指定できます。

AUTO(ステミングに対する自動言語識別)

CHINESE_VGRAM

DUTCH

ENGLISH

FRENCH

GENERIC

GERMAN

ITALIAN

JAPANESE_VGRAM

KOREAN

OCR

SPANISH

fuzzy_score デフォルトのファジー・スコアの下限を指定します。0〜80の数を指定します。この数値未満のスコアを含むテキストは戻されません。デフォルトは60です。
fuzzy_numresults ファジー拡張の最大数を指定します。0〜5,000の数を指定します。デフォルトは100です。
substring_index TRUEを指定すると、サブストリング索引が作成されます。サブストリング索引を使用すると、%ing%benz%のような左側切捨ておよび左右切捨てのワイルド・カード問合せが改善されます。デフォルトはFALSEです。

TRUEに設定したsubstring_indexがあるワードリストを使用してテキスト索引を作成するには、索引を作成するユーザーにCREATE TRIGGERシステム権限が必要です。

prefix_index TRUEを指定すると、プリフィックス索引付けが使用可能になります。プリフィックス索引付けを行うと、TO%のような右側切捨てのワイルド・カード検索のパフォーマンスが改善されます。デフォルトはFALSEです。
prefix_length_min 索引付けされたプリフィックスの最小長を指定します。 デフォルトは1です。長さの情報はUSC-2コードポイント・セマンティクスに準拠する必要があります。
prefix_length_max 索引付けされたプリフィックスの最大長を指定します。 デフォルトは64です。長さの情報はUSC-2コードポイント・セマンティクスに準拠する必要があります。
wlidcard_maxterms ワイルド・カード拡張での語句の最大数を指定します。1〜15,000の数を指定します。デフォルトは5,000です。

stemmer

テキスト問合せでワード・ステミングに使用するステマーを指定します。ステマーに対して値を指定しない場合、デフォルトはENGLISHです。

AUTOを指定すると、セッションの言語設定に従って、システムが自動的にステミング言語を設定します。言語に対してステマーが存在しない場合、デフォルトはNULLです。NULLステマーを使用すると、STEM演算子は問合せで無視されます。

独自のステミング・ディクショナリを作成できます。詳細は、「ステミング・ユーザー・ディクショナリ」を参照してください。

fuzzy_match

列に使用するファジー・マッチング・ルーチンを指定します。ファジー・マッチングは、現在、英語、日本語および一部のヨーロッパ言語に対してサポートされています。


注意:

中国語および韓国語のfuzzy_match属性値は、英語および日本語のファジー・マッチング・ルーチンが、中国語および韓国語のテキストに使用されないようにするためのダミー属性値です。

fuzzy_matchのデフォルトはGENERICです。

AUTOを指定すると、セッションの言語設定に従って、システムが自動的にファジー・マッチング言語を設定します。

fuzzy_score

デフォルトのファジー・スコアの下限を指定します。0〜80の数を指定します。この数値未満のスコアを含むテキストは戻されません。デフォルトは60です。

ファジー・スコアは、拡張されたワードが問合せワードにどれだけ近いかという計測値です。スコアが高いほど適合する度合いが高くなります。このパラメータを使用して、ファジー拡張を最も適合する度合いに制限できます。

fuzzy_numresults

ファジー拡張の最大数を指定します。0〜5000の数を指定します。デフォルトは100です。

ファジー拡張を設定することによって、拡張を最も適合するワードの指定値に制限できます。

substring_index

Oracle TextにTRUEを指定すると、サブストリング索引が作成されます。サブストリング索引を使用すると、%ing%benz%のような左側切捨てまたは左右切捨てのワイルド・カード問合せが改善されます。デフォルトはFALSEです。

サブストリングの索引付けによって、索引付け処理およびディスク・リソースに対して、次のような影響があります。

  • 索引作成およびDML処理が、最大4倍遅くなります。

  • 作成するサブストリング索引のサイズは、ワード表上の$X索引とほぼ同じサイズになります。

  • substring_indexを使用可能にして索引を作成すると、サブストリング索引をオフにして作成するよりも、索引のフラッシュ時により多くのロールバック・セグメントが必要になります。サブストリング索引の作成時に、次のいずれかを実行することをお薦めします。

    • 通常の2倍のロールバックを使用可能にします。

    • ディスクに対する索引フラッシュのサイズを縮小するために索引メモリーを減らします。

prefix_index

yesを指定すると、プリフィックス索引付けが使用可能になります。プリフィックス索引付けを行うと、TO%のような右側切捨てのワイルド・カード検索のパフォーマンスが改善されます。デフォルトはNOです。


注意:

プリフィックス索引付けを行うと、索引サイズが増加します。

プリフィックス索引付けでは、トークンが複数のプリフィックスに切断され、$I表に格納されます。たとえば、TOKENTOYは、$I表で通常次のように索引付けされます。

トークン データ型 情報
TOKEN 0 DOCID 1 POS 1
TOY 0 DOCID 1 POS 3

プリフィックス索引付けを使用すると、これらのトークンのプリフィックス・サブストリングが、6というトークン型で索引付けされます。

トークン データ型 情報
TOKEN 0 DOCID 1 POS 1
TOY 0 DOCID 1 POS 3
T 6 DOCID 1 POS 1 POS 3
TO 6 DOCID 1 POS 1 POS 3
TOK 6 DOCID 1 POS 1
TOKE 6 DOCID 1 POS 1
TOKEN 6 DOCID 1 POS 1
TOY 6 DOCID 1 POS 3

TO%のようなワイルド・カード検索が高速化されます。これは、語句の拡張と結果セットのマージが実行されないためです。結果の取得に必要なのは、行(TO、6)の検索のみです。

prefix_length_min

索引付けされたプリフィックスの最小長を指定します。デフォルトは1です。

たとえば、prefix_length_minを3に設定し、prefix_length_maxを5に設定すると、3〜5文字までの長さのすべてのプリフィックスが索引付けされます。


注意:

ワイルド・カード検索のパターンが最小長未満または最大長を超える場合は、同等化拡張およびマージという速度の遅い方法で検索が実行されます。

prefix_length_max

索引付けされたプリフィックスの最大長を指定します。デフォルトは64です。

たとえば、prefix_length_minを3に設定し、prefix_length_maxを5に設定すると、3〜5文字までの長さのすべてのプリフィックスが索引付けされます。


注意:

ワイルド・カード検索のパターンが最小長未満または最大長を超える場合は、同等化拡張およびマージという速度の遅い方法で検索が実行されます。

wildcard_maxterms

ワイルド・カード(%)拡張での語句の最大数を指定します。このパラメータを使用して、ワイルド・カード問合せパフォーマンスを受入れ可能な制限内に保持します。ワイルド・カード問合せ拡張がこの制限数を超えると、エラーが戻されます。

BASIC_WORDLISTの例

次に、BASIC_WORDLIST型を使用した例を示します。

ファジー・マッチングおよびステミングの使用可能化

次の例では、英語に対するステミングおよびファジー・マッチングを使用可能にします。プリファレンスSTEM_FUZZY_PREFによって、拡張数が許容される最大数に設定されます。また、このプリファレンスによって、左右切捨て検索のパフォーマンスが向上するように、サブストリング索引がシステムで作成されます。

begin
  ctx_ddl.create_preference('STEM_FUZZY_PREF', 'BASIC_WORDLIST');
  ctx_ddl.set_attribute('STEM_FUZZY_PREF','FUZZY_MATCH','ENGLISH');
  ctx_ddl.set_attribute('STEM_FUZZY_PREF','FUZZY_SCORE','0');
  ctx_ddl.set_attribute('STEM_FUZZY_PREF','FUZZY_NUMRESULTS','5000');
  ctx_ddl.set_attribute('STEM_FUZZY_PREF','SUBSTRING_INDEX','TRUE');
  ctx_ddl.set_attribute('STEM_FUZZY_PREF','STEMMER','ENGLISH');
end;

索引をSQLで作成するには、次の文を発行します。

create index fuzzy_stem_subst_idx on mytable ( docs )
  indextype is ctxsys.context parameters ('Wordlist STEM_FUZZY_PREF');

サブストリングとプリフィックス索引付けの使用可能化

次の例では、プリフィックスとサブストリングの索引付けに対してワードリスト・プリファレンスを設定します。プリフィックス索引付けに対して、3〜4文字の長さのトークン・プリフィックスの作成を指定します。

begin
ctx_ddl.create_preference('mywordlist', 'BASIC_WORDLIST');
ctx_ddl.set_attribute('mywordlist','PREFIX_INDEX','TRUE');
ctx_ddl.set_attribute('mywordlist','PREFIX_MIN_LENGTH',3);
ctx_ddl.set_attribute('mywordlist','PREFIX_MAX_LENGTH', 4);
ctx_ddl.set_attribute('mywordlist','SUBSTRING_INDEX', 'YES');
end

ワイルド・カード拡張に対する制限の設定

wildcard_maxterms属性を使用して、ワイルド・カード拡張で使用できる語句の最大数を設定します。

--- create a sample table
drop table quick ;
create table quick
  (
    quick_id number primary key,
    text      varchar(80)
  );

--- insert a row with 10 expansions for 'tire%'
insert into quick ( quick_id, text )
  values ( 1, 'tire tirea tireb tirec tired tiree tiref tireg tireh tirei tirej');
commit;

--- create an index using wildcard_maxterms=100
begin
    Ctx_Ddl.Create_Preference('wildcard_pref', 'BASIC_WORDLIST');
    ctx_ddl.set_attribute('wildcard_pref', 'wildcard_maxterms', 100) ;
end;
/
create index wildcard_idx on quick(text)
    indextype is ctxsys.context
    parameters ('Wordlist wildcard_pref') ;

--- query on 'tire%' - should work fine
select quick_id from quick
  where contains ( text, 'tire%' ) > 0;

--- now re-create the index with wildcard_maxterms=5

drop index wildcard_idx ;

begin
    Ctx_Ddl.Drop_Preference('wildcard_pref');
    Ctx_Ddl.Create_Preference('wildcard_pref', 'BASIC_WORDLIST');
    ctx_ddl.set_attribute('wildcard_pref', 'wildcard_maxterms', 5) ;
end;
/

create index wildcard_idx on quick(text)
    indextype is ctxsys.context
    parameters ('Wordlist wildcard_pref') ;

--- query on 'tire%' gives "wildcard query expansion resulted in too many terms"
select quick_id from quick
  where contains ( text, 'tire%' ) > 0;

記憶域型

記憶域プリファレンスを使用して、テキスト索引に対応付けられた表に対して表領域および作成パラメータを指定します。システムには、BASIC_STORAGEという単一の記憶域型があります。

表2-33 記憶域型

データ型 説明
BASIC_STORAGE テキスト索引を構成するデータベース表および索引に対して、表領域および作成パラメータを指定するために使用する索引付けの型

BASIC_STORAGE

BASIC_STORAGE型は、テキスト索引を構成するデータベース表および索引に対する表領域および作成パラメータを指定します。

指定した句は、索引作成時に内部のCREATE TABLEi_index _clauseの場合はCREATE INDEX)文に追加されます。記憶域、LOB記憶域、パーティション化などの句を指定できます。ただし、索引構成表句は指定しないでください。


関連項目

CREATE TABLE文とCREATE INDEX文の指定方法の詳細は、『Oracle Database SQLリファレンス』を参照してください。

BASIC_STORAGEには次の属性があります。

表2-34 BASIC_STORAGE属性

属性 属性値
i_table_clause dr$索引名$I表作成用のパラメータ句。内部CREATE TABLE文の終わりに追加するstorage句およびtablespace句を指定します。

I表は索引データ表です。

k_table_clause dr$索引名$K表作成用のパラメータ句。内部CREATE TABLE文の終わりに追加するstorage句およびtablespace句を指定します。

K表はキーマップ表です。

r_table_clause dr$索引名$R表作成用のパラメータ句。内部CREATE TABLE文の終わりに追加するstorage句およびtablespace句を指定します。

R表はROWID表です。

デフォルト句は、'LOB(DATA) STORE AS (CACHE)'です。

この属性を変更する場合は、パフォーマンスを向上させるために、この句を必ず含めてください。

n_table_clause dr$索引名$N表作成用のパラメータ句。内部CREATE TABLE文の終わりに追加するstorage句およびtablespace句を指定します。

N表はネガティブリスト表です。

i_index_clause dr$索引名$X索引作成用のパラメータ句。内部CREATE INDEX文の終わりに追加するstorage句およびtablespace句を指定します。 デフォルト句は、'COMPRESS 2'で、この索引表を圧縮するようにOracle Textに指示します。

この圧縮によってディスク領域が節約され、問合せパフォーマンスが向上するため、デフォルトをオーバーライドする場合は、パラメータ句にCOMPRESS 2を指定してこの表を圧縮することをお薦めします。

p_table_clause BASIC_WORDLISTSUBSTRING_INDEXを使用可能にした場合の、サブストリング索引用のパラメータ句

内部CREATE INDEX文の終わりに追加するstorage句およびtablespace句を指定します。P表は索引構成表であるため、指定するstorage句は、このタイプの表に適切である必要があります。


記憶域デフォルト動作

デフォルトでは、BASIC_STORAGE属性は設定されていません。このような場合は、索引所有者のデフォルト表領域にテキスト索引表が作成されます。ユーザーIUSERによって発行され、BASIC_STORAGE属性が設定されていない次の文について考えます。

create index IOWNER.idx on TOWNER.tab(b) indextype is ctxsys.context;

この例では、テキスト索引はIOWNERのデフォルトの表領域に作成されます。

記憶域の例

次の例では、索引表が1KBの初期エクステントでfoo表領域に作成されるように指定します。

begin
ctx_ddl.create_preference('mystore', 'BASIC_STORAGE');
ctx_ddl.set_attribute('mystore', 'I_TABLE_CLAUSE',
                        'tablespace foo storage (initial 1K)');
ctx_ddl.set_attribute('mystore', 'K_TABLE_CLAUSE',
                        'tablespace foo storage (initial 1K)');
ctx_ddl.set_attribute('mystore', 'R_TABLE_CLAUSE',
                        'tablespace users storage (initial 1K) lob
                         (data) store as (disable storage in row cache)');
ctx_ddl.set_attribute('mystore', 'N_TABLE_CLAUSE',
                        'tablespace foo storage (initial 1K)');
ctx_ddl.set_attribute('mystore', 'I_INDEX_CLAUSE',
                        'tablespace foo storage (initial 1K) compress 2');
ctx_ddl.set_attribute('mystore', 'P_TABLE_CLAUSE',
                        'tablespace foo storage (initial 1K)');
end;

セクション・グループ型

ドキュメント・セクションに対してWITHIN問合せを発行するには、セクションを定義する前に、セクション・グループを作成する必要があります。セクション・グループは、CREATE INDEXのPARAMETERS句で指定します。

セクション・グループを作成する場合は、CTX_DDL.CREATE_SECTION_GROUPプロシージャを使用して次のグループ・タイプのいずれかを指定できます。

表2-35 セクション・グループ型

データ型 説明
NULL_SECTION_GROUP どのセクションも定義しないか、またはSENTENCEかPARAGRAPHセクションのみを定義する場合は、このグループ・タイプを使用します。これはデフォルトです。
BASIC_SECTION_GROUP このグループ・タイプを使用して、開始および終了タグが<A>および</A>という形式のセクションを定義します。

注意: このグループ・タイプでは、対になっていないカッコ、コメント・タグおよび属性などの入力はサポートされません。これらを入力するには、HTML_SECTION_GROUPを使用してください。

HTML_SECTION_GROUP このグループ・タイプを使用して、HTMLドキュメントを索引付けし、HTMLドキュメントのセクションを定義します。
XML_SECTION_GROUP このグループ・タイプを使用して、XMLドキュメントを索引付けし、XMLドキュメントのセクションを定義します。索引付けされるセクションはすべて、このグループに対して手動で定義する必要があります。
AUTO_SECTION_GROUP このグループ・タイプを使用して、XMLドキュメントの開始タグ/終了タグに対して自動的にゾーン・セクションを作成します。XMLタグから導出されるセクション名は、XML内と同様に大/小文字が区別されます。

属性セクションは、属性を持つXMLタグに対して自動的に作成されます。属性セクションは、tag@attributeという形式でネーミングされます。

停止セクション、空のタグ、処理命令およびコメントは、索引付けされません。

自動セクション・グループには次の制限事項が適用されます。

  • ゾーン、フィールドまたは特殊セクションは、自動セクション・グループに追加できません。

  • 特定の1つの型のみに適用される停止セクションを定義できます。つまり、2つの異なるXML DTDがある場合、両方のXML DTDがFOOと呼ばれるタグを使用するため、(TYPE1)FOOが停止され、(TYPE2)FOOは停止されないように定義できます。

  • プリフィックスおよび名前空間を含む、索引付けされたタグの長さは、64バイト以下です。これより長いタグは索引付けされません。

PATH_SECTION_GROUP このグループ・タイプを使用して、XMLドキュメントを索引付けします。このタイプは、AUTO_SECTION_GROUPと同じように動作します。

相違点は、このセクション・グループを使用すると、INPATHおよびHASPATH演算子でパス検索を実行できることです。タグまたは属性名の問合せでは、大/小文字が同様に区別されます。停止セクションは使用できません。

NEWS_SECTION_GROUP このグループ・タイプを使用して、RFC 1036に従ったニュース・グループ形式のドキュメントのセクションを定義します。

セクション・グループの例

次に、HTMLドキュメントとXMLドキュメントの両方でセクション・グループを使用する例を示します。

HTMLドキュメントのセクション・グループの作成

次の文は、HTMLグループ・タイプを使用してhtmgroupというセクション・グループを作成します。

begin
ctx_ddl.create_section_group('htmgroup', 'HTML_SECTION_GROUP');
end;

CTX_DDLパッケージでCTX_DDL.ADD_SPECIAL_SECTIONプロシージャまたはCTX_DDL.ADD_ZONE_SECTIONプロシージャを使用して、このグループにオプションでセクションを追加できます。ドキュメントを索引付けするには、次の文を発行します。

create index myindex on docs(htmlfile) indextype is ctxsys.context
parameters('filter ctxsys.null_filter section group htmgroup');

関連項目

セクション・グループの詳細は、第7章「CTX_DDLパッケージ」を参照してください。

XMLドキュメントのセクション・グループの作成

次の文は、XML_SECTION_GROUPグループ・タイプを使用してxmlgroupというセクション・グループを作成します。

begin
ctx_ddl.create_section_group('xmlgroup', 'XML_SECTION_GROUP');
end;

CTX_DDLパッケージでCTX_DDL.ADD_ATTR_SECTIONプロシージャまたはCTX_DDL.ADD_STOP_SECTIONプロシージャを使用して、このグループにオプションでセクションを追加できます。ドキュメントを索引付けするには、次の文を発行します。

create index myindex on docs(htmlfile) indextype is ctxsys.context
parameters('filter ctxsys.null_filter section group xmlgroup');

関連項目

セクション・グループの詳細は、第7章「CTX_DDLパッケージ」を参照してください。

XMLドキュメントの自動セクション化

次の文は、AUTO_SECTION_GROUPグループ・タイプを使用してautoというセクション・グループを作成します。このセクション・グループによって、XMLドキュメントのタグから自動的にセクションが作成されます。

begin
ctx_ddl.create_section_group('auto', 'AUTO_SECTION_GROUP');
end;

CREATE INDEX myindex on docs(htmlfile) INDEXTYPE IS ctxsys.context
PARAMETERS('filter ctxsys.null_filter section group auto');

分類型

この項では、CTX_CLS.TRAINおよびCTXRULE索引作成のプリファレンスの作成に使用する分類型について説明します。次の2つの分類型がサポートされています。

RULE_CLASSIFIER

RULE_CLASSIFIER型を使用して、問合せルール生成プロシージャCTX_CLS.TRAINおよびCTXRULE作成のプリファレンスを作成します。この型を使用して生成されるルールは基本的に問合せ文字列で、簡単に調べることができます。この分類によって生成された問合せは、AND、NOTまたはABOUT演算子を使用できます。WITHIN演算子は、フィールド・セクションに対する問合せの場合のみサポートされています。

この型の属性は、次のとおりです。

表2-36 RULE_CLASSIFIER属性

属性 データ型 デフォルト 最小値 最大値 説明
THRESHOLD I 50 1 99 ルール生成のしきい値(パーセント)を指定します。ルールは、その信頼度レベルがしきい値を超えた場合のみ出力されます。
MAX_TERMS I 100 20 2000 各クラスについて、関連語句のリストがルール生成のために選択されます。各クラスについて選択可能な語句の最大数を指定します。
MEMORY_SIZE I 500 10 4000 トレーニング用のメモリー使用量(MB)を指定します。大きい値を指定すると、パフォーマンスが向上します。
NT_THRESHOLD F 0.001 0 0.90 語句選択のしきい値を指定します。関連語句を選択する際の2つのステップを導く2つのしきい値があります。このしきい値は、最初のステップの動作を制御します。このステップでは候補語句が選択されます。この候補語句は、次のステップでさらに検討されます。トレーニング・セット内のドキュメント数に対する語句の出現頻度の割合がこのしきい値を超えた場合に、その語句が選択されます。
TERM_THRESHOLD I 10 0 100 語句選択のしきい値(パーセント)を指定します。このしきい値は、2番目のステップの語句選択を制御します。各候補語句には、特定クラスとの相関関係を示す計算された数量があります。クラス内の全候補語句の最大値に対するこの数量値の割合がこのしきい値を超えた場合のみ、候補語句がそのクラスに対して選択されます。
PRUNE_LEVEL I 75 0 100 対象を広げるために、組込みの決定ツリーを削除する範囲を指定します。大きい値を指定すると、積極的に削除が行われ、生成されたルールの範囲が広くなりますが、精度は下がります。

SVM_CLASSIFIER

SVM_CLASSIFIER型を使用して、ルール生成プロシージャCTX_CLS.TRAINおよびCTXRULE作成のプリファレンスを作成します。この分類型は、分類のサポート・ベクター・マシン方法を表しており、バイナリ形式のルールを生成します。高精度の分類が必要な場合は、この分類型を使用します。

この型の属性は、次のとおりです。

表2-37 SVM_CLASSIFIER属性

属性名 データ型 デフォルト 最小値 最大値 説明
MAX_DOCTERMS I 50 10 8192 1つのドキュメントを表す語句の最大数を指定します。
MAX_FEATURES I 3,000 1 100,000 個別の機能の最大数を指定します。
THEME_ON B FALSE NULL NULL テーマを機能として使用するには、TRUEを指定します。

テーマを使用した分類では、ナレッジ・ベースがインストールされている必要があります。ナレッジ・ベースは、Oracle Textとともにインストールされていない場合があります。ナレッジ・ベースの詳細は、『Oracle Textアプリケーション開発者ガイド』を参照してください。

TOKEN_ON B TRUE NULL NULL 通常のトークンを機能として使用するには、TRUEを指定します。
STEM_ON B FALSE NULL NULL ステミングされたトークンを機能として使用するには、TRUEを指定します。これは、レクサーに対してINDEX_STEMをオンにしている場合のみ機能します。
MEMORY_SIZE I 500 10 4000 おおよそのメモリー・サイズ(MB)を指定します。
SECTION_WEIGHT 1 2 0 100 フィールド・セクションに通常の語として語句を追加するために、出現頻度の乗数を指定します。たとえば、デフォルトでは、"<A>cat</A>"のcatという語はフィールド・セクション語句で、出現頻度が2である通常の語として扱われるように指定できますが、上限は100まで可能です。SECTION_WEIGHTは、索引ポリシーがフィールド・セクションを指定する場合のみ有効です。

クラスタ型

この項では、CTX_CLS.CLUSTERINGプロシージャのプリファレンスの作成に使用するクラスタ型について説明します。


関連項目

クラスタ化の詳細は、第6章「CTX_CLSパッケージ」「CLUSTERING」、および『Oracle Textアプリケーション開発者ガイド』を参照してください。

KMEAN_CLUSTERING

このクラスタリングの型の属性は、次のとおりです。

表2-38 KMEAN_CLUSTERING属性

属性名 データ型 デフォルト 最小値 最大値 説明
MAX_DOCTERMS I 50 10 8192 1つのドキュメントを表す個別の語句の最大数を指定します。
MAX_FEATURES I 3,000 1 500,000 個別の機能の最大数を指定します。
THEME_ON B FALSE NULL NULL テーマを機能として使用するには、TRUEを指定します。

テーマを使用したクラスタリングでは、ナレッジ・ベースがインストールされている必要があります。ナレッジ・ベースは、Oracle Textとともにインストールされていない場合があります。ナレッジ・ベースの詳細は、『Oracle Textアプリケーション開発者ガイド』を参照してください。

TOKEN_ON B TRUE NULL NULL 通常のトークンを機能として使用するには、TRUEを指定します。
STEM_ON B FALSE NULL NULL ステミングされたトークンを機能として使用するには、TRUEを指定します。これは、レクサーに対してINDEX_STEMをオンにしている場合のみ機能します。
MEMORY_SIZE I 500 10 4000 おおよそのメモリー・サイズ(MB)を指定します。
SECTION_WEIGHT 1 2 0 100 フィールド・セクションに通常の語として語句を追加するために、出現頻度の乗数を指定します。たとえば、デフォルトでは、"<A>cat</A>"のcatという語はフィールド・セクション語句で、出現頻度が2である通常の語として扱われるように指定できますが、上限は100まで可能です。SECTION_WEIGHTは、索引ポリシーがフィールド・セクションを指定する場合のみ有効です。
CLUSTER_NUM I 200 2 20000 生成されるリーフ・クラスタの合計数を指定します。

ストップリスト

ストップリストによって、言語にある索引付けしないワードが識別されます。英語の場合、索引付けしないストップテーマも識別できます。デフォルトでは、データベースの言語に対応してシステムが提供するストップリストを使用して、テキストの索引付けが行われます。

Oracle Textでは、英語、フランス語、ドイツ語、スペイン語、中国語、オランダ語およびデンマーク語を含むほとんどの言語に対して、デフォルトのストップリストが提供されています。これらのデフォルト・ストップリストには、ストップワードのみが含まれます。


関連項目

提供されるデフォルトのストップリストの詳細は、付録E「Oracle Textで提供されるストップリスト」を参照してください。

マルチ言語のストップリスト

言語固有のストップワードを保持するマルチ言語のストップリストを作成できます。マルチ言語のストップリストは、MULTI_LEXERを使用した英語、ドイツ語および日本語などの異なる言語のドキュメントを含む表の索引付けに有効です。

マルチ言語のストップリストを作成するには、CTX_DLL.CREATE_STOPLISTプロシージャを使用して、MULTI_STOPLISTというストップリスト・タイプを指定します。CTX_DDL.ADD_STOPWORDを使用して言語固有のストップワードを追加します。

索引付け時に、各ドキュメントの言語列が調べられ、その言語のストップワードのみが排除されます。問合せ時に、セッション言語の設定によって、アクティブなストップワードが特定されます。これは、マルチレクサーの使用時にアクティブなレクサーが特定されるのと同様です。

ストップリストの作成

CTX_DLL.CREATE_STOPLISTプロシージャを使用して、独自のストップリストを作成できます。このプロシージャを使用すると、単一言語ストップリストのBASIC_STOPLISTまたはマルチ言語ストップリストのMULTI_STOPLISTを作成できます。

独自のストップリストを作成して使用する場合は、このリストをCREATE INDEXのPARAMETERS句に指定する必要があります。

デフォルトのストップリストの変更

デフォルトのストップリストは、常にCTXSYS.DEFAULT_STOPLISTという名前です。このストップリストを変更するには、次のプロシージャを使用します。

CTX_DDLパッケージを使用してCTXSYS.DEFAULT_STOPLISTを変更した場合は、変更を有効にするために索引を再作成する必要があります。

ストップワードの動的な追加

ALTER INDEXを使用して、ストップワードをデフォルトまたはカスタムのストップリストに動的に追加できます。ストップワードを動的に追加する場合、ワードはすぐにストップワードになり、索引から削除されるため、再索引付けする必要はありません。


注意:

ストップワードは、索引に動的に追加できますが、動的に削除することはできません。ストップワードを削除するには、CTX_DDL.REMOVE_STOPWORDを使用して索引を削除してから、再索引付けする必要があります。

システム定義プリファレンス

Oracle Textをインストールすると、いくつかの索引付けプリファレンスが作成されます。CREATE INDEXのPARAMETERS句にこれらの索引付けプリファレンスを使用することができるほか、独自に定義することもできます。

デフォルトの索引パラメータは、この項で説明するシステム定義プリファレンスのいくつかにマップされます。


関連項目

デフォルトの索引パラメータの詳細は、「デフォルトの索引付けパラメータ」を参照してください。

システム定義のプリファレンスは、次のカテゴリに分類されています。

データ記憶域

この項では、データ記憶域プリファレンスに関連付けられた型について説明します。

CTXSYS.DEFAULT_DATASTORE

このプリファレンスは、DIRECT_DATASTORE型を使用します。このプリファレンスを使用すると、テキストが列に直接格納されているテキスト列に対して索引を作成できます。

CTXSYS.FILE_DATASTORE

このプリファレンスは、FILE_DATASTORE型を使用します。

CTXSYS.URL_DATASTORE

このプリファレンスは、URL_DATASTORE型を使用します。

フィルタ

この項では、フィルタ処理プリファレンスに関連付けられた型について説明します。

CTXSYS.NULL_FILTER

このプリファレンスは、NULL_FILTER型を使用します。

CTXSYS.AUTO_FILTER

このプリファレンスは、AUTO_FILTER型を使用します。

レクサー

この項では、レクサー・プリファレンスに関連付けられた型について説明します。

CTXSYS.DEFAULT_LEXER

デフォルトのレクサーは、インストール時に使用した言語によって異なります。次の項では、各言語のCTXSYS.DEFAULT_LEXERのデフォルト設定について説明します。

アメリカ英語およびイギリス英語での設定

使用言語が英語の場合、このプリファレンスはindex_themes属性を使用禁止にしてBASIC_LEXERを使用します。

デンマーク語での設定

使用言語がデンマーク語の場合、このプリファレンスは次のオプションを使用可能にしてBASIC_LEXERを使用します。

  • 代替スペル(alternate_spelling属性をDANISHに設定)

オランダ語での設定

使用言語がオランダ語の場合、このプリファレンスは次のオプションを使用可能にしてBASIC_LEXERを使用します。

  • コンポジット索引付け(composite属性をDUTCHに設定)

ドイツ語およびドイツ工業規格(DIN)での設定

使用言語がドイツ語の場合、このプリファレンスは次のオプションを使用可能にしてBASIC_LEXERを使用します。

  • 大/小文字が区別される索引付け(mixed_case属性を使用可能)

  • コンポジット索引付け(composite属性をGERMANに設定)

  • 代替スペル(alternate_spelling属性をGERMANに設定)

フィンランド語、ノルウェー語およびスウェーデン語での設定

使用言語がフィンランド語、ノルウェー語またはスウェーデン語の場合、このプリファレンスは次のオプションを使用可能にしてBASIC_LEXERを使用します。

  • 代替スペル(alternate_spelling属性をSWEDISHに設定)

日本語での設定

使用言語が日本語の場合、このプリファレンスはJAPANESE_VGRAM_LEXERを使用します。

韓国語での設定

使用言語が韓国語の場合、このプリファレンスはKOREAN_MORPH_LEXERを使用します。KOREAN_MORPH_LEXER用のすべての属性が使用可能になります。

中国語での設定

使用言語が中国語(簡体字または繁体字)の場合、このプリファレンスはCHINESE_VGRAM_LEXERを使用します。

その他の言語

この項に記載していないその他の言語については、このプリファレンスは、属性を設定せずにBASIC_LEXERを使用します。


関連項目

これらのオプションの詳細は、「BASIC_LEXER」を参照してください。

CTXSYS.BASIC_LEXER

このプリファレンスは、BASIC_LEXERを使用します。

セクション・グループ

この項では、セクション・グループ・プリファレンスに関連付けられた型について説明します。

CTXSYS.NULL_SECTION_GROUP

このプリファレンスは、NULL_SECTION_GROUP型を使用します。

CTXSYS.HTML_SECTION_GROUP

このプリファレンスは、HTML_SECTION_GROUP型を使用します。

CTXSYS.AUTO_SECTION_GROUP

このプリファレンスは、AUTO_SECTION_GROUP型を使用します。

CTXSYS.PATH_SECTION_GROUP

このプリファレンスは、PATH_SECTION_GROUP型を使用します。

ストップリスト

この項では、ストップリスト・プリファレンスに関連付けられた型について説明します。

CTXSYS.DEFAULT_STOPLIST

このストップリスト・プリファレンスは、使用するデータベース言語のストップリストをデフォルトに設定します。


関連項目

提供されるストップリストのストップ・ワードの完全なリストは、付録E「Oracle Textで提供されるストップリスト」を参照してください。

CTXSYS.EMPTY_STOPLIST

このストップリストにはワードがありません。

記憶域

この項では、記憶域プリファレンスに関連付けられた型について説明します。

CTXSYS.DEFAULT_STORAGE

このプリファレンスは、BASIC_STORAGE型を使用します。

ワードリスト

この項では、ワードリスト・プリファレンスに関連付けられた型について説明します。

CTXSYS.DEFAULT_WORDLIST

このプリファレンスは、使用するデータベース言語に対して言語ステマーを使用します。使用している言語が表2-32に記載されていない場合、このプリファレンスは、NULLステマーおよびGENERICファジー・マッチング属性にデフォルト設定されます。

システム・パラメータ

この項では、Oracle Textのシステム・パラメータを説明します。システム・パラメータは次のカテゴリに分類されます。

汎用システム・パラメータ

Oracle Textをインストールすると、システム定義プリファレンスの他に、次のシステム・パラメータが設定されます。

表2-39 汎用システム・パラメータ

システム・パラメータ 説明
MAX_INDEX_MEMORY CREATE INDEXおよびALTER INDEXのPARAMETERS句に指定できる最大の索引付けメモリー。
DEFAULT_INDEX_MEMORY CREATE INDEXおよびALTER INDEXとともに使用されるデフォルトの索引付けメモリー。
LOG_DIRECTORY CTX_OUTPUTログ・ファイル用のディレクトリ。
CTX_DOC_KEY_TYPE CTX_DOCプロシージャに対するデフォルト入力キー・タイプ(ROWIDまたはPRIMARY_KEYのいずれか)。インストール時にROWIDに設定されます。

関連項目: 「CTX_DOC. SET_KEY_TYPE


システムのデフォルト値は、CTX_PARAMETERSビューを問い合せると表示できます。デフォルトは、CTX_ADM.SET_PARAMETERプロシージャを使用して変更できます。

デフォルトの索引付けパラメータ

この項では、CONTEXT索引およびCTXCAT索引の作成時に使用できる索引パラメータを説明します。

CONTEXT索引のパラメータ

次のデフォルトのパラメータは、CONTEXT索引の作成時にCREATE INDEXのPARAMETERS句にプリファレンスを指定しない場合に使用されます。デフォルトの各パラメータによって、データ記憶域、フィルタ処理、レクサー処理などに使用するためにシステム定義プリファレンスが指定されます。

表2-40 デフォルトのCONTEXT索引のパラメータ

パラメータ 使用される場合 デフォルト値
DEFAULT_DATASTORE CREATE INDEXのPARAMETERS句にデータストア・プリファレンスが指定されていない場合 CTXSYS.DEFAULT_DATASTORE
DEFAULT_FILTER_FILE CREATE INDEXのPARAMETERS句にフィルタ・プリファレンスが指定されておらず、次の条件のいずれかに該当する場合
  • ファイルが外部ファイル(BFILE)に格納されている。

  • FILE_DATASTOREを使用するデータストア・プリファレンスが指定されている。

CTXSYS.AUTO_FILTER
DEFAULT_FILTER_BINARY CREATE INDEXのPARAMETERS句にフィルタ・プリファレンスが指定されておらず、Oracle Textによりテキスト列のデータ型がRAWLONG RAWまたはBLOBであることが検出された場合 CTXSYS.AUTO_FILTER
DEFAULT_FILTER_TEXT CREATE INDEXのPARAMETERS句にフィルタ・プリファレンスが指定されておらず、Oracle Textによりテキスト列のデータ型がLONGVARCHAR2VARCHARCHARまたはCLOBのいずれかであることが検出された場合 CTXSYS.NULL_FILTER
DEFAULT_SECTION_HTML CREATE INDEXのPARAMETERS句にセクション・グループが指定されておらず、次の条件のいずれかに該当する場合
  • データストア・プリファレンスにURL_DATASTOREを使用している。

  • フィルタ・プリファレンスにAUTO_FILTERを使用している。

CTXSYS.HTML_SECTION_GROUP
DEFAULT_SECTION_TEXT CREATE INDEXのPARAMETERS句にセクション・グループが指定されておらず、URL_DATASTOREおよびAUTO_FILTERのいずれも使用していない場合 CTXSYS.NULL_SECTION_GROUP
DEFAULT_STORAGE CREATE INDEXのPARAMETERS句に記憶域プリファレンスが指定されていない場合 CTXSYS.DEFAULT_STORAGE
DEFAULT_LEXER CREATE INDEXのPARAMETERS句にレクサー・プリファレンスが指定されていない場合 CTXSYS.DEFAULT_LEXER
DEFAULT_STOPLIST CREATE INDEXのPARAMETERS句にストップリスト・プリファレンスが指定されていない場合 CTXSYS.DEFAULT_STOPLIST
DEFAULT_WORDLIST CREATE INDEXのPARAMETERS句にワードリスト・プリファレンスが指定されていない場合 CTXSYS.DEFAULT_WORDLIST

CTXCAT索引のパラメータ

次のデフォルトの各パラメータは、CREATE INDEXを使用したCTXCAT索引の作成時に、そのパラメータ文字列にパラメータを指定しない場合に使用されます。CTXCAT索引は、索引セット、レクサー、記憶域、ストップリストおよびワードリストのパラメータのみをサポートしています。デフォルトの各パラメータによって、システム定義プリファレンスが指定されます。

表2-41 デフォルトのCTXCAT索引のパラメータ

パラメータ 使用される場合 デフォルト値
DEFAULT_CTXCAT_INDEX_SET CREATE INDEXのPARAMETERS句に索引セットが指定されていない場合
DEFAULT_CTXCAT_STORAGE CREATE INDEXのPARAMETERS句に記憶域プリファレンスが指定されていない場合 CTXSYS.DEFAULT_STORAGE
DEFAULT_CTXCAT_LEXER CREATE INDEXのPARAMETERS句にレクサー・プリファレンスが指定されていない場合 CTXSYS.DEFAULT_LEXER
DEFAULT_CTXCAT_STOPLIST CREATE INDEXのPARAMETERS句にストップリスト・プリファレンスが指定されていない場合 CTXSYS.DEFAULT_STOPLIST
DEFAULT_CTXCAT_WORDLIST CREATE INDEXのPARAMETERS句にワードリスト・プリファレンスが指定されていない場合

CTXCAT索引にワードリスト・プリファレンスを指定することはできますが、CATSEARCH問合せ言語ではワイルド・カード、ファジーおよびステミングをサポートしていないため、ほとんどの属性は適用されません。有効な唯一の属性は、日本語データに対するPREFIX_INDEXです。

CTXSYS.DEFAULT_WORDLIST

CTXRULE索引のパラメータ

次のデフォルトの各パラメータは、CREATE INDEXを使用したCTXRULE索引の作成時に、そのパラメータ文字列にパラメータを指定しない場合に使用されます。CTXRULE索引は、レクサー、記憶域、ストップリストおよびワードリストのパラメータのみをサポートしています。デフォルトの各パラメータによって、システム定義プリファレンスが指定されます。

表2-42 デフォルトのCTXRULE索引のパラメータ

パラメータ 使用される場合 デフォルト値
DEFAULT_CTXRULE_LEXER CREATE INDEXのPARAMETERS句にレクサー・プリファレンスが指定されていない場合 CTXSYS.DEFAULT_LEXER
DEFAULT_CTXRULE_STORAGE CREATE INDEXのPARAMETERS句に記憶域プリファレンスが指定されていない場合 CTXSYS.DEFAULT_STORAGE
DEFAULT_CTXRULE_STOPLIST CREATE INDEXのPARAMETERS句にストップリスト・プリファレンスが指定されていない場合 CTXSYS.DEFAULT_STOPLIST
DEFAULT_CTXRULE_WORDLIST CREATE INDEXのPARAMETERS句にワードリスト・プリファレンスが指定されていない場合 CTXSYS.DEFAULT_WORDLIST
DEFAULT_CLASSIFIER PARAMETER句に分類プリファレンスが指定されていない場合 RULE_CLASSIFIER

デフォルト値の表示

システムのデフォルト値は、CTX_PARAMETERSビューを問い合せると表示できます。たとえば、すべてのパラメータと値を表示する場合は、次の文を発行します。

SQL> SELECT par_name, par_value from ctx_parameters;

デフォルト値の変更

CTX_ADM.SET_PARAMETERプロシージャを使用して、別のカスタム・プリファレンス名またはシステム定義プリファレンス名をデフォルト値として指定するように変更できます。