プライマリ・コンテンツに移動
Oracle® Textリファレンス
12cリリース1 (12.1)
B71316-03
目次へ移動
目次
索引へ移動
索引

前
次

2 Oracle Text索引付けの要素

Oracle Text索引を作成する際には、記憶域、フィルタ処理、プリファレンス、ストップリストの索引付けの型を使用することができます。

この章の項目は次のとおりです。

2.1 概要

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

プリファレンス・クラス 説明

データストア

ドキュメントの保存方法

フィルタ

ドキュメントのプレーン・テキストへの変換方法

レクサー

索引付けされる言語

ワードリスト

ステミング問合せおよびファジー問合せの拡張方法

記憶域

索引表の格納方法

ストップリスト

索引付けしないワードまたはテーマ

セクション・グループ

セクション内の問合せの使用可能化、およびドキュメント・セクションの定義方法

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

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

2.2 プリファレンスの作成

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

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

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

ストップリストを作成するには、CTX_DDL.CREATE_STOPLIST プロシージャを使用します。ストップリストにストップワードを追加するには、CTX_DDL.ADD_STOPWORDを使用します。

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

2.3 データストア型

データストア型を使用して、テキストの格納方法を指定します。データストア・プリファレンスを作成するには、表2-1で説明するデータストア型のうちいずれか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

ドキュメントが、索引付け時にユーザー定義ストアド・プロシージャによって合成されます。

2.3.1 DIRECT_DATASTORE

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

CHARVARCHARVARCHAR2BLOBCLOBBFILEXMLTypeおよびURITypeの列型がサポートされています。

注意:

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

次の例では、テキスト・データを格納する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');

2.3.2 MULTI_COLUMN_DATASTORE

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

2.3.2.1 MULTI_COLUMN_DATASTORE属性

MULTI_COLUMN_DATASTOREデータストアには、表2-2に示す属性があります。

表2-2 MULTI_COLUMN_DATASTORE属性

属性 属性値

columns

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

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

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

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

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

フィルタ

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

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

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

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

delimiter

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

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

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

2.3.2.2 索引付けとDML

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

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

2.3.2.3 MULTI_COLUMN_DATASTOREの制限事項

XMLType列を持つ複数列のデータストアは作成できません。MULTI_COLUMN_DATA_STOREでは、XMLTypeはサポートされていません。「Oracle TextのSQL文と演算子」で説明したように、XMLType列にはCONTEXT索引を作成できます。

2.3.2.4 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;

2.3.2.5 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のみがフィルタ処理されます。

2.3.2.6 タグ付けの動作

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

次に例を示します。

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>

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

タグをセクションとして索引付けするには、オプションで、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>

2.3.3 DETAIL_DATASTORE

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

2.3.3.1 DETAIL_DATASTORE属性

DETAIL_DATASTORE型には、表2-3に示す属性があります。

表2-3 DETAIL_DATASTORE属性

属性 属性値

binary

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

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

detail_table

ディテール表の名前(必要な場合はOWNER.TABLE)を指定します。

detail_key

ディテール表の外部キー列の名前を指定します。

detail_lineno

ディテール表の順序列の名前を指定します。

detail_text

ディテール表のテキスト列の名前を指定します。

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

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

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

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

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

2.3.3.3.1 マスター表の例

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

列名 列型 説明

article_id

NUMBER

各ドキュメントに一意のドキュメントID(主キー)

author

VARCHAR2(30)

ドキュメントの作成者

title

VARCHAR2(50)

ドキュメントのタイトル

body

CHAR(1)

CREATE INDEX内で指定するダミー列

注意:

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

2.3.3.3.2 ディテール表の例

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

列名 列型 説明

article_id

NUMBER

マスター表に関連するドキュメントID

seq

NUMBER

article_idで定義されるマスター表のドキュメント順序

text

VARCHAR2

ドキュメント・テキスト

2.3.3.3.3 ディテール表の例の属性

この例で、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;
2.3.3.3.4 マスター/ディテールの索引の例

このマスター/ディテールの関係で定義されたドキュメントを索引付けするには、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列を指定して索引を作成することもできます。ただし、これを指定すると、これらの列が変更された場合に、索引の再作成操作がトリガーされます。

2.3.4 FILE_DATASTORE

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

注意:

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

  • ファイル・データストアのキャラクタ・セットがデータベースのキャラクタ・セットとみなされます。

2.3.4.1 FILE_DATASTORE属性

FILE_DATASTORE型には、表2-4に示す属性があります。

表2-4 FILE_DATASTORE属性

属性 属性値

path

path1:path2:pathn

filename_charset

name

path

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

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

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

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

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

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

filename_charset

ファイル名を変換するためにファイル・データストアで使用する、有効なOracleキャラクタ・セット名(30文字以内)を指定します。通常、Oracle Databaseでは、オペレーティング・システムとは異なるキャラクタ・セットを使用できます。このため、索引付けされた列にオペレーティング・システムのキャラクタ・セットに変換できない文字が含まれている場合は、ファイルの検索で問題が発生する(DRG-11513エラーが発生する)可能性があります。デフォルトでは、ファイル・データストアはファイル名をWE8ISO8859p1(ASCIIプラットフォームの場合)またはWE8EBCDIC1047(EBCDICプラットフォームの場合)に変換します。

ただし、WE8ISO8859p1およびWE8EBCDIC1047ではマルチバイト文字がサポートされていないため、データベースとオペレーティング・システムの両方でマルチバイト・キャラクタ・セットを使用するアプリケーションについては、これでは対応できない場合があります。filename_charset属性によってこの問題を解決します。この属性を指定すると、データストアはデータベース・キャラクタ・セットを、ISO8859またはEBCDICではなく、指定のキャラクタ・セットに変換します。

filename_charset属性がデータベース・キャラクタ・セットと同じ場合は、そのファイル名がそのまま使用されます。filename_charsetが有効なキャラクタ・セットでない場合は、エラー「DRG-10763: 値%sは有効なキャラクタ・セットではありません」が発生します。

2.3.4.2 FILE_DATASTOREとセキュリティ

ファイル・データストアおよびURLデータストアを使用すると、実際のデータベース・ディスク上のファイルにアクセスできます。Oracleユーザーがアクセス可能なファイル・システムをすべてのユーザーが参照できるため、これは、セキュリティが重要な場合は望ましくありません。FILE_ACCESS_ROLEシステム・パラメータを使用すると、FILEまたはURLデータストアを使用して索引を作成する権限のあるデータベース・ロールの名前を設定できます。データベース・ロールを設定すると、FILEまたはURLデータストアを使用して索引を作成しようとするユーザーはこのロールが必要になり、このロールを持たないユーザーは索引の作成に失敗します。SYSだけがFILE_ACCESS_ROLEを設定できます。他のユーザーが変更しようとすると、エラーが発生します。FILE_ACCESS_ROLEがデフォルトのNULLの場合、アクセスできません。したがって、デフォルトで、ユーザーはファイルまたはURLデータストアを使用する索引を作成できません。以前のリリースの動作を保存する場合、ユーザーは必要に応じてFILE_ACCESS_ROLEPUBLICに設定できます。

たとえば、次の文でデータベース・ロールの名前を設定します。

ctx_adm.set_parameter('FILE_ACCESS_ROLE','TOPCAT');

TOPCATは、ファイル・データストアまたはURLデータストアを使用して索引を作成する権限があるロールです。権限が付与されたロールを持たないユーザーがファイル・データストアまたはURLデータストアを使用して索引を作成しようとすると、CREATE INDEX操作は失敗します。次に例を示します。

CREATE INDEX myindex ON mydocument(TEXT) INDEXTYPE IS ctxsys.context  PARAMETERS('DATASTORE ctxsys.file_datastore')

ここで、ユーザーがTOPCATロールを持たない場合は、索引作成が失敗してエラーが戻されます。ユーザーがTOPCATロールを持っている場合、索引作成は通常どおり処理されます。

データストアにアクセスするたびに、権限が付与されたロール名がチェックされます。これには、索引の作成、索引の同期化、CTX_DOC.HIGHLIGHTなどのドキュメント・サービスの呼出しが含まれます。

2.3.4.3 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'); 

2.3.5 URL_DATASTORE

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

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

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

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

2.3.5.1 URL_DATASTORE URL構文

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

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

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

http://mycomputer.us.example.com/home.html

注意:

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

この構文はRFC1738仕様に部分的に適合しているため、次の制限がURLの構文に適用されます。URLには、印字可能なASCII文字のみが含まれる必要があります。印字できないASCII文字およびマルチバイト文字は、% %xx 表記法でエスケープする必要があります。このxxは特殊文字の16進コードを表します。

2.3.5.2 URL_DATASTORE属性

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

表2-5 URL_DATASTORE属性

属性 属性値

timeout

この属性の値は無視されます。これは下位互換性の目的で提供されています。

maxthreads

この属性の値は無視されます。URL_DATASTOREはシングル・スレッドです。これは下位互換性の目的で提供されています。

urlsize

この属性の値は無視されます。これは下位互換性の目的で提供されています。

maxurls

この属性の値は無視されます。これは下位互換性の目的で提供されています。

maxdocsize

この属性の値は無視されます。これは下位互換性の目的で提供されています。

http_proxy

HTTPプロキシ・サーバーのホスト名を指定します。オプションで、hostname:portという形式でコロンを使用してポート番号を指定します。

ftp_proxy

FTPプロキシ・サーバーのホスト名を指定します。オプションで、hostname:portという形式でコロンを使用してポート番号を指定します。

no_proxy

非プロキシ・サーバーのドメインを指定します。カンマで区切られた文字列を使用して最大16個のドメイン名を指定します。

timeout

この属性の値は無視されます。これは下位互換性の目的で提供されています。

maxthreads

この属性の値は無視されます。URL_DATASTOREはシングル・スレッドです。これは下位互換性の目的で提供されています。

urlsize

この属性の値は無視されます。これは下位互換性の目的で提供されています。

maxdocsize

この属性の値は無視されます。これは下位互換性の目的で提供されています。

maxurls

この属性の値は無視されます。これは下位互換性の目的で提供されています。

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.example.comまたはuk.example.comという文字列を指定した場合、ホスト名にこのドメインのいずれかが含まれているコンピュータへのすべてのURL要求は、プロキシ・サーバーでは処理されません。

2.3.5.3 URL_DATASTOREとセキュリティ

ファイル・データストアおよびURLデータストアのファイル・アクセス・セキュリティを制御する方法については、「FILE_DATASTOREとセキュリティ」を参照してください。

2.3.5.4 URL_DATASTOREの例

この例では、URL_PREFというURL_DATASTOREプリファレンスを作成します。このプリファレンスには、http_proxyno_proxyおよびtimeout属性を設定します。属性を設定しない場合は、デフォルトが使用されます。

begin
 ctx_ddl.create_preference('URL_PREF','URL_DATASTORE');
 ctx_ddl.set_attribute('URL_PREF','HTTP_PROXY','www-proxy.us.example.com');
 ctx_ddl.set_attribute('URL_PREF','NO_PROXY','us.example.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.example.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' ); 

2.3.6 USER_DATASTORE

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

2.3.6.1 USER_DATASTORE属性

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パラメータにコピーされるためです。

プロシージャ

索引付けされるドキュメントを合成するプロシージャ名を指定します。この指定は、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が引数として渡されるたびに、procedureは、ドキュメントのテキストを2つ目の引数(output_typeで指定)に書き込む必要があります。

2.3.6.2 USER_DATASTORE制約

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

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

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

  • COMMITのようなトランザクション制御文またはDDLは入力できません。

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

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

output_type

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

2.3.6.4 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)に作成する場合、索引付け操作では、ドキュメント・テキストにある作成者およびタイトルが参照されます。

2.3.6.5 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;

2.3.7 NESTED_DATASTORE

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

2.3.7.1 NESTED_DATASTORE属性

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

表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_DATASTOREの例」を参照してください。

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

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

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

2.3.7.2 NESTED_DATASTOREの例

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

2.3.7.2.1 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;
2.3.7.2.2 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;
2.3.7.2.3 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;
2.3.7.2.4 NESTED TABLEへの索引の作成

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

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

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

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

2.4 フィルタ型

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

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

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

表2-8 フィルタ型

フィルタ 使用される場合

AUTO_FILTER

形式設定されたドキュメントのフィルタ処理用Autoフィルタです。

NULL_FILTER

フィルタ処理は必要ありません。プレーン・テキスト、HTMLまたはXMLドキュメントの索引付けに使用します。

MAIL_FILTER

MAIL_FILTERを使用して、RFC-822、RFC-2045メッセージを索引付け可能なテキストに変換します。

「USER_FILTER」

カスタム・フィルタ処理に使用するユーザー定義外部フィルタです。

PROCEDURE_FILTER

カスタム・フィルタ処理に使用するユーザー定義ストアド・プロシージャ・フィルタです。

2.4.1 AUTO_FILTER

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

関連項目:

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

注意:

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

2.4.1.1 AUTO_FILTER属性

AUTO_FILTERプリファレンスには、表2-9に示す属性があります。

表2-9 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による出力が増加した場合に、すべてのTIMEOUT秒をチェックする場合は、Oracle TextにHEURISTICを指定します。出力が増加していない場合、そのドキュメントに対する操作は終了します。エラーはCTX_USER_INDEX_ERRORSビューに記録され、操作は次の索引付け対象のドキュメント行に移動します。

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

output_formatting

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

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

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を使用してください。

2.4.1.3 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にフォーマット列を指定する必要はありません。

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

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

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

注意:

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

2.4.2 NULL_FILTER

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

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ドキュメントの索引付けの詳細は、「セクション・グループ型」を参照してください。

2.4.3 MAIL_FILTER

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

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

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

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

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

2.4.3.1 MAIL_FILTER属性

MAIL_FILTERには、表2-10に示す属性があります。

表2-10 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の例」を参照してください。

2.4.3.2 MAIL_FILTERの動作

このフィルタは、ドキュメントごとに次のように動作します。

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

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

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

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

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

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

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

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

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

    • image/*、audio/*、video/*、model/*: 無視されます。

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

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

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

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の指定がオーバーライドされ、デフォルトの動作がオーバーライドされます。動作は、INCLUDEAUTO_FILTERまたはIGNOREです(定義は「MAIL_FILTERフィルタの動作」を参照)。次に例を示します。

application/zip     IGNORE
application/msword  AUTO_FILTER
model               IGNORE

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

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

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

[charsets]

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

US-ASCII     US7ASCI
ISO-8859-1   WE8ISO8859P1

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

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

2.4.3.4 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をSubjectに設定し、最初に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

2.4.4 USER_FILTER

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

この項では、次の項目について説明します。

2.4.4.1 USER_FILTER属性

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

表2-11 USER_FILTER属性

属性 属性値

command

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

警告:

USER_FILTER型を使用するとき、セキュリティ上の潜在的な脅威があります。CTXAPPロールを付与されたデータベース・ユーザーが、USER_FILTERを使用して悪質なアプリケーションをロードする可能性があります。したがって、DBAは、システム・セキュリティを危険にさらすような実行可能なフィルタを有効にする入力と出力のファイル・パラメータの組合せに対して、保護手段を講じる必要があります。

コマンド

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

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

次の2つのパラメータで、ユーザー・フィルタ・コマンドを作成します。

  • 1つ目のパラメータは、読み取られる入力ファイルの名前です。

  • 2つ目のパラメータは、書き込まれる出力ファイルの名前です。

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

2.4.4.2 キャラクタ・セット列とフォーマット列を指定したUSER_FILTERの使用

USER_FILTERは、フィルタ処理を必要としないドキュメントをバイパスします。その動作は、フォーマット列とキャラクタ・セット列の値の影響を受けます。さらにUSER_FILTERは、キャラクタ・セット列の値に従ってキャラクタ・セット変換を実行します。

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

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

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

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

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

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

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

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

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

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

ctx_ddl.create_preference
   (
    preference_name => 'USER_FILTER_PREF',
    object_name     => 'USER_FILTER'
    );

ctx_ddl.set_attribute ('USER_FILTER_PREF', 'COMMAND', 'upcase.pl');

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

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

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

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

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

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

2.4.4.5 ユーザー・フィルタの例

次に、ユーザー・フィルタとして使用される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'); 

2.4.5 PROCEDURE_FILTER

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

この項では、次の項目について説明します。

2.4.5.1 PROCEDURE_FILTER属性

表2-12に、PROCEDURE_FILTERの属性を示します。

表2-12 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

プロシージャ

フィルタ処理に使用するストアド・プロシージャの名前を指定します。プロシージャには、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です。

2.4.5.2 PROCEDURE_FILTERパラメータの順序

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)

2.4.5.3 PROCEDURE_FILTERの実行要件

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

2.4.5.4 PROCEDURE_FILTERエラー処理

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

2.4.5.5 PROCEDURE_FILTERプリファレンスの例

次のシグネチャを使用して定義するフィルタ・プロシージャ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;

2.5 レクサー型

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

表2-13 レクサー型

データ型 説明

AUTO_LEXER

異なる複数言語のドキュメントを含む列の索引付けに使用するレクサー。

BASIC_LEXER

空白のデリミタ付きワードを使用する英語およびほとんどのヨーロッパ言語で、テキストからのトークンの抽出に使用するレクサー。

MULTI_LEXER

英語、ドイツ語および日本語など、異なる複数言語のドキュメントを含む表の索引付けに使用するレクサー。

CHINESE_VGRAM_LEXER

中国語テキストからのトークンの抽出に使用するレクサー。

CHINESE_LEXER

中国語テキストからのトークンの抽出に使用するレクサー。このレクサーは、CHINESE_VGRAMレクサーと比較して次の利点があります。

  • 小型の索引の生成

  • 問合せ応答時間の短縮

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

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

JAPANESE_VGRAM_LEXER

日本語テキストからのトークンの抽出に使用するレクサー。

JAPANESE_LEXER

日本語テキストからのトークンの抽出に使用するレクサー。このレクサーは、JAPANESE_VGRAMレクサーと比較して次の利点があります。

  • 小型の索引の生成

  • 問合せ応答時間の短縮

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

KOREAN_MORPH_LEXER

韓国語テキストからのトークンの抽出に使用するレクサー。

USER_LEXER

特定言語を索引付けするために作成するレクサー。

WORLD_LEXER

異なる複数言語のドキュメントを含む表の索引付けに使用する、ドキュメントの言語を自動検出するレクサー。

2.5.1 AUTO_LEXER

AUTO_LEXER型は、異なる複数の言語のドキュメントを含む列の索引付けに使用します。言語の識別、単語のセグメント化、ドキュメントの分析、ステミングを実行します。AUTO_LEXERでは、これらのコンポーネントのカスタマイズも可能です。AUTO_LEXERによって生成される品詞情報は公開されないのでユーザーが使用することはできませんが、AUTO_LEXERによって状況依存またはタグ付きのステミングに使用されます。

この項では、次の項目について説明します。

2.5.1.1 AUTO_LEXER言語サポート

索引付け時に、AUTO_LEXERはドキュメントの言語を自動的に識別し、ドキュメントを適切にトークン化およびステミングします。AUTO_LEXERディクショナリを指定するには、ディクショナリのファイル名ではなく、作成したディクショナリの名前を使用します。

問合せ時には、問合せの言語が問合せテンプレートから継承されます。問合せテンプレートを使用しない場合、または問合せテンプレートで言語が指定されていない場合、問合せの言語はセッション言語から継承されます。表2-14に、サポートされている言語を示します。

注意:

ディクショナリ・データは、索引/ポリシーの作成時またはALTER INDEX時以降に処理されることに注意してください。ディクショナリ・データ形式のエラーは、索引/ポリシーの作成時またはALTER INDEX時に検出され、「DRG-13710: ディクショナリの構文エラー」のエラーとしてレポートされます。

表2-14 AUTO_LEXERでサポートされている言語

言語 言語

アラビア語

ノルウェー語(ニーノシュク)

ノルウェー語(ブークモール)

ペルシア語

クロアチア語

セルビア語

デンマーク語

スロバキア語

フィンランド語

スロベニア語

ヘブライ語

タイ語

カタロニア語

韓国語

チェコ語

ポーランド語

オランダ語

ポルトガル語

英語

ルーマニア語

フランス語

ロシア語

ドイツ語

中国語(簡体字) (注意を参照)

ギリシャ語

スペイン語

ハンガリー語

スウェーデン語

イタリア語

中国語(繁体字) (注意を参照)

日本語

トルコ語

注意:

文字列が30文字に制限されているため、中国語(繁体字)はtrad_chineseと指定する必要があります。中国語(簡体字)はsimp_chineseと指定します。

2.5.1.2 BASIC_LEXERから継承したAUTO_LEXER属性

AUTO_LEXERでは、次の属性はBASIC_LEXERの対応する属性と同じ方法で使用し、同じ効果があります。

  • printjoin

  • skipjoin

  • base_letter

  • base_letter_type

  • override_base_letter

  • mixed_case

  • alternate_spelling

関連項目:

「BASIC_LEXER」表2-19

2.5.1.3 言語に依存しないAUTO_LEXER属性

表2-15に、AUTO_LEXERで使用可能な、言語に依存しない属性を示します。

表2-15 言語に依存しないAUTO_LEXER属性

属性 属性値 説明

language

<characters>(空白で区切られた文字列)

入力ドキュメントの可能な言語を指定します。

言語を指定しないと、AUTO_LEXERは自動識別を実行しません。

1つの言語を指定した場合は、その言語が手動で設定され、AUTO_LEXERは自動識別を実行しません。

複数の言語を指定した場合、AUTO_LEXERは自動識別を実行しますが、識別する言語は指定した言語に限定されます。

注意: 言語の自動識別は統計に基づくため、本質的に不完全です。

deriv_stems

NO(使用禁止)

派生語のステミングを使用するかどうかを指定します。現在、派生語のステミングは英語でのみ使用可能です。したがって、それ以外の言語ではDERIV_STEMSは影響を与えません。

また、派生語のステミングが実行されると、タグ付けおよびタグ・ステミングは使用されません。その結果、タグ付けおよびタグ付きステミングのクライアント・ディクショナリは、ステミング結果に影響を与えません。

deriv_stems

YES(デフォルト)

派生語のステミングを使用するかどうかを指定します。現在、派生語のステミングは英語でのみ使用可能です。したがって、それ以外の言語ではDERIV_STEMSは影響を与えません。

また、派生語のステミングが実行されると、タグ付けおよびタグ・ステミングは使用されません。その結果、タグ付けおよびタグ付きステミングのクライアント・ディクショナリは、ステミング結果に影響を与えません。

german_decompound

NO(使用禁止)

ステマーでドイツ語の非コンパウンド化を実行するかどうかを指定します。

german_decompound

YES(デフォルト、ドイツ語のみで使用可能)

ステマーでドイツ語の非コンパウンド化を実行するかどうかを指定します。

index_stems

NO(使用禁止)

索引ステマーを使用するかどうかを指定します。

YESに指定すると、ドキュメント言語に対応するステマーが使用され、ドキュメントの再コールを最大化するようにステマーが常に構成されます。つまり、指定の問合せ語句の語幹を判断する問合せの際には、BASIC_WORDLISTのstemmer属性が無視され、AUTO_LEXERが使用するステマーが使用されるということです。

NOに指定すると、STEM演算子を使用する問合せでは、ワード・リスト・ステミングを使用してトークンのステミングを行います。ワード・リスト・ステミングが使用できない場合、STEM演算子は無視されます。

スウェーデン語およびオランダ語のドキュメントの場合、index_stemsをYESに設定すると、コンパウンド・ワード・ステミングが自動的に実行され、コンパウンドは常にコンポーネント語幹に分割されます。

index_stems

YES(デフォルト)

索引ステマーを使用するかどうかを指定します。

YESに指定すると、ドキュメント言語に対応するステマーが使用され、ドキュメントの再コールを最大化するようにステマーが常に構成されます。つまり、指定の問合せ語句の語幹を判断する問合せの際には、BASIC_WORDLISTのstemmer属性が無視され、AUTO_LEXERが使用するステマーが使用されるということです。

NOに指定すると、STEM演算子を使用する問合せでは、ワード・リスト・ステミングを使用してトークンのステミングを行います。ワード・リスト・ステミングが使用できない場合、STEM演算子は無視されます。

スウェーデン語およびオランダ語のドキュメントの場合、index_stemsをYESに設定すると、コンパウンド・ワード・ステミングが自動的に実行され、コンパウンドは常にコンポーネント語幹に分割されます。

base_letter

NO(使用禁止)

発音区別記号(ウムラウト、セディーユ、揚音アクセントなど)を持つ文字を、テキスト索引に格納する前に、基本形に変換するかどうかを指定します。

base_letter

YES(使用可能)

発音区別記号(ウムラウト、セディーユ、揚音アクセントなど)を持つ文字を、テキスト索引に格納する前に、基本形に変換するかどうかを指定します。

base_letter_type

GENERIC(デフォルト)

GENERIC値はデフォルトで、基本文字変換の際、全言語に適用する変換表を1つ使用します。

base_letter_type

SPECIFIC

GENERIC値はデフォルトで、基本文字変換の際、全言語に適用する変換表を1つ使用します。

override_base_letter

TRUE

FALSE(デフォルト)

base_letteralternate_spellingを同時に有効にすると、シリアル変換によって予期しない結果が生じないように、base_letterのオーバーライドが必要になることがあります。

mixed_case

NO(使用禁止)

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

mixed_case

YES(使用可能)

レクサーがトークンをテキストに表示されたままにするか、またはすべて大文字に変換するかを指定します。

alternate_spelling

GERMAN(ドイツ語の代替スペル)

ドイツ語の代替スペルを使用するかどうかを指定します。

alternate_spelling

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

スウェーデン語の代替スペルを使用するかどうかを指定します。

alternate_spelling

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

デフォルトはNONEです。代替スペルが指定されていません。

printjoin

文字

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

skipjoin

文字

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

2.5.1.4 言語に依存するAUTO_LEXER属性

AUTO_LEXERは、表2-14で指定された言語に、言語に依存する属性を提供します。

表2-16に、AUTO_LEXERで使用可能な、言語に依存する属性を示します。属性名の<language>変数には、表2-14に示すサポート対象の言語の名前を指定します。

注意:

属性名は30文字以下にする必要があります。したがって、<language>変数を指定するとき、場合によっては言語名を短縮しなければならないことがあります。たとえば、traditional_chinesetrad_chineseに、simplified_chinesesimp_chineseに短縮する必要があります。

表2-16 言語に依存するAUTO_LEXER属性

属性 属性値 説明

<language>_prefix_morphemes

characters(空白で区切られた文字列)

語形変化のプリフィックスを指定します。カッコで囲んだプリフィックスが基本形とともに保持されます。たとえば、(re) analyze

<language>_suffix_morphemes

characters(空白で区切られた文字列)

語形変化のサフィックスを指定します。カッコで囲んだサフィックスが基本形とともに保持されます。たとえば、file(s)

<language>_punctuations

characters(空白で区切られた文字列)

文を区切る句読点を指定します。

<language>_non_sent_end_abbr

characters(空白で区切られた文字列)

文を終了しない略称を指定します。

表2-17 言語に依存するAUTO_LEXER属性のデフォルト値

属性 言語 デフォルト値

<language>_prefix_morphemes

すべての言語

なし

<language>_suffix_morphemes

英語

s es er

<language>_suffix_morphemes

スペイン語

ba n s es

<language>_suffix_morphemes

ポルトガル語

s es

<language>_suffix_morphemes

ドイツ語

in innen

<language>_suffix_morphemes

フランス語

ne e

<language>_suffix_morphemes

その他のすべての言語

なし

<language>_punctuations

英語

. ? !

<language>_punctuations

カタロニア語、チェコ語、オランダ語、ギリシャ語、ハンガリー語、ポーランド語、ルーマニア語、ロシア語、トルコ語

. ? ! - --

<language>_punctuations

フランス語、ドイツ語、イタリア語、韓国語、ポルトガル語、スペイン語、スウェーデン語

, ? !

<language>_punctuations

日本語

<language>_punctuations

中国語(簡体字)

短縮形: simp_chinese

<language>_punctuations

中国語(繁体字)

短縮形: trad_chinese

<language>_non_sent_end_abbr

ポーランド語、ルーマニア語、ロシア語、トルコ語

e.g. i.e. viz. a.k.a.

<language>_non_sent_end_abbr

カタロニア語

R.D. pp.

<language>_non_sent_end_abbr

チェコ語、ギリシャ語、ハンガリー語

e.g. i.e. viz. a.k.a.

<language>_non_sent_end_abbr

オランダ語

f.eks. f. eks. inkl. sr. skuesp. sekr. prof. mus. lrs. logr. kgl. insp. hr. hrs. gdr. frk. fr. forst. forf. fm. fmd. esq. d.æ d.æ. d.y. dr. dir. dept.chef civiling. bibl. ass. admn. adj.Skt.H.K.H.

<language>_non_sent_end_abbr

trad_chinese

e.g. i.e. viz. a.k.a. Adm.Br.Capt.Cdr.Cmdr.Col.Comdr.Comdt.Dr. Drs.Fr.Gen.Gov.Hon.Ins.Lieut.Lt.Maj.Messrs. Mdm.Mlle.Mlles.Mme. Mmes.Mr. Mrs. Ms. Pres.Prof. Profs.Pvt.Rep.Rev. Revd.Secy.Sen.Sgt.Sra.Srta.St. Ste.

<language>_non_sent_end_abbr

フランス語

c.-à-d. cf. e.g. ex. i.e. Pr.Prof. M. Mr. Mrs. Mme Mmes Mlle Mlles Mgr.MM.Lieut.Gén.Dr. Col.

<language>_non_sent_end_abbr

ドイツ語

ca. bzw. e.g. i.e. inkl.Fr.Frl.Mme. Mile.Mag.Stud.Tel.Hr.Hrn. apl.Prof.Prof.

<language>_non_sent_end_abbr

イタリア語

e.g. i.e. pag. pagg. tel.T.V. N.H. N.D. comm. col. cav. cap. geom. gen. ing. jr. mr. mons. mar. magg. prof. prof.ssa prof.sse proff. pres. perito ind. p. p.i. sr. s.ten. sottoten. sig. serg. sen. segr. sac. ten. uff. vicepres. vesc.S.S. S.E. avv. app. amm. arch. on. dir. dott. dott.ssa dr. rag.

<language>_non_sent_end_abbr

韓国語

e.g. i.e. a.k.a.Dr. Mr. Mrs. Ms. Prof.

<language>_non_sent_end_abbr

ポルトガル語

cf.Cf. e.g. E.g. i.é. I.é. p.ex.P.ex. pág. pag.Pág.Pag. tel. telef.Tel.Telef. sr. srs. sra. mr. eng. dr. dra.Dr. Dra.V.Ex.V.Exa. S. N. S. Mrs. Eng.Ex.Exa.

<language>_non_sent_end_abbr

スペイン語

e.g. i.e. ej. p.ej. pág. págs. tel. tfno.Fr.Ldo.Lda.Lic.Pbro. D. Dña.Dr. Dres.Dra.Dras.Dn.Mons.Rvdo.Sto.Sta.Sr. Srs.Srta.Srtas.Sres.Sra.Sras.Excmo.Excma.Ilmo.Ilma.Sto.Sta.

<language>_non_sent_end_abbr

スウェーデン語

inkl. prof. hrr. hr.Hrr.Hr. dr.Dr.

言語に依存するAUTO_LEXER属性の例

例2-1 ディクショナリと索引を関連付けるctx_ddl.create_preference

exec CTX_DDL.CREATE_PREFERENCE('A_LEX', 'AUTO_LEXER');
exec CTX_ANL. ADD_DICTIONARY('MY_ENGLISH', 'ENGLISH', lobloc);
select * from CTX_USR_ANL_DICTS;
exec CTX_DDL.SET_ATTRIBUTE('A_LEX', 'english_dictionary', 'MY_ENGLISH'
);

例2-2 <language>_prefix_morphemes

ctx_ddl.set_attribute(
      'a_lex', 'english_prefix_morphemes', 're'
);

例2-3 <language>_suffix_morphemes

ctx_ddl.set_attribute(
      'a_lex', 'english_suffix_morphemes', 's es'
);

例2-4 <language>_punctuations

ctx_ddl.set_attribute(
      'a_lex', 'english_punctuations', '. ? !'
);

例2-5 <language>_non_sentence_ending_abbrev

ctx_ddl.set_attribute(
      'a_lex', 'english_non_sentence_ending_abbrev', 'e.g. a.k.a. Dr.'
);

2.5.1.5 AUTO_LEXERディクショナリ属性

ディクショナリ属性は言語固有であり、言語ディクショナリの名前の設定に使用されます。<language>_dictionary属性には、表2-18のリストに従って、サポートされる言語の言語ディクショナリを指定します。

<language>_dictionary属性には、次の機能があります。

  • 属性の<language>値には、場所ではなくディクショナリ名のみを指定します。たとえばdutch_dictionaryは、オランダ語のディクショナリが使用されることを示します。

  • set_attributeメソッドはディクショナリをロードするわけではなく、ディクショナリ名を記録するだけです。したがって、ディクショナリが必要なときには、指定した場所にディクショナリがある必要があります。そうでない場合は、エラーが発生します。

表2-18 AUTO_LEXERディクショナリ属性でサポートされている言語

言語属性 言語属性

カタロニア語

韓国語

チェコ語

ポーランド語

オランダ語

ポルトガル語

英語

ルーマニア語

フランス語

ロシア語

ドイツ語

中国語(簡体字)

ギリシャ語

スペイン語

ハンガリー語

スウェーデン語

イタリア語

中国語(繁体字)

日本語

トルコ語

2.5.2 BASIC_LEXER

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

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

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

注意:

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

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

この項では、次の項目について説明します。

2.5.2.1 BASIC_LEXER属性

BASIC_LEXERには、表2-19に示す属性があります。

表2-19 BASIC_LEXER属性

属性 属性値

continuation

文字

numgroup

文字

numjoin

文字

printjoin

文字

punctuation

文字

skipjoin

文字

startjoin

トークンの先頭にある英数字以外の文字(文字列)

endjoin

トークンの末尾にある英数字以外の文字(文字列)

whitespace

文字(文字列)

newline

NEWLINE(\n)

CARRIAGE_RETURN(\r)

base_letter

NO(使用禁止)

base_letter

YES(使用可能)

base_letter_type

GENERIC(デフォルト)

base_letter_type

SPECIFIC

override_base_letter

TRUE

FALSE(デフォルト)

mixed_case

NO(使用禁止)

mixed_case

YES(使用可能)

composite

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

composite

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

composite

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

index_stems

文字列または文字列値で、数値を使用します。

NONE

英語

DERIVATIONAL

オランダ語

フランス語

ドイツ語

イタリア語

スペイン語

カタロニア語

チェコ語

ギリシャ語

ハンガリー語

ポーランド語

ポルトガル語

ルーマニア語

ロシア語

SWEDISH (「注意」を参照)

DERIVATIONAL_NEW (「注意」を参照)

DUTCH_NEW (「注意」を参照)

ENGLISH_NEW (「注意」を参照)

FRENCH_NEW (「注意」を参照)

GERMAN_NEW (「注意」を参照)

ITALIAN_NEW (「注意」を参照)

SPANISH_NEW (「注意」を参照)

トルコ語

注意: index_stemsがSWEDISHまたはDUTCH_NEW値に設定されている場合は、非コンパウンド・ワード・ステミングが自動的に実行されます。

注意: このリリースで新規追加された7つのindex_stem属性(サフィックスが_NEWの属性)を使用すると、新しいステマー属性を利用できる一方、以前のリリースのOracle Textとの下位互換性が維持されます。

index_themes

YES(使用可能)

index_themes

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

index_text

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

index_text

NO(使用禁止)

prove_themes

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

prove_themes

NO(使用禁止)

theme_language

AUTO(デフォルト)

theme_language

(任意のグローバリゼーション・サポート対象言語)

alternate_spelling

GERMAN(ドイツ語の代替スペル)

alternate_spelling

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

alternate_spelling

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

alternate_spelling

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

new_german_spelling

YES

NO(デフォルト)

continuation

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

numgroup

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

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

numjoin

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

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

注意:

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

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

printjoins

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

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

注意:

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

punctuations

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

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

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

トークン 索引付けされたトークン

.doc

.doc

dog.doc

dog.doc

dog..doc

dog..doc

dog.

dog

dog...

dog..

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

skipjoins

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

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

注意:

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

startjoins/endjoins

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

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

次の規則は、startjoinsとendjoinsの両方に適用されます。

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

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

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

whitespace

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

whitespaceの事前定義のデフォルト値は、spacetabです。これらの値は変更できません。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テキストに対して、コンポジット・ワードの索引付けを使用可能または使用禁止にするかどうかを指定します。デフォルトはDEFAULT(コンポジット・ワードの索引付けは使用禁止)です。

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

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

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

独自の言語のユーザー・ディクショナリを作成し、ワードの分解方法をカスタマイズできます。表2-20にこのユーザー・ディクショナリを示します。

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

ディクショナリ stemmer

$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

スペイン語

$ORACLE_HOME/ctx/data/enlx/dren.dct

英語と派生語

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

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

output term <tab> input 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を指定することはできません。デフォルトはNOです。

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

prove_themes

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

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

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

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

theme_language

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

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

デフォルトはAUTOであり、システムがこのパラメータを環境の言語に対応するように設定します。

index_stems

語幹索引付けに使用するステマーを指定します。次のステマーのいずれかを選択できます: なし、アラビア語、カタロニア語、クロアチア語、チェコ語、デンマーク語、派生語、オランダ語、英語、フィンランド語、フランス語、ドイツ語、ヘブライ語、ハンガリー語、イタリア語、ノルウェー語、ポーランド語、ポルトガル語、ルーマニア語、スロバキア語、スロベニア語、スペイン語、スウェーデン語。

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

注意:

index_stems属性を、表2-19「BASIC_LEXER属性」に示すIDが8から33のいずれかの言語に設定すると、BASIC_WORDLISTstemmer属性は無視され、問合せ時にはBASIC_LEXERで使用するステマーが使用されて、指定の問合せ語句の語幹が判断されます。

index_text

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

デフォルトはYESです。

alternate_spelling

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

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

new_german_spelling

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

2.5.2.3 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' ); 

2.5.3 MULTI_LEXER

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

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

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

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

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

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

この項では、次の項目について説明します。

2.5.3.1 MULTI_LEXERの制限事項

MULTI_LEXERには、異なる言語に対して指定するサブレクサーが必要です。すでに言語がわかっている場合は、BASIC_LEXERをサブレクサーとして使用できます。言語が不明な場合は、MULTI_LEXERではなくAUTO_LEXERを使用します。このため、MULTI_LEXERのサブレクサーとしてAUTO_LEXERを使用しても、それが無効な場合には効果がありません。

したがって、次の文は機能せず、DRG-13003のエラーがスローされます。

exec ctx_ddl.create_preference ('multilexer', 'MULTI_LEXER');
exec ctx_ddl..create_preference('autolexer', AUTO_LEXER);
exec ctx_ddl.add_sub_lexer('multilexer', 'GERMAN', 'autolexer'); 

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

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

2.5.3.3 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');

2.5.3.4 MULTI_LEXERとマルチ言語表の問合せ

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

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

言語列がAUTOに設定されている場合、マルチレクサーは、表2-21に示すサポート対象言語についてドキュメントの言語を識別します。

表2-21 MULTI_LEXERの自動識別でサポートされている言語

言語 言語

アラビア語

日本語

カタロニア語

韓国語

中国語(繁体字)

ノルウェー語

クロアチア語

ポーランド語

チェコ語

ポルトガル語

デンマーク語

ルーマニア語

オランダ語

ロシア語

英語

セルビア語(ラテン)

ドイツ語

スロバキア語

ギリシャ語

スウェーデン語

ヘブライ語

タイ語

ハンガリー語

トルコ語

イタリア語

2.5.4 CHINESE_VGRAM_LEXER

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

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

表2-22 CHINESE_VGRAM_LEXER属性

属性 属性値

mixed_case_ASCII7

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

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

  • AL32UTF8

  • ZHS16CGB231280

  • ZHS16GBK

  • ZHS32GB18030

  • ZHT32EUC

  • ZHT16BIG5

  • ZHT32TRIS

  • ZHT16HKSCS

  • ZHT16MSWIN950

  • UTF8

2.5.5 CHINESE_LEXER

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

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

  • 小型の索引の生成

  • 問合せ応答時間の短縮

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

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

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

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

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

表2-23 CHINESE_LEXER属性

属性 属性値

mixed_case_ASCII7

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

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

2.5.6 JAPANESE_VGRAM_LEXER

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

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

表2-24 JAPANESE_VGRAM_LEXER属性

属性 属性値

delimiter

全角のスラッシュや全角の中黒など、日本語の特定の空白文字を考慮するかどうかを指定します。ALLはこれらの文字を考慮します。NONEはこれらの文字を無視します。デフォルトはNONEです。

mixed_case_ASCII7

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

bigram

日本語のVGRAMレクサーでbigramを有効にするには、TRUEを指定します。bigramモードでは、2-グラム・トークンのみが生成されて内部のワイルドカード検索は実行されないため、日本語の問合せの実行が高速になります。しかし、bigramモードでは、大量のトークンに対応するために索引サイズを大きくする必要があります。ディスク領域より問合せのパフォーマンスが重視される場合に、bigramモードを有効にしてください。デフォルトはFALSEです。

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

  • JA16SJIS

  • JA16EUC

  • UTF8

  • AL32UTF8

  • JA16EUCTILDE

  • JA16EUCYEN

  • JA16SJISTILDE

  • JA16SJISYEN

2.5.7 JAPANESE_LEXER

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

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

  • 小型の索引の生成

  • 問合せ応答時間の短縮

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

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

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

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

表2-25 JAPANESE_LEXER属性

属性 属性値

delimiter

全角のスラッシュや全角の中黒など、日本語の特定の空白文字を無視するには、NONEまたはALLを指定します。デフォルトはNONEです。

mixed_case_ASCII7

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

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

  • JA16SJIS

  • JA16EUC

  • UTF8

  • AL32UTF8

  • JA16EUCTILDE

  • JA16EUCYEN

  • JA16SJISTILDE

  • JA16SJISYEN

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

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

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

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

2.5.8 KOREAN_MORPH_LEXER

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

この項では、次の項目について説明します。

2.5.8.1 KOREAN_MORPH_LEXERディクショナリ

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

表2-26 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は、大/小文字混在の検索を有効にします。

2.5.8.2 KOREAN_MORPH_ LEXER Unicodeのサポート

KOREAN_MORPH_LEXERには、次のUnicodeサポートがあります。

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

  • 追加文字

関連項目:

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

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

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

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

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

2.5.8.3 KOREAN_MORPH_LEXER属性

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

表2-27 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の違いについては、"「KOREAN_MORPH_LEXERの例: composite属性の設定」を参照してください。

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です。

2.5.8.4 KOREAN_MORPH_ LEXERの制限事項

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

2.5.8.5 KOREAN_MORPH_LEXERの例: composite属性の設定

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

NGRAMの例

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

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

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を指定すると、コンポジット名詞およびそのコンポーネントが索引付けされます。たとえば、次のようなコンポジット名詞(「情報処理規則」)があるとします。

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

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');

2.5.9 USER_LEXER

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

この項では、次の項目について説明します。

2.5.9.1 USER_LEXERルーチン

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

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

ユーザー定義ルーチン 説明

索引付けプロシージャ

ドキュメントとストップワードのトークン化を行うストアド・プロシージャ(PL/SQL)。出力は、この項に記載されているとおりのXMLドキュメントであることが必要です。

問合せプロシージャ

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

2.5.9.2 USER_LEXERの制限事項

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

  • CTX_DOC.GISTおよびCTX_DOC.THEMES

  • CTX_QUERY.HFEEDBACK

  • ABOUT問合せ演算子

  • CTXRULE索引タイプ

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

2.5.9.3 USER_LEXER属性

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

表2-29 USER_LEXER属性

属性 属性値

INDEX_PROCEDURE

ストアド・プロシージャの名前。デフォルトはありません。

INPUT_TYPE

VARCHAR2またはCLOB。デフォルトはCLOBです。

QUERY_PROCEDURE

ストアド・プロシージャの名前。デフォルトはありません。

2.5.9.4 INDEX_PROCEDURE

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

要件

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

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

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

パラメータ

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

制限事項

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

  • ロールバック

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

  • その他のトランザクション制御文の入力

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

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

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

2.5.9.5 INPUT_TYPE

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

2.5.9.5.1 VARCHAR2インタフェース

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

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

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

表2-30 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を使用できないことを意味します。

2.5.9.5.2 CLOBインタフェース

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

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

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

パラメータ順序 パラメータ・モード パラメータのデータ型 説明

1

IN

CLOB

トークン化するドキュメントまたはストップリスト・オブジェクトのストップワード

2

IN OUT

CLOB

XMLとしてコード化されたトークン。

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

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

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

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

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

3

IN

BOOLEAN

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

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

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

2.5.9.6 QUERY_PROCEDURE

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

要件

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

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

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

制限事項

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

  • ロールバック

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

  • その他のトランザクション制御文の入力

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

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

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

パラメータ

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

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

パラメータ順序 パラメータ・モード パラメータのデータ型 説明

1

IN

VARCHAR2

トークン化する問合せワード

2

IN

CTX_ULEXER.WILDCARD_TAB

問合せワード内のワイルド・カード文字(%および_)の文字オフセット。Oracle Textによって渡された問合せワードにワイルド・カード文字が含まれていない場合、この索引付き表は空になります。

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

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

3

IN OUT

VARCHAR2

XMLとしてコード化されたトークン。

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

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

2.5.9.7 トークンの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属性

2.5.9.8 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によって適用される制約をいくつか説明します。

  • ルート要素はトークンです。これは必須です。DIRECT_DATASTOREに属性はありません。

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

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

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

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

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

表2-33 ユーザー定義レクサーの索引付けプロシージャ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 11g Release 1

トークン:

<tokens>
  <word> ORACLE11G</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>

2.5.9.9 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によって適用される制約は次のとおりです。

  • ルート要素はトークンです。これは必須です。DIRECT_DATASTOREに属性はありません。

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

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

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

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

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

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

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

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

表2-34 ユーザー定義レクサーの索引付けプロシージャ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>

2.5.9.10 ユーザー定義レクサーの問合せプロシージャの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要素はトークンです。これは必須です。DIRECT_DATASTOREに属性はありません。

  • 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-35表2-35を参照してください。

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

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

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

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

表2-35 ユーザー定義レクサーの問合せプロシージャ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>
  <word wildcard="5"> &lt;%&gt; </word>
</tokens>

2.5.10 WORLD_LEXER

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

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

WORLD_LEXERは、すべてのデータベース・キャラクタ・セットをサポートしており、キャラクタ・セットがUnicodeベースの言語についてはUnicode 5.0標準をサポートしています。WORLD_LEXERが機能できる言語のリストについては、「Worldレクサー機能」を参照してください。

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

表2-36 WORLD_LEXER属性

属性 属性値

mixed_case

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

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');

2.6 ワードリスト型

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

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

2.6.1 BASIC_WORDLIST

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

表2-37に、BASIC_WORDLISTの属性を示します。

表2-37 BASIC_WORDLIST属性

属性 属性値

stemmer

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

NULL(ステミングなし)

ENGLISH(英語の語形変化)

DERIVATIONAL(英語の派生語)

DUTCH

FRENCH

GERMAN

ITALIAN

SPANISH

AUTO(データベース・セッション言語から導出される、ステミングに対する自動言語識別。データベース・セッション言語がAMERICANまたはENGLISHの場合は、ENGLISHステマーが使用されます。日本語は自動検出されません。)

JAPANESE

fuzzy_match

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

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

CHINESE_VGRAM

DUTCH

ENGLISH

FRENCH

GENERIC

GERMAN

ITALIAN

JAPANESE_VGRAM

KOREAN

OCR

SPANISH

fuzzy_score

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

fuzzy_numresults

ファジー拡張の最大数を指定します。0から5,000の数を指定します。デフォルトは100です。

substring_index

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

prefix_index

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

prefix_min_length

索引付けされたプリフィックスの最小長を指定します。デフォルトは1です。長さの情報はUSC-2コードポイント・セマンティクスに準拠する必要があります。

prefix_max_length

索引付けされたプリフィックスの最大長を指定します。デフォルトは64です。長さの情報はUSC-2コードポイント・セマンティクスに準拠する必要があります。

wildcard_maxterms

ワイルド・カード拡張での語句の最大数を指定します。最大値は50000で、デフォルト値は20000です。0を指定すると、ワイルド・カード拡張数の制限がなくなります。0を設定するとワイルド・カード拡張数が大きくなるため、メモリーが不足する場合があります。

ndata_base_letter

テキスト索引の格納前またはNDATA演算子による問合せ前に、発音区別記号を持つ文字を基本形に変換するかどうかを指定します。

FALSE(デフォルト)またはTRUE

FALSEに設定すると、基本文字は使用されません。

ndata_alternate_spelling

ドイツ語、デンマーク語、およびスウェーデン語の代替スペルを使用可能にするかどうかを指定します。代替スペルを使用可能にすると、代替形式でNDATAセクション・データの索引付けおよびNDATA演算子を使用した問合せを実行できます。

FALSE(デフォルト)またはTRUE

FALSEに設定すると、代替スペルは使用されません。

ndata_thesaurus

代替名前拡張に使用されるシソーラスの名前。

ndata_join_particles

準拠している名前と結合できるコロンで区切られた名前の不変化詞のリスト。

stemmer

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

AUTOを指定すると、データベース・セッションの言語設定に従って、システムが自動的にステミング言語を設定します。データベース言語がAMERICANまたはENGLISHの場合は、ENGLISHステマーが自動的に使用されます。それ以外の場合は、データベース・セッション言語にマップされたステマーが使用されます。

言語に対してステマーが存在しない場合、デフォルトはNULLです。NULLステマーを使用すると、STEM演算子は問合せで無視されます。

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

注意:

次の場合は、BASIC_WORDLISTプリファレンスのSTEMMER属性が無視されます。

  1. BASIC_LEXERプリファレンスのINDEX_STEMSを、BOKMALCATALANCROATIANCZECHDANISHFINNISHGREEKHEBREWHUNGARIANNYNORSKPOLISHPORTUGUESEROMANIANRUSSIANSERBIANSLOVAKSLOVENIANSWEDISHENGLISH_NEWDERIVATIONAL_NEWDUTCH_NEWFRENCH_NEWGERMAN_NEWITALIAN_NEWまたはSPANISH_NEWに設定した場合

    または

  2. AUTO_LEXERプリファレンスのINDEX_STEMS属性をYESに設定した場合

    または

  3. 前述の1または2と同じ設定で、データベース・セッション言語に対してMULTI_LEXERSUB_LEXERを選択した場合

これらの場合は、BASIC_LEXERまたはAUTO_LEXERで使用するステマーが索引付け時に使用されて、問合せ時に問合せ語句の語幹が判断されます。

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倍遅くなります。

  • 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_min_length

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

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

注意:

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

prefix_max_length

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

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

注意:

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

wildcard_maxterms

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

ORA-29902: error in executing ODCIIndexStart() routine
ORA-20000: Oracle Text error:
DRG-51030: wildcard query expansion resulted in too many terms

そのような場合、問合せを絞り込んでヒット数が少なくなるようにするか、wildcard_maxtermsの値を増やしてください。wildcard_maxtermsを0に設定して制限を無視することもできます。

注意:

wildcard_maxtermsの値を0に設定した場合も、ワイルドカード検索語に一致する用語が多すぎると、問合せが失敗して再び上のエラーが戻されることがあります。

上記のエラーをキャプチャし、独自の詳細なメッセージを表示することもできます。

注意:

%%_%%_などのワイルド・カード文字のみを持つワイルド・カード問合せを使用した検索条件は、ストップワードとして処理されます。

ndata_base_letter

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

ndata_alternate_spelling

ドイツ語、デンマーク語、およびスウェーデン語の代替スペルを使用可能にするかどうかを指定します。代替スペルを使用可能にすると、代替形式でNDATAセクション・データの索引付けおよびNDATA演算子を使用した問合せを実行できます。

ndata_base_letterndata_alternate_spellingを同時に有効にすると、NDATAセクション・データが代替スペル、基本文字の順にシリアルに変換されます。Oracle Textが使用する代替スペルの規則については、「代替スペル」を参照してください。

ndata_thesaurus

代替名前拡張に使用されるシソーラスの名前を指定します。索引付けエンジンはシソーラスのシノニム・リングを使用して、ドキュメントの名前を拡張します。ユーザーはシソーラスの同形異義語を明確にする機能を使用して、一般的なニックネームを区別します。

例を次に示します。

Albert
  SYN Al
  SYN Bert
Alfred
  SYN Al
  SYN Fred

前述の簡単な定義を使用して、Albert、Alfred、Al、Bert、およびFredを同じシノニム・リングに配置します。このため、Bertの拡張にFredが含まれるといった予期しない結果が発生します。これを防止するため、同形異義語を明確にする機能を次のように使用できます。

Albert
  SYN Al (Albert)
  SYN Bert (Albert)
Alfred
  SYN Al (Alfred)
  SYN Fred (Alfred)

Albert-Al-BertとAlfred-Al-Fredの2つのシノニム・リングが作成されます。したがって、Bertの拡張にFredが含まれなくなります。次に、詳細な例を示します。

begin
  ctx_ddl.create_preference('NDAT_PREF', 'BASIC_WORDLIST');
  ctx_ddl.set_attribute('NDATA_PREF', 'NDATA_ALTERNATE_SPELLING', 'FALSE');
  ctx_ddl.set_attribute('NDATA_PREF', 'NDATA_BASE_LETTER', 'TRUE');
  ctx_ddl.set_attribute('NDATA_PREF', 'NDATA_THESAURUS', 'NICKNAMES');
end;

注意:

名前のサンプルのシソーラスは、$ORACLE_HOME/ctx/sample/thesディレクトリにあります。このファイルはdr0thsnames.txtです。

ndata_join_particles

準拠している名前と結合できるコロンで区切られた名前の不変化詞のリストを指定します。daなどの名前の不変化詞は、da VinciやdaVinciなどの準拠している名前を分割または結合して書き込みます。索引付けエンジンは、このプリファレンスで指定された名前の不変化詞を検索する場合に名前を分割したバージョンと結合したバージョンの両方の索引データを生成します。高度な再コールの問合せ処理も同様です。

2.6.2 BASIC_WORDLISTの例

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

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

次の例では、英語に対するステミングおよびファジー・マッチングを使用可能にします。プリファレンス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');

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

次の例では、プリフィックスとサブストリングの索引付けに対してワードリスト・プリファレンスを設定します。プリフィックス索引付けに対して、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;

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

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;

2.7 記憶域型

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

表2-38 記憶域型

データ型 説明

BASIC_STORAGE

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

2.7.1 BASIC_STORAGE

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

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

この項では、次の項目について説明します。

関連項目:

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

2.7.1.1 BASIC_STORAGE属性

BASIC_STORAGEには、表2-39に示す属性があります。

表2-39 BASIC_STORAGE属性

属性 属性値

big_io

IO操作に広く使用されるCONTEXT索引の問合せパフォーマンスを向上させるパラメータ句。SECUREFILESを使用するため、表領域は自動セグメント領域管理(ASSM)を使用する必要があります。シークがシリアル読取りより負荷が高い場合、この句は主に回転ディスクの問合せパフォーマンスを向上します。BIG_IO索引オプションを使用した索引の作成には、一時的なトリガーが索引付け処理中に作成されるため、CREATE TRIGGER権限が必要です。

データ記憶域がSSDの場合、問合せパフォーマンスはそれほど向上しません。

CONTEXT索引のBIG_IO索引オプションを有効にするには、これをYESに設定します。デフォルトはNOです。

d_table_clause

$D表の記憶域句を指定するパラメータ句。

正引き索引の機能を使用する場合に、この句を指定できます。正引き索引の機能を使用すると、スニペットを計算するときの問合せパフォーマンスが向上します。

d_table_clauseを手動で設定する場合は、$D表のドキュメントBLOB列docに、圧縮率の高いSecureFilesを選択することをお薦めします。d_table_clauseを設定しない場合、索引所有者のデフォルトの表領域がASSMであり、データベース互換性パラメータが11.0以上であれば、ドキュメントBLOBはデフォルトでSecureFilesを使用します。

$D表は、save_copy列を指定するかsave_copy 記憶域属性を指定することによって、ドキュメントのコピーを索引に保存するために作成されます。

e_table_clause

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

forward_index

CTX_DOCパッケージで次のプロシージャのパフォーマンスを向上するパラメータ句。

  • ctx_doc.snippet

  • ctx_doc.highlight

  • ctx_doc.markup

正引き索引の機能を有効にする場合は、これをTRUEに設定します。これによって$O表が作成されます。$O表には、$I表のトークン・オフセットから、索引付けされているドキュメントのキャラクタ・オフセットへのマッピング情報が格納されます。

デフォルトはFALSEです。

g_index_clause

$G表の$H Bツリー索引のパラメータ句。

内部CREATEINDEX文の終わりに追加するstorage句およびtablespace句を指定します。

STAGE_ITAB索引オプションでCONTEXT索引を作成すると、$H Bツリー索引付きで空の$G表が作成されます。DML操作で広く使用されるCONTEXT索引の問合せパフォーマンスを向上させるには、STAGE_ITAB索引オプションと組み合せてg_index_clause句を使用します。

g_table_clause

$G表のパラメータ句。

内部CREATETABLE文の終わりに追加するstorage句およびtablespace句を指定します。

STAGE_ITAB索引オプションでCONTEXT索引を作成すると、$H Bツリー索引付きで空の$G表が作成されます。DML操作で広く使用されるCONTEXT索引の問合せパフォーマンスを向上させるには、STAGE_ITAB索引オプションと組み合せてg_table_clause句を使用します。

i_index_clause

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

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

i_rowid_index_clause

$I表のdr$ROWID列に対する$R索引のstorage句を指定するパラメータ句。内部CREATE INDEX文の終わりに追加するstorage句およびtablespace句を指定します。

この句は、CTXCATの索引タイプでのみ使用されます。

i_table_clause

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

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

注意: $I LOBに対して「disable storage in row」を指定しないことをお薦めします。指定すると、問合せパフォーマンスが大幅に低下します。

k_table_clause

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

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

n_table_clause

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

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

o_table_clause

$O表のstorage句を指定するパラメータ句。

正引き索引の機能を使用する場合に、この句を指定できます。正引き索引の機能を使用すると、スニペットを計算するときの問合せパフォーマンスが向上します。

o_table_clauseを手動で設定する場合は、$O表のドキュメントBLOB列mappingに、圧縮率の高いSecureFilesを選択することをお薦めします。o_table_clauseを設定しない場合、索引所有者のデフォルトの表領域がASSMであり、データベース互換性パラメータが11.0以上であれば、ドキュメントBLOBはデフォルトでSecureFilesを使用します。

forward_index記憶域属性を指定して正引き索引の機能を有効にすると、$O表が作成されます。$O表には、$I表のトークン・オフセットから、索引付けされているドキュメントのキャラクタ・オフセットへのマッピング情報が格納されます。

p_table_clause

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

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

query_filter_cache_size

問合せフィルタ・キャッシュの最大サイズをバイト単位で指定するパラメータ句。問合せフィルタ・キャッシュは、共有プールから割り当てられるため、その最大サイズは共有プールのサイズより小さく設定する必要があります。この記憶域パラメータをパーティション・レベルで設定すると、索引レベルで暗黙的に設定されます。

デフォルトは0です。

r_table_clause

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

R表はROWID表です。

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

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

s_table_clause

dr$索引名$S表作成用のパラメータ句*。内部CREATE TABLE文の終わりに追加するstorage句およびtablespace句を指定します。デフォルト句はnocompressです。

* パフォーマンス上の理由から、$S表は、データベース・ブロック・サイズが4KB以上の表領域に、オーバーフロー・セグメントとPCTTHRESHOLD句を指定せずに作成する必要があります。$S表をデータベース・ブロック・サイズが4KB未満の表領域に作成するか、オーバーフロー・セグメントまたはPCTTHRESHOLD句を指定して作成した場合は、CREATE INDEX時にエラーが発生します。

S表は、SDATAセクション値を格納する表です。

SDATAがない索引の記憶域プリファレンスに対してこの句が指定されている場合、この指定による索引の影響はないため、索引は正しく作成されます。

save_copy

ドキュメントを$D索引表に保存することを指定するパラメータ句。

スニペットの計算中に問合せパフォーマンスを向上させる正引き索引の機能を使用するこの句を指定します。

ドキュメントのコピーをプレーン・テキスト形式で$D表に保存する場合は、これをPLAINTEXTに設定します。こうすると、テキストをフェッチするためにデータストアやフィルタが呼び出されないため、スニペット生成のパフォーマンスが向上します。また、ハイライトのパフォーマンスも向上します。

ドキュメントのコピーをフィルタ(HTML)形式で$D表に保存する場合は、これをFILTEREDに設定します。これで、ハイライトとマークアップのパフォーマンスは向上しますが、プレーン・テキスト形式の場合より必要なディスク領域は多くなります。スニペットの作成中にHTMLマークアップを削除する必要があるため、スニペットの生成効率は下がります。

デフォルトはNONEで、ドキュメントのコピーは$Dに保存されません。

save_copy_max_size

basic_storage属性を使用して$D表に保存するドキュメントの最大サイズを指定するパラメータ句。

ドキュメント・サイズが、この属性に指定したサイズより大きい場合は、この属性に指定したサイズまで切り捨てられたバージョンのドキュメントが、$D表に保存されます。

$D表が、ドキュメントBLOBとの比較のためにSecureFilesを使用している場合は、比較の前にsave_copy_max_sizeの制限事項がドキュメント・サイズに適用されます。

デフォルトは0で、サイズにかかわらずドキュメント全体が$D表に保存されます。

注意: save_copy_max_sizeパラメータ句は、save_copy句を指定した場合にのみ有効です。

separate_offsets

IO操作に広く使用され、問合せが主に1つのワードまたはブール値問合せであるCONTEXT索引の問合せパフォーマンスを向上させるパラメータ句です。

CONTEXT索引のSEPARATE_OFFSETS索引オプションを有効にするには、これをTに設定します。デフォルトはFです。

stage_itab

DML操作に広く使用されるCONTEXT索引の問合せパフォーマンスを向上させる際に切り替えます。

STAGE_ITAB索引オプションを無効にすると、新しいドキュメントが索引に追加されるとき、SYNC_INDEXがコールされてドキュメントが検索可能になります。こうすると、$I表に新しい行が作成されるため、$I表で断片化が大きくなります。これによって、問合せパフォーマンスの低下につながります。

STAGE_ITAB索引オプションを有効にすると、新しいドキュメントに関する情報は$I表ではなく$Gステージング表に格納されます。これによって$I表は断片化しなくなるため、問合せパフォーマンスが低下しません。

STAGE_ITAB索引オプションを有効にすると、$H Bツリー索引も$G表に作成されます。$G表と$H Bツリー索引は、$I表と$X Bツリー索引と同等です。

CONTEXT索引のSTAGE_ITAB索引オプションを有効にするには、stage_itabYESに設定します。デフォルトはNOです。

2.7.1.2 BASIC_STORAGEのデフォルト動作

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

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

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

2.7.1.3 BASIC_STORAGEの例

次の例では、索引表が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)'); 
ctx_ddl.set_attribute('mystore', 'S_TABLE_CLAUSE',
                        'tablespace foo storage (initial 1K)');
end;

次の例では、作成される内部表の末尾に追加します。

exec ctx_ddl.create_preference('sto', 'basic_storage');
exec ctx_ddl.set_attribute('sto', 'e_table_clause', 'tablespace foo');

次の例では、パーティション化された索引にquery_filter_cache_size記憶域パラメータを使用します。

exec ctx_ddl.create_preference('fcs', 'basic_storage');
exec ctx_ddl.set_attribute('fcs', 'query_filter_cache_size', '100000000');
 
create table fc(id number primary key, txt varchar2(64))
partition by range (id)
(
        partition p1 values less than (25),
        partition p2 values less than (50),
        partition p3 values less than (75)        
);
 
create index fci on fc(txt) indextype is ctxsys.context
   local (
    partition p1,
    partition p2,
    partition p3) parameters('storage fcs memory 49M sync (on commit)');

問合せフィルタ・キャッシュは、索引レベルの記憶域プリファレンスです。問合せフィルタ・キャッシュの記憶域プリファレンスは、 索引レベルでも設定されている場合のみ、パーティション・レベルで設定できます。

select count(*) from fc partition (p1) where contains(txt,'ctxfiltercache((hello))')>0;

2.8 セクション・グループ型

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

この項では、次の項目について説明します。

2.8.1 セクション・グループ作成のためのセクション・グループ型

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

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

データ型 説明

NULL_SECTION_GROUP

どのセクションも定義しないか、またはSENTENCEPARAGRAPHセクションのみを定義する場合は、このグループ・タイプを使用します。これはデフォルトです。

BASIC_SECTION_GROUP

このグループ・タイプを使用して、開始および終了タグが<A>および</A>という形式のセクションを定義します。

注意: このグループ・タイプでは、対になっていないカッコ、コメント・タグおよび属性などの入力はサポートされません。これらを入力するには、HTML_SECTION_GROUPを使用してください。

HTML_SECTION_GROUP

このグループ・タイプを使用して、HTMLドキュメントを索引付けし、HTMLドキュメントのセクションを定義します。

JSON_SECTION_GROUP

このグループを使用してJSON対応コンテキスト索引を作成します。JSON ENABLE属性はXML ENABLEで使用できません。セクション・グループはJSON ENABLEとしてのみマークされます。すでにXML ENABLEとしてマークされている場合、パスのセクション・グループはJSON ENABLEでは使用できず、その逆もできません。

XML_SECTION_GROUP

このグループ・タイプを使用して、XMLドキュメントを索引付けし、XMLドキュメントのセクションを定義します。索引付けされるセクションはすべて、このグループに対して手動で定義する必要があります。

AUTO_SECTION_GROUP

このグループ・タイプを使用して、XMLドキュメントの開始タグ/終了タグに対して自動的にゾーン・セクションを作成します。XMLタグから導出されるセクション名は、XML内と同様に大/小文字が区別されます。

属性セクションは、属性を持つXMLタグに対して自動的に作成されます。属性セクションは、tag@attributeという形式でネーミングされます。

WITHIN SENTENCE検索とWITHIN PARAGRAPH検索では特殊セクションをAUTO_SECTION_GROUPに追加できます。文セクションまたは段落セクションがAUTO_SECTION_GROUPに追加されると、該当するタグ名'sentence'または'paragraph'(大/小文字を区別しない)の付いたセクションは停止セクションとして処理されます。

停止セクション、空のタグ、処理命令およびコメントは、索引付けされません。

自動セクション・グループには次の制限事項が適用されます。

  • ゾーン、フィールド、sdata、または特殊セクションは、自動セクション・グループに追加できません。

  • 特定の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に従ったニュース・グループ形式のドキュメントのセクションを定義します。

2.8.2 HTML、XMLおよびJSON対応ドキュメントの場合のセクション・グループ例

この例では、HTMLおよびXMLドキュメントとJSON対応ドキュメントでのセクション・グループの使用について示します。概要は表2-40を参照してください。

この項には次の例が含まれます:

2.8.2.1 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');

関連項目:

セクション・グループの詳細は、「CTX_DDLパッケージ」を参照してください。

2.8.2.2 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');

関連項目:

セクション・グループの詳細は、「CTX_DDLパッケージ」を参照してください。

2.8.2.3 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');

2.8.2.4 JSON検索索引のためのJSONセクション・グループの作成

次の例ではJSON対応テキスト索引を作成します。

create index json_ctx_idx on customers (customer
_info)
indextype is ctxsys.context
parameters ('section group CTXSYS.JSON_SECTION_GROUP'); 

2.8.2.5 JSON_TEXTCONTAINSを使用したJSON検索索引の使用

次の例では、説明にキーワード「gold」を含む顧客を検索します。

select customer_info
from customers
where JSON_TEXTCONTAINS(customer_info, '$.description', 'gold'); 

2.8.2.6 JSON_EXISTSを使用したJSON検索索引の使用

JSON対応データを検出します。

select customer_info from customers
where JSON_EXISTS(customer_info, '$.dataplan'); 

2.9 分類型

この項では、CTX_CLS.TRAINおよびCTXRULE索引作成のプリファレンスの作成に使用する分類型について説明します。次の2つの分類型がサポートされています。

注意:

Oracle Database Express Edition (Oracle Database XE)では、データ・マイニング・オプションが使用できないため、RULE_CLASSIFIERおよびSVM_CLASSIFIERはサポートされていません。これは、KMEAN_CLUSTERINGも同様です。

2.9.1 RULE_CLASSIFIER

RULE_CLASSIFIER型を使用して、問合せルール生成プロシージャCTX_CLS.TRAINおよびCTXRULE作成のプリファレンスを作成します。この型を使用して生成されるルールは基本的に問合せ文字列で、簡単に調べることができます。この分類によって生成された問合せは、ANDNOTまたはABOUT演算子を使用できます。WITHIN演算子は、フィールド・セクションに対する問合せの場合のみサポートされています。

表2-41に、RULE_CLASSIFIER型の属性を示します。

表2-41 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

対象を広げるために、組込みの決定ツリーを削除する範囲を指定します。大きい値を指定すると、積極的に削除が行われ、生成されたルールの範囲が広くなりますが、精度は下がります。

2.9.2 SVM_CLASSIFIER

SVM_CLASSIFIER型を使用して、ルール生成プロシージャCTX_CLS.TRAINおよびCTXRULE作成のプリファレンスを作成します。この分類型は、分類のサポート・ベクター・マシン方法を表しており、バイナリ形式のルールを生成します。高精度の分類が必要な場合は、この分類型を使用します。

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

表2-42 SVM_CLASSIFIER属性

属性名 データ型 デフォルト 最小値 最大値 説明

MAX_DOCTERMS

I

50

10

8192

1つのドキュメントを表す語句の最大数を指定します。

MAX_FEATURES

I

3,000

1

100,000

個別の機能の最大数を指定します。

THEME_ON

B

FALSE

NULL

NULL

テーマを機能として使用するには、TRUEを指定します。

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は、索引ポリシーがフィールド・セクションを指定する場合のみ有効です。

2.10 クラスタ型

この項では、CTX_CLS.CLUSTERINGプロシージャのプリファレンスの作成に使用するクラスタ型について説明します。

注意:

Oracle Database Express Edition (Oracle Database XE)では、データ・マイニング・オプションが使用できないため、KMEAN_CLUSTERINGはサポートされていません。これは、RULE_CLASSIFIERおよびSVM_CLASSIFIERも同様です。

関連項目:

クラスタ化の詳細は、「CTX_CLSパッケージ」「CLUSTERING」、および『Oracle Textアプリケーション開発者ガイド』を参照してください。

2.10.1 KMEAN_CLUSTERING

KMEAN_CLUSTERINGにクラスタリング型は、表2-43に示す属性があります。

表2-43 KMEAN_CLUSTERING属性

属性名 データ型 デフォルト 最小値 最大値 説明

MAX_DOCTERMS

I

50

10

8192

1つのドキュメントを表す個別の語句の最大数を指定します。

MAX_FEATURES

I

3,000

1

500,000

個別の機能の最大数を指定します。

THEME_ON

B

FALSE

NULL

NULL

テーマを機能として使用するには、TRUEを指定します。

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

生成されるリーフ・クラスタの合計数を指定します。

2.11 ストップリスト

ストップリストによって、言語にある索引付けしないワードが識別されます。英語の場合、索引付けしないストップテーマも識別できます。デフォルトでは、データベースの言語に対応してシステムが提供するストップリストを使用して、テキストの索引付けが行われます。

Oracle Textでは、英語、フランス語、ドイツ語、スペイン語、中国語、オランダ語およびデンマーク語を含むほとんどの言語に対して、デフォルトのストップリストが提供されています。これらのデフォルト・ストップリストには、ストップワードのみが含まれます。

関連項目:

提供されるデフォルトのストップリストの詳細は、「Oracle Textで提供されるストップリスト」を参照してください。

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

言語固有のストップワードを保持するマルチ言語のストップリストを作成できます。マルチ言語のストップリストは、MULTI_LEXERを使用した英語、ドイツ語などの異なる言語のドキュメントを含む表の索引付けに有効です。

マルチ言語のストップリストを作成するには、CTX_DLL.CREATE_STOPLIST プロシージャを使用して、MULTI_STOPLISTというストップリスト・タイプを指定します。CTX_DDL.ADD_STOPWORD を使用して言語固有のストップワードを追加します。

索引付け時に、各ドキュメントの言語列が調べられ、その言語のストップワードのみが排除されます。問合せ時に、セッション言語の設定によって、アクティブなストップワードが特定されます。これは、マルチレクサーの使用時にアクティブなレクサーが特定されるのと同様です。

2.11.2 ストップリストの作成

CTX_DLL.CREATE_STOPLIST プロシージャを使用して、独自のストップリストを作成します。このプロシージャを使用すると、単一言語ストップリストのBASIC_STOPLISTまたはマルチ言語ストップリストのMULTI_STOPLISTを作成できます。

独自のストップリストを作成して使用する場合は、このリストをCREATE INDEXのPARAMETERS句に指定する必要があります。

中国語または日本語のストップリストを作成するには、それぞれCHINESE_LEXERまたはJAPANESE_LEXERを使用して、該当のレキシコンを@contained_such_stopwordsに更新します。

2.11.3 デフォルトのストップリストの変更

デフォルトのストップリストは、常に.CTXSYS.DEFAULT_STOPLISTという名前です。このストップリストを変更するには、次のプロシージャを使用します。

CTX_DDLパッケージを使用してCTXSYS.DEFAULT_STOPLISTを変更した場合は、変更を有効にするために索引を再作成する必要があります。

ストップワードの動的な追加

ALTER INDEX を使用して、ストップワードをデフォルトまたはカスタムのストップリストに動的に追加できます。ストップワードを動的に追加する場合、ワードはすぐにストップワードになり、索引から削除されるため、再索引付けする必要はありません。

注意:

ストップワードは、索引に動的に追加できますが、動的に削除することはできません。ストップワードを削除するには、CTX_DDL.REMOVE_STOPWORD を使用して索引を削除してから、再度索引付けをする必要があります。

2.12 システム定義プリファレンス

Oracle Textをインストールすると、いくつかの索引付けプリファレンスが作成されます。CREATE INDEXのPARAMETERS句にこれらの索引付けプリファレンスを使用することができる他、独自に定義することもできます。

デフォルトの索引パラメータは、この項で説明するシステム定義プリファレンスのいくつかにマップされます。

関連項目:

デフォルトの索引パラメータの詳細は、「デフォルトの索引付けパラメータ」を参照してください"

システム定義のプリファレンスは、次のカテゴリに分類されています。

2.12.1 データ記憶域プリファレンス

この項では、データ記憶域プリファレンスに関連付けられた型について説明します。

  • CTXSYS.DEFAULT_DATASTOREプリファレンスは、DIRECT_DATASTORE型を使用します。このプリファレンスを使用して、テキストが列に直接格納されているテキスト列に対して索引を作成します。

  • CTXSYS.FILE_DATASTOREプリファレンスはFILE_DATASTORE型を使用します。

  • CTXSYS.URL_DATASTOREプリファレンスはURL_DATASTORE 型を使用します。

2.12.2 フィルタ・プリファレンス

この項では、フィルタ処理プリファレンスに関連付けられた型について説明します。

  • CTXSYS.NULL_FILTERプリファレンスはNULL_FILTER 型を使用します。

  • CTXSYS.AUTO_FILTERプリファレンスはAUTO_FILTER 型を使用します。

2.12.3 レクサー・プリファレンス

この項では、レクサー・プリファレンスに関連付けられた型について説明します。

2.12.3.1 CTXSYS.DEFAULT_LEXER

デフォルトのレクサー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」を参照してください"

2.12.3.2 CTXSYS.DEFAULT_EXTRACT_LEXER

CTXSYS.DEFAULT_EXTRACT_LEXERプリファレンスは、AUTO_LEXERを使用し、Oracleから提供されるすべての機能(ルール、ディクショナリなど)を含んでいます。CTXSYS.DEFAULT_EXTRACT_LEXERは、次のオプションでAUTO_LEXERを使用します。

  • alternate_spellingはNONEです

  • base_letterはNOです

  • mixed_caseはYESです

  • <> printjoin is '-*' <>

2.12.3.3 CTXSYS.BASIC_LEXER

CTXSYS.BASIC_LEXERプリファレンスは、BASIC_LEXERを使用します。

2.12.4 セクション・グループ・プリファレンス

この項では、セクション・グループ・プリファレンスに関連付けられた型について説明します。

  • CTXSYS.NULL_SECTION_GROUPプリファレンスはNULL_SECTION_GROUP型を使用します。

  • CTXSYS.HTML_SECTION_GROUPプリファレンスはHTML_SECTION_GROUP型を使用します。

  • CTXSYS.JSON_SECTION_GROUPプリファレンスはJSON_SECTION_GROUP型を使用します。

  • CTXSYS.AUTO_SECTION_GROUPプリファレンスはAUTO_SECTION_GROUP型を使用します。

  • CTXSYS.PATH_SECTION_GROUPプリファレンスはPATH_SECTION_GROUP型を使用します。

2.12.5 ストップリスト・プリファレンス

この項では、ストップリスト・プリファレンスに関連付けられた型について説明します。

  • CTXSYS.DEFAULT_STOPLISTストップリスト・プリファレンスは、使用するデータベース言語のストップリストをデフォルトに設定します。

  • CTXSYS.EMPTY_STOPLISTストップリストにはワードがありません。

関連項目:

提供されるストップリストのストップワードの完全なリストは、「Oracle Textで提供されるストップリスト」を参照してください。

2.12.6 記憶域プリファレンス

この項では、記憶域プリファレンスに関連付けられた型について説明します。

CTXSYS.DEFAULT_STORAGE storageプリファレンスはBASIC_STORAGE型を使用します。

2.12.7 ワードリスト・プリファレンス

この項では、ワードリスト・プリファレンスに関連付けられた型について説明します。

CTXSYS.DEFAULT_WORDLISTプリファレンスは、使用するデータベース言語に対して言語ステマーを使用します。使用している言語が表2-37に記載されていない場合、このプリファレンスは、NULLステマーおよびGENERICファジー・マッチング属性にデフォルト設定されます。

2.13 システム・パラメータ

この項では、Oracle Textのシステム・パラメータについて説明します。システム・パラメータは次のカテゴリに分類されます。

2.13.1 汎用システム・パラメータ

Oracle Textをインストールすると、システム定義プリファレンスの他に、次のシステム・パラメータが設定されます。

表2-44 汎用システム・パラメータ

システム・パラメータ 説明

MAX_INDEX_MEMORY

CREATE INDEXおよびALTER INDEXのPARAMETERS句に指定できる最大の索引付けメモリー。このパラメータの最大値は2GB -1です。

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プロシージャを使用して変更します。

2.13.2 デフォルトの索引付けパラメータ

この項では、CONTEXT索引およびCTXCAT索引の作成時に使用できる索引パラメータについて説明します。

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

デフォルト値の表示

システムのデフォルト値は、CTX_PARAMETERSビューを問い合せて表示します。たとえば、すべてのパラメータと値を表示する場合は、次の文を入力します。

SQL> SELECT par_name, par_value from ctx_parameters;

デフォルト値の変更

CTX_ADM.SET_PARAMETERプロシージャを使用して、別のカスタム・プリファレンス名またはシステム定義プリファレンス名をデフォルト値として指定するように変更します。

2.13.2.1 CONTEXT索引のパラメータ

次のデフォルトのパラメータは、CONTEXT索引の作成時にCREATE INDEXのPARAMETERS句にプリファレンスを指定しない場合に使用されます。デフォルトの各パラメータによって、データ記憶域、フィルタ処理、レクサー処理などに使用するためにシステム定義プリファレンスが指定されます。

表2-45 デフォルトの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.DERAULT_LEXER

DEFAULT_STOPLIST

CREATE INDEXのPARAMETERS句にストップリスト・プリファレンスが指定されていない場合

CTXSYS.DEFAULT_STOPLIST

DEFAULT_WORDLIST

CREATE INDEXのPARAMETERS句にワードリスト・プリファレンスが指定されていない場合

CTXSYS.DEFAULT_WORDLIST

2.13.2.2 CTXCAT索引のパラメータ

次のデフォルトの各パラメータは、CREATE INDEXを使用したCTXCAT索引の作成時に、そのパラメータ文字列にパラメータを指定しない場合に使用されます。CTXCAT索引は、索引セット、レクサー、記憶域、ストップリストおよびワードリストのパラメータのみをサポートしています。デフォルトの各パラメータによって、システム定義プリファレンスが指定されます。

表2-46 デフォルトのCTXCAT索引のパラメータ

パラメータ 使用される場合 デフォルト値

DEFAULT_CTXCAT_INDEX_SET

CREATE INDEXのPARAMETERS句に索引セットが指定されていない場合

該当なし

DEFAULT_CTXCAT_STORAGE

CREATE INDEXのPARAMETERS句に記憶域プリファレンスが指定されていない場合

CTXSYS.DEFAULT_STORAGE

DEFAULT_CTXCAT_LEXER

CREATE INDEXのPARAMETERS句にレクサー・プリファレンスが指定されていない場合

CTXSYS.DERAULT_LEXER

DEFAULT_CTXCAT_STOPLIST

CREATE INDEXのPARAMETERS句にストップリスト・プリファレンスが指定されていない場合

CTXSYS.DEFAULT_STOPLIST

DEFAULT_CTXCAT_WORDLIST

CREATE INDEXのPARAMETERS句にワードリスト・プリファレンスが指定されていない場合

CTXCAT索引にワードリスト・プリファレンスを指定することはできますが、CATSEARCH問合せ言語ではワイルド・カード、ファジーおよびステミングをサポートしていないため、ほとんどの属性は適用されません。有効な唯一の属性は、日本語データに対するPREFIX_INDEXです。

CTXSYS.DEFAULT_WORDLIST

2.13.2.3 CTXRULE索引のパラメータ

表2-47に示すデフォルトの各パラメータは、CREATE INDEXを使用したCTXRULE索引の作成時に、そのパラメータ文字列にパラメータを指定しない場合に使用されます。CTXRULE索引は、レクサー、記憶域、ストップリストおよびワードリストのパラメータのみをサポートしています。デフォルトの各パラメータによって、システム定義プリファレンスが指定されます。

表2-47 デフォルトのCTXRULE索引のパラメータ

パラメータ 使用される場合 デフォルト値

DEFAULT_CTXRULE_LEXER

CREATE INDEXのPARAMETERS句にレクサー・プリファレンスが指定されていない場合

CTXSYS.DERAULT_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

CTXRULE索引の制限事項

CTXRULE索引では、次の問合せ演算子をサポートしていません。

  • FUZZY

  • SOUNDEX

また、次のBASIC_WORDLIST属性もサポートしていません。

  • SUBSTRING_INDEX

  • PREFIX_INDEX

2.13.3 デフォルトのポリシー・パラメータ

Oracle Textでポリシーを使用すると、索引を作成せずにドキュメント・サービスを利用できます。たとえば、ドキュメント・サービスをフィルタ処理してプレーン・テキストまたはHTMLバージョンのドキュメントを生成したり、テーマ・サマリーまたはテーマ・リストを生成してハイライトすることが可能です。

表2-48に、ポリシーを作成するときや、CTX_DDL.CREATE_POLICYを使用する際にプリファレンスを指定しないときのデフォルト・パラメータを示します。デフォルトの各パラメータによって、フィルタ処理、レクサー処理などに使用するためにシステム定義プリファレンスが指定されます。

表2-48 CTX_DDL.CREATE_POLICYのデフォルトのポリシー・パラメータ

パラメータ 使用される場合 デフォルト値

DEFAULT_FILTER_BINARY

CREATE_POLICYにフィルタ・プリファレンスが指定されず、ドキュメント・サービスのドキュメント・パラメータがVARCHAR2またはCLOBデータ型、BLOBまたはBFILEデータ型。

CTXSYS.AUTO_FILTER

DEFAULT_FILTER_TEXT

CREATE_POLICYにフィルタ・プリファレンスが指定されず、ドキュメント・サービスのドキュメント・パラメータがVARCHAR2またはCLOBデータ型、BLOBまたはBFILEデータ型。

CTXSYS.NULL_FILTER

DEFAULT_SECTION_HTML

CREATE_POLICYにセクション・グループが指定されず、フィルタ・プリファレンスでAUTO_FILTERを使用する。

CTXSYS.HTML_SECTION_GROUP

DEFAULT_SECTION_TEXT

CREATE_POLICYsection_groupが指定されず、AUTO_FILTERを使用ししない

CTXSYS.NULL_SECTION_GROUP

DEFAULT_LEXER

CREATE_POLICYにレクサー・プリファレンスが指定されない。

CTXSYS.DERAULT_LEXER

DEFAULT_STOPLIST

CREATE_POLICYにストップリストが指定されない。

CTXSYS.DEFAULT_STOPLIST

DEFAULT_WORDLIST

CREATE_POLICYにワードリスト・プリファレンスが指定されない。

CTXSYS.DEFAULT_WORDLIST

関連項目: