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 データストア型
データストア型 | 使用する場合 |
---|---|
データをテキスト列に内部的に格納する場合。各行は単一のドキュメントとして索引付けされます。 |
|
データをテキスト表の複数の列に格納する場合。列が連結され、各行に1つずつ仮想ドキュメントが作成されます。 |
|
データをテキスト列に内部的に格納する場合。ドキュメントがディテール表のテキスト列にある1つ以上の行で構成され、ヘッダー情報はマスター表に格納されます。 |
|
データをオペレーティング・システム・ファイルに外部的に格納する場合。ファイル名が、テキスト列の各行に1つずつ格納されます。 |
|
データをネストした表に格納する場合。 |
|
データをイントラネットまたはインターネット上にあるファイルに外部的に格納する場合。Uniform Resource Locator(URL)がテキスト列に格納されます。 |
|
ドキュメントが、索引付け時にユーザー定義ストアド・プロシージャによって合成されます。 |
2.3.1 DIRECT_DATASTORE
テキスト列の各行にドキュメントが1つずつ直接格納されるテキストには、DIRECT_DATASTORE
型を使用します。DIRECT_DATASTORE
型には属性がありません。
CHAR
、VARCHAR
、VARCHAR2
、BLOB
、CLOB
、BFILE
、XMLType
および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の属性
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に Oracle Textに |
detail_table |
ディテール表の名前(必要な場合は |
detail_key |
ディテール表の外部キー列の名前を指定します。 |
detail_lineno |
ディテール表の順序列の名前を指定します。 |
detail_text |
ディテール表のテキスト列の名前を指定します。 |
2.3.3.2 マスター表/ディテール表の索引の同期化
ディテール表が変更された場合、索引の同期化時に再索引付け操作はトリガーされません。マスター表の索引付けされた列が変更された場合のみ、索引の同期化時に再索引付け操作がトリガーされます。
ディテール表にトリガーを作成すると、マスター表の行の索引付けされた列に変更内容を伝播できます。
2.3.3.3 マスター表/ディテール表の例
この例では、マスター表およびディテール表が互いにどのように関連しているかを示します。
2.3.3.3.1 マスター表の例
マスター表は、マスター/ディテールの関係にあるドキュメントを定義します。各ドキュメントに識別番号を割り当てます。次の表は、my_master
というマスター表の例です。
列名 | 列型 | 説明 |
---|---|---|
|
|
各ドキュメントに一意のドキュメントID(主キー) |
|
|
ドキュメントの作成者 |
|
|
ドキュメントのタイトル |
|
|
|
注意:
DETAIL_DATASTORE
型を使用する場合は、マスター表に主キー列を組み込む必要があります。
2.3.3.3.2 ディテール表の例
ディテール表にはドキュメントのテキストがあり、通常、その内容はいくつかの行に分散して格納されます。次のディテール表my_detail
は、article_id
列でマスター表my_master
と関連しています。この列によって、各ディテール表の行(サブドキュメント)が属するマスター・ドキュメントを識別します。
列名 | 列型 | 説明 |
---|---|---|
|
|
マスター表に関連するドキュメントID |
|
|
|
|
|
ドキュメント・テキスト |
2.3.3.3.3 ディテール表の例の属性
この例で、DETAIL_DATASTORE
属性には次の値が指定されます。
属性 | 属性値 |
---|---|
|
|
|
|
|
|
|
|
|
|
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の属性
属性 | 属性値 |
---|---|
|
path1:path2:pathn |
|
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_ROLE
をPUBLIC
に設定できます。
たとえば、次の文でデータベース・ロールの名前を設定します。
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の属性
属性 | 属性値 |
---|---|
|
この属性の値は無視されます。これは下位互換性の目的で提供されています。 |
|
この属性の値は無視されます。 |
|
この属性の値は無視されます。これは下位互換性の目的で提供されています。 |
|
この属性の値は無視されます。これは下位互換性の目的で提供されています。 |
|
この属性の値は無視されます。これは下位互換性の目的で提供されています。 |
|
HTTPプロキシ・サーバーのホスト名を指定します。オプションで、 |
|
FTPプロキシ・サーバーのホスト名を指定します。オプションで、 |
|
非プロキシ・サーバーのドメインを指定します。カンマで区切られた文字列を使用して最大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_proxy
にus.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_proxy
、no_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への2つ目の引数のデータ型を指定します。有効な値は、
|
- procedure
-
索引付けされるドキュメントを合成するプロシージャ名を指定します。この指定は、
PROCEDURENAME
またはPACKAGENAME.PROCEDURENAME
の形式である必要があります。スキーマの所有者名を指定することもできます。指定するプロシージャには、次のように定義された2つの引数が必要です。
procedure (r IN ROWID, c IN OUT NOCOPY output_type)
1つ目の引数rは、
ROWID
型にしてください。2つ目の引数cは、output_type
型である必要があります。NOCOPYは、可能な場合は参照によってパラメータcを渡すようにOracle Textに指示する、コンパイラ・ヒントです。注意:
プロシージャ名およびその引数には、どのような名前でも付けることができます。この例では、説明を単純にするために、rおよびcという引数を使用しています。
ストアド・プロシージャは、索引付けされる行ごとに1回コールされます。現在行のROWIDが引数として渡されるたびに、
procedure
は、ドキュメントのテキストを2つ目の引数(output_type
で指定)に書き込む必要があります。
2.3.6.2 USER_DATASTOREの制約
次の制約が、procedure
に適用されます。
-
すべてのユーザーが所有できますが、そのユーザーには、
procedure
を正しく実行するデータベース権限が必要です。 -
索引所有者が実行できる必要があります。
-
COMMIT
のようなトランザクション制御文またはDDLは入力できません。
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 TABLE列の名前を指定します。この属性は必須です。列名のみを指定します。スキーマ所有者または格納表の名前は指定しないでください。 |
|
NESTED TABLEの型を指定します。この属性は必須です。所有者名および型を指定する必要があります。 |
|
行を順序付けする、NESTED TABLE内の属性名を指定します。これは、ディテール・データストアの |
|
行のテキストを含むNESTED TABLE型内の列名を指定します。これは、ディテール・データストアの |
|
|
NESTED TABLEデータストアを使用する場合、拡張索引作成機能フレームワークではNESTED TABLE列の索引付けが禁止されているため、ダミー列を索引付けする必要があります。「NESTED_DATASTOREの例」を参照してください。
NESTED TABLEのDMLは、索引付けに使用されたダミー列には自動的に伝播されません。NESTED TABLEのDMLをダミー列に伝播するには、アプリケーション・コードまたはトリガーによって、ダミー列を明示的に更新する必要があります。
索引に対するフィルタのデフォルトは、nested_text
列の型によって異なります。
妥当性チェックの間に、その型が存在するかどうか、およびnested_lineno
とnested_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.4 フィルタ型
フィルタ型を使用して、ドキュメントをフィルタ処理して索引付けテキスト文字列を取得するためのプリファレンスを作成します。フィルタ処理によって、ワード・プロセッサ形式のドキュメント、形式設定されたドキュメント、プレーン・テキスト、HTMLおよびXMLドキュメントの索引付けができるようになります。
形式設定されたドキュメントについては、ドキュメントをその固有の形式で格納した後、フィルタを使用してそのドキュメントの一時的なプレーン・テキストまたはHTML形式を作成します。Oracle Textにより、プレーン・テキストまたはHTMLで形式設定されたドキュメントから導出されたワードが索引付けされます。
フィルタ・プリファレンスを作成するには、表2-8で説明するフィルタ型のうちいずれか1つを使用する必要があります。
表2-8 フィルタ型
フィルタ | 使用される場合 |
---|---|
形式設定されたドキュメントのフィルタ処理用Autoフィルタです。 |
|
フィルタ処理は必要ありません。プレーン・テキスト、HTMLまたはXMLドキュメントの索引付けに使用します。 |
|
|
|
カスタム・フィルタ処理に使用するユーザー定義外部フィルタです。 |
|
カスタム・フィルタ処理に使用するユーザー定義ストアド・プロシージャ・フィルタです。 |
2.4.1 AUTO_FILTER
AUTO_FILTER
は、PDFおよびMicrosoft Wordのドキュメントを含む、ほとんどのドキュメント形式をフィルタ処理する汎用フィルタです。単一書式および複合書式の両方の列の索引付けに使用します。このフィルタは、プレーン・テキスト、HTML、XHTML、SGMLおよびXMLドキュメントを自動的にバイパスします。
関連項目:
AUTO_FILTER
がサポートしている形式のリストおよび環境の設定方法は、「Oracle Textでサポートされているドキュメント形式」を参照してください。
2.4.1.1 AUTO_FILTERの属性
AUTO_FILTER
プリファレンスには、表2-9に示す属性があります。
表2-9 AUTO_FILTERの属性
属性 | 属性値 |
---|---|
|
この待機時間がどのように使用されるかは、 この機能は、行に対応しているキャラクタ・セット列やフォーマット列によって この機能を使用して、Oracle Textの索引付け操作が停止中のフィルタ操作を無制限に待機するのを回避します。 |
|
Outside In HTML Exportによる出力が増加した場合に、すべての フィルタ処理が正常に進行中か停止中かに関係なく、 |
|
この属性を設定しても、フィルタのパフォーマンスまたはフィルタの出力に影響はありません。下位互換性の目的でのみ保持されています。 |
2.4.1.2 AUTO_FILTERと形式設定されたドキュメントの索引付け
2.4.1.3 AUTO_FILTERと複合フォーマット列のプレーン・テキストまたはHTMLの明示的なバイパス
複合フォーマット列は、複数のドキュメント形式を含むテキスト列です。これには、Microsoft Word、PDF、プレーン・テキストおよびHTMLドキュメントを含む列などがあります。
AUTO_FILTER
によって、複合フォーマット列を索引付けして、プレーン・テキスト、HTMLおよびXML文書を自動的にバイパスできます。ただし、組込みのバイパス・メカニズムを使用しない場合は、行をテキストとして明示的にタグ付けし、AUTO_FILTER
がその行を無視して、ドキュメントを処理しないように指定できます。
元表内のフォーマット列では、テキスト列に含まれるドキュメントのタイプを指定できます。指定できるドキュメント・タイプは、TEXT
、BINARY
および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.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に示す属性があります。
Table 2-10 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
の指定がオーバーライドされ、デフォルトの動作がオーバーライドされます。動作は、INCLUDE
、AUTO_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_STYLE
をIGNORE
に指定します。
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_STYLE
をTAG
に指定した場合は、次のようになります。
<SUBJECT>mainheader</SUBJECT> <SUBJECT>subheader1</SUBJECT> <SUBJECT>subheader2</SUBJECT>
PART_FIELD_STYLE
をFIELD
に指定した場合は、次のようになります。
<SUBJECT>mainheader<SUBJECT> SUBJECT:subheader1 SUBJECT:subheader2
最後に、PART_FIELD_STYLE
をTEXT
に指定した場合は、次のようになります。
<SUBJECT>mainheader</SUBJECT> subheader1 subheader2
2.4.4 USER_FILTER
USER_FILTER
型を使用して、列内のドキュメントをフィルタ処理するための外部フィルタを指定します。
この項では、次の項目について説明します。
2.4.4.1 USER_FILTERの属性
USER_FILTER
には次の属性があります。
表2-11 USER_FILTERの属性
属性 | 属性値 |
---|---|
|
実行可能なフィルタの名前を指定します。 |
警告:
USER_FILTER
型を使用するとき、セキュリティ上の潜在的な脅威があります。CTXAPPロールを付与されたデータベース・ユーザーが、USER_FILTER
を使用して悪質なアプリケーションをロードする可能性があります。したがって、DBAは、システム・セキュリティを危険にさらすような実行可能なフィルタを有効にする入力と出力のファイル・パラメータの組合せに対して、保護手段を講じる必要があります。
- command
-
列に格納されているすべてのテキストをフィルタ処理するときに使用する、単一外部フィルタの実行可能ファイルを指定します。複数のドキュメント形式が列に格納されている場合、
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
実行可能ファイルがその行を無視して、ドキュメントを処理しないように指定できます。
元表内のフォーマット列では、テキスト列に含まれるドキュメントのタイプを指定できます。指定できるドキュメント・タイプは、TEXT
、BINARY
および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の属性
属性 | 用途 | 使用可能な値 |
---|---|---|
|
フィルタのストアド・プロシージャの名前。 |
任意のプロシージャ。プロシージャには、PL/SQLストアド・プロシージャを指定できます。 |
|
ストアド・プロシージャの入力引数の型。 |
|
|
ストアド・プロシージャの出力引数の型。 |
|
|
ROWIDパラメータを含めるか。 |
|
|
formatパラメータを含めるか。 |
|
|
charsetパラメータを含めるか。 |
|
- procedure
-
フィルタ処理に使用するストアド・プロシージャの名前を指定します。プロシージャには、PL/SQLストアド・プロシージャを指定できます。プロシージャは、セーフ・コールアウトになることも、セーフ・コールアウトをコールすることもできます。
rowid_parameter
、format_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
BLOB
、OUTPUT_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_PARAMETER
、FORMAT_PARAMETER
およびCHARSET_PARAMETER
は、すべて非依存型です。順序はrowid、format、次にcharsetとなります。ただし、フィルタ・プロシージャには、必要最小数のパラメータのみが渡されます。
たとえば、INPUT_TYPE
がBLOB
で、OUTPUT_TYPE
がCLOB
とします。フィルタ・プロシージャにすべてのパラメータが必要な場合、そのプロシージャのシグネチャは、次のように指定する必要があります。
(id IN ROWID, format IN VARCHAR2, charset IN VARCHAR2, input IN BLOB, output IN OUT NOCOPY CLOB)
プロシージャで必要なパラメータがROWID
のみの場合、プロシージャのシグネチャは、次のように指定する必要があります。
(id IN ROWID,input IN BLOB, output 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 レクサー型
型 | 説明 |
---|---|
異なる複数言語のドキュメントを含む列の索引付けに使用するレクサー。 |
|
空白のデリミタ付きワードを使用する英語およびほとんどのヨーロッパ言語で、テキストからのトークンの抽出に使用するレクサー。 |
|
英語、ドイツ語および日本語など、異なる複数言語のドキュメントを含む表の索引付けに使用するレクサー。 |
|
中国語テキストからのトークンの抽出に使用するレクサー。 |
|
中国語テキストからのトークンの抽出に使用するレクサー。このレクサーは、
|
|
日本語テキストからのトークンの抽出に使用するレクサー。 |
|
日本語テキストからのトークンの抽出に使用するレクサー。このレクサーは、
|
|
韓国語テキストからのトークンの抽出に使用するレクサー。 |
|
特定言語を索引付けするために作成するレクサー。 |
|
異なる複数言語のドキュメントを含む表の索引付けに使用する、ドキュメントの言語を自動検出するレクサー。 |
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
関連項目:
2.5.1.3 言語に依存しないAUTO_LEXER属性
表2-15に、AUTO_LEXER
で使用可能な、言語に依存しない属性を示します。
表2-15 言語に依存しないAUTO_LEXER属性
属性 | 属性値 | 説明 |
---|---|---|
|
<characters>(空白で区切られた文字列) |
入力ドキュメントの可能な言語を指定します。 言語を指定しないと、 1つの言語を指定した場合は、その言語が手動で設定され、 複数の言語を指定した場合、 注意: 言語の自動識別は統計に基づくため、本質的に不完全です。 |
|
NO(使用禁止) |
派生語のステミングを使用するかどうかを指定します。現在、派生語のステミングは英語でのみ使用可能です。したがって、それ以外の言語では また、派生語のステミングが実行されると、タグ付けおよびタグ・ステミングは使用されません。その結果、タグ付けおよびタグ付きステミングのクライアント・ディクショナリは、ステミング結果に影響を与えません。 |
|
YES(デフォルト) |
派生語のステミングを使用するかどうかを指定します。現在、派生語のステミングは英語でのみ使用可能です。したがって、それ以外の言語では また、派生語のステミングが実行されると、タグ付けおよびタグ・ステミングは使用されません。その結果、タグ付けおよびタグ付きステミングのクライアント・ディクショナリは、ステミング結果に影響を与えません。 |
|
NO(使用禁止) |
ステマーでドイツ語の非コンパウンド化を実行するかどうかを指定します。 |
|
YES(デフォルト、ドイツ語のみで使用可能) |
ステマーでドイツ語の非コンパウンド化を実行するかどうかを指定します。 |
|
NO(使用禁止) |
索引ステマーを使用するかどうかを指定します。 YESに指定すると、ドキュメント言語に対応するステマーが使用され、ドキュメントの再コールを最大化するようにステマーが常に構成されます。つまり、指定の問合せ語句の語幹を判断する問合せの際には、 NOに指定すると、STEM演算子を使用する問合せでは、ワード・リスト・ステミングを使用してトークンのステミングを行います。ワード・リスト・ステミングが使用できない場合、STEM演算子は無視されます。 スウェーデン語およびオランダ語のドキュメントの場合、 |
|
YES(デフォルト) |
索引ステマーを使用するかどうかを指定します。 YESに指定すると、ドキュメント言語に対応するステマーが使用され、ドキュメントの再コールを最大化するようにステマーが常に構成されます。つまり、指定の問合せ語句の語幹を判断する問合せの際には、 NOに指定すると、STEM演算子を使用する問合せでは、ワード・リスト・ステミングを使用してトークンのステミングを行います。ワード・リスト・ステミングが使用できない場合、STEM演算子は無視されます。 スウェーデン語およびオランダ語のドキュメントの場合、 |
|
NO(使用禁止) |
発音区別記号(ウムラウト、セディーユ、揚音アクセントなど)を持つ文字を、テキスト索引に格納する前に、基本形に変換するかどうかを指定します。 |
|
YES(使用可能) |
発音区別記号(ウムラウト、セディーユ、揚音アクセントなど)を持つ文字を、テキスト索引に格納する前に、基本形に変換するかどうかを指定します。 |
|
GENERIC(デフォルト) |
|
|
SPECIFIC |
|
|
TRUE FALSE(デフォルト) |
|
|
NO(使用禁止) |
レクサーがトークンをテキストに表示されたままにするか、またはすべて大文字に変換するかを指定します。デフォルトではNO(トークンはすべて大文字に変換される)です。 |
|
YES(使用可能) |
レクサーがトークンをテキストに表示されたままにするか、またはすべて大文字に変換するかを指定します。 |
|
GERMAN(ドイツ語の代替スペル) |
ドイツ語の代替スペルを使用するかどうかを指定します。 |
|
SWEDISH(スウェーデン語の代替スペル) |
スウェーデン語の代替スペルを使用するかどうかを指定します。 |
|
NONE(代替スペルなし、デフォルト) |
デフォルトはNONEです。代替スペルを指定しません。 |
|
文字 |
英数字以外の文字を指定します。この文字は、ワード内(先頭、中程または末尾)にあれば英数字として処理され、テキスト索引にトークンとともに組み込まれます。これには、連続的に発生するprintjoinが含まれます。基本レクサー「printjoin」を参照してください。 |
|
文字 |
英数字以外の文字を指定します。この文字がワード内で使用されている場合は、そのワードを単一のトークンとして識別します。ただし、その文字はテキスト索引内にトークンとともに格納されません。基本レクサー「skipjoin」を参照してください。 |
2.5.1.4 言語に依存するAUTO_LEXER属性
AUTO_LEXERには、表2-14で指定される言語に対する言語依存の属性があります。
表2-16に、AUTO_LEXER
で使用可能な、言語に依存する属性を示します。属性名の<language>変数には、表2-14に示すサポート対象の言語の名前を指定します。
注意:
属性名は30文字以下にする必要があります。したがって、<language>変数を指定するとき、場合によっては言語名を短縮しなければならないことがあります。たとえば、traditional_chinese
はtrad_chinese
に、simplified_chinese
はsimp_chinese
に短縮する必要があります。
表2-16 言語に依存するAUTO_LEXER属性
属性 | 属性値 | 説明 |
---|---|---|
<language> |
characters(空白で区切られた文字列) |
語形変化のプリフィックスを指定します。カッコで囲んだプリフィックスが基本形とともに保持されます。たとえば、(re) analyze。 |
<language> |
characters(空白で区切られた文字列) |
語形変化のサフィックスを指定します。カッコで囲んだサフィックスが基本形とともに保持されます。たとえば、file(s)。 |
<language> |
characters(空白で区切られた文字列) |
文を区切る句読点を指定します。 |
<language> |
characters(空白で区切られた文字列) |
文を終了しない略称を指定します。 |
表2-17 言語に依存するAUTO_LEXER属性のデフォルト値
属性 | 言語 | デフォルト値 |
---|---|---|
<language> |
すべての言語 |
なし |
<language> |
英語 |
s es er |
<language> |
スペイン語 |
ba n s es |
<language> |
ポルトガル語 |
s es |
<language> |
ドイツ語 |
in innen |
<language> |
フランス語 |
ne e |
<language> |
その他のすべての言語 |
なし |
<language> |
英語 |
. ? ! |
<language> |
カタロニア語、チェコ語、オランダ語、ギリシャ語、ハンガリー語、ポーランド語、ルーマニア語、ロシア語、トルコ語 |
. ? ! - -- |
<language> |
フランス語、ドイツ語、イタリア語、韓国語、ポルトガル語、スペイン語、スウェーデン語 |
, ? ! |
<language> |
日本語 |
|
<language> |
中国語(簡体字) 短縮形: simp_chinese |
|
<language> |
中国語(繁体字) 短縮形: trad_chinese |
|
<language> |
ポーランド語、ルーマニア語、ロシア語、トルコ語 |
e.g. i.e. viz. a.k.a. |
<language> |
カタロニア語 |
R.D. pp. |
<language> |
チェコ語、ギリシャ語、ハンガリー語 |
e.g. i.e. viz. a.k.a. |
<language> |
オランダ語 |
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> |
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> |
フランス語 |
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> |
ドイツ語 |
ca. bzw. e.g. i.e. inkl.Fr.Frl.Mme. Mile.Mag.Stud.Tel.Hr.Hrn. apl.Prof.Prof. |
<language> |
イタリア語 |
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> |
韓国語 |
e.g. i.e. a.k.a.Dr. Mr. Mrs. Ms. Prof. |
<language> |
ポルトガル語 |
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> |
スペイン語 |
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> |
スウェーデン語 |
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の属性
属性 | 属性値 |
---|---|
|
文字 |
|
文字 |
|
文字 |
|
文字 |
|
文字 |
|
文字 |
|
トークンの先頭にある英数字以外の文字(文字列) |
|
トークンの末尾にある英数字以外の文字(文字列) |
|
文字(文字列) |
|
NEWLINE(\n) CARRIAGE_RETURN(\r) |
|
NO(使用禁止) |
|
YES(使用可能) |
|
GENERIC(デフォルト) |
|
SPECIFIC |
|
TRUE FALSE(デフォルト) |
|
NO(使用禁止) |
|
YES(使用可能) |
|
DEFAULT(コンポジット・ワードの索引付けなし、デフォルト) |
|
GERMAN(ドイツ語のコンポジット・ワード索引付け) |
|
DUTCH(オランダ語のコンポジット・ワードの索引付け) |
文字列または文字列値で、数値を使用します。 |
NONE ENGLISH DERIVATIONAL DUTCH FRENCH GERMAN ITALIAN SPANISH CATALAN CZECH GREEK HUNGARIAN POLISH PORTUGUESE ROMANIAN RUSSIAN SWEDISH (「注意」を参照) DERIVATIONAL_NEW (「注意」を参照) DUTCH_NEW (「注意」を参照) ENGLISH_NEW (「注意」を参照) FRENCH_NEW (「注意」を参照) GERMAN_NEW (「注意」を参照) ITALIAN_NEW (「注意」を参照) SPANISH_NEW (「注意」を参照) TURKISH 注意: 注意: このリリースで新規追加された7つの |
|
YES(使用可能) |
|
NO(使用禁止、デフォルト) |
|
YES(使用可能、デフォルト) |
|
NO(使用禁止) |
|
YES(使用可能、デフォルト) |
|
NO(使用禁止) |
|
AUTO(デフォルト) |
|
(任意のグローバリゼーション・サポート対象言語) |
|
GERMAN(ドイツ語の代替スペル) |
|
DANISH(デンマーク語の代替スペル) |
|
SWEDISH(スウェーデン語の代替スペル) |
|
NONE(代替スペルなし、デフォルト) |
|
YES NO(デフォルト) |
- continuation
-
ワードが次の行に続き、そのワードを1つのトークンとして索引付けする必要があることを示す文字を指定します。最も一般的な連結文字はハイフン'-'および円記号'\'です。
- numgroup
-
数字列の中で使用する場合に、1つの大きな数字の集まりをいくつかの桁にグループ分けすることを示す文字を指定します。
たとえば、カンマ','は、数字列の中で使用されている場合、千の位のグループ分けを示すことがあるため、
numgroup
文字として定義されることがあります。 - numjoin
-
数字列の中で使用する場合に、Oracle Textでは数字の文字列を1つの単位またはワードとみなして索引付けするように文字を指定します。
たとえば、ピリオド'.'は、数字列の中で使用される場合、小数点を示すことがあるため、
numjoin
文字として定義されることがあります。注意:
numjoin
およびnumgroup
のデフォルト値は、データベースに指定されたグローバリゼーション・サポート初期化パラメータによって決定されます。通常、
BASIC_LEXER
のレクサー・プリファレンスを作成する場合、numjoin
またはnumgroup
のいずれにも値を指定する必要はありません。 - printjoin
-
英数字以外の文字を指定します。この文字は、ワード内(先頭、中程または末尾)にあれば英数字として処理され、テキスト索引にトークンとともに組み込まれます。連続している
printjoins
も同様に処理されます。たとえば、ハイフン'-'およびアンダースコア'_'文字が
printjoin
として定義されている場合、pseudo-intellectualや_file_などの語句は、pseudo-intellectualおよび_file_としてテキスト索引に格納されます。注意:
printjoin
文字が同時にpunctuation
文字としても定義されている場合は、その文字の直後の文字が標準の英数字であるか、printjoin
文字またはskipjoin
文字として定義されていると、その文字は英数字としてのみ処理されます。 - punctuation
-
ワードの末尾に使用される場合に、文の終わりを示す英数字以外の文字のリストを指定します。デフォルトは、ピリオド'.'、疑問符'?'および感嘆符'!'です。
punctuation
として定義されている文字は、テキストの索引付け前にトークンから削除されます。ただし、punctuation
文字がprintjoin
文字としても定義されている場合は、その文字がトークンの最後の文字である場合にのみ削除されます。たとえば、ピリオド(.)が
printjoin
文字とpunctuation
文字の両方に定義されている場合は、索引付けおよび問合せのときに次のように変換されます。トークン 索引付けされたトークン .doc
.doc
dog.doc
dog.doc
dog..doc
dog..doc
dog.
dog
dog...
dog..
また、
BASIC_LEXER
は、punctuation
文字をnewline
文字およびwhitespace
文字と組み合せて使用し、文/段落検索用の文デリミタおよび段落デリミタを決定します。 - skipjoin
-
英数字以外の文字を指定します。この文字がワード内で使用されている場合は、そのワードを単一のトークンとして識別します。ただし、その文字はテキスト索引内にトークンとともに格納されません。
たとえば、ハイフン文字'-'が
skipjoin
として定義されている場合、ワードpseudo-intellectualは、テキスト索引にpseudointellectualとして格納されます。注意:
printjoin
およびskipjoin
は相互に排他的です。同じ文字を両方の属性に指定できません。 - startjoin/endjoin
-
startjoin
は、トークンの最初の文字として検出された場合、明示的にトークンの始まりを識別する文字を指定します。その文字は、そのすぐ後に続く他のstartjoin
文字と同様に、トークンに対するテキスト索引内のエントリに含まれます。また、startjoin
文字列の最初のstartjoin
文字は、前のトークンを暗黙的に終了させます。endjoin
は、トークンの最後の文字として検出された場合、明示的にトークンの終わりを識別する文字を指定します。その文字は、そのすぐ後に続く他のstartjoin
文字と同様に、トークンに対するテキスト索引内のエントリに含まれます。次の規則は、startjoinsとendjoinsの両方に適用されます。
-
startjoin
/endjoin
に指定された文字は、BASIC_LEXER
のその他の属性には指定できません。 -
startjoin
/endjoin
文字は、トークンの最初または最後にのみ使用できます。
printjoinは、endjoinおよびstartjoinと異なり、使用場所の制限はありません。たとえば、$がstartjoin
またはprintjoin
の場合、$35は1つのトークンとして索引付けられますが、endjoin
として定義されている場合は2つのトークンとして索引付けられます。
- whitespace
-
トークン間で空白として扱われる文字を指定します。
BASIC_LEXER
は、文および段落検索用の文デリミタとして機能する文字列を識別するため、whitespace
文字をpunctuation
文字およびnewline
文字と組み合せて使用します。whitespace
の事前定義のデフォルト値は、space
とtab
です。これらの値は変更できません。whitespace
として文字を指定すると、これらのデフォルト値に追加されます。 - newline
-
テキストの行の終わりを示す文字を指定します。
BASIC_LEXER
は、文および段落検索用の段落デリミタとして機能する文字列を識別するため、newline
文字をpunctuation文字およびwhitespace文字と組み合せて使用します。newline
に対する有効値は、NEWLINE
およびCARRIAGE_RETURN
(改行)のみです。デフォルトはNEWLINE
です。 - base_letter
-
発音区別記号(ウムラウト、セディーユ、揚音アクセントなど)を持つ文字を、テキスト索引に格納する前に、基本形に変換するかどうかを指定します。デフォルトはNO(基本文字変換は使用禁止)です。基本文字変換および
base_letter_type
の詳細は、「基本文字変換」を参照してください。 - base_letter_type
-
GENERIC
またはSPECIFIC
を指定します。GENERIC
値はデフォルトで、基本文字変換の際、全言語に適用する変換表を1つ使用します。基本文字変換およびbase_letter_type
の詳細は、「基本文字変換」を参照してください。 - override_base_letter
-
base_letter
とalternate_spelling
を同時に有効にすると、シリアル変換によって予期しない結果が生じないように、base_letter
のオーバーライドが必要になることがあります。「代替スペル機能のオーバーライド」を参照してください。デフォルトはFALSE
です。 - mixed_case
-
レクサーがトークンをテキストに表示されたままにするか、またはすべて大文字に変換するかを指定します。デフォルトではNO(トークンはすべて大文字に変換される)です。
注意:
Oracle Textでは、ワード問合せを、問合せされる索引の大/小文字の区別に確実に一致させます。そのため、テキスト索引に対して大/小文字の区別を有効にすると、その索引に対する問合せでは常に大文字と小文字が区別されます。
- composite
-
GERMAN
またはDUTCH
テキストに対して、コンポジット・ワードの索引付けを使用可能または使用禁止にするかどうかを指定します。デフォルトはDEFAULT
(コンポジット・ワードの索引付けは使用禁止)です。ドイツ語ディクショナリで通常1エントリであるワードは、複合語幹に分割されませんが、ディクショナリのエントリでないワードは、複合語幹に分割されます。
索引付けされた複合語幹を取得するには、ステミング問合せ(例: $bahnhof)を入力する必要があります。ワードリスト・ステマーの言語は、複合語幹の言語と一致している必要があります。
2.5.2.2 ステミング・ユーザー・ディクショナリ
独自の言語のユーザー・ディクショナリを作成し、ワードの分解方法をカスタマイズできます。表2-20にこのユーザー・ディクショナリを示します。
表2-20 ステミング・ユーザー・ディクショナリ
ディクショナリ | ステマー |
---|---|
|
フランス語 |
|
ドイツ語 |
|
オランダ語 |
|
イタリア語 |
|
スペイン語 |
|
英語と派生語 |
ステミング・ユーザー・ディクショナリは、表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
に設定できます。CATSEARCH
でABOUT
問合せを入力する場合は、CONTEXT
文法による問合せテンプレートを使用してください。 - prove_themes
-
テーマを検証するには、
YES
を指定します。テーマの検証では、ドキュメント内の関連テーマが検索されます。関連テーマが検索されない場合、親テーマはそのドキュメントから排除されます。テーマの検証は大規模なドキュメントに対して使用可能です。ワード数の少ない短い記述のテキストで親テーマが検証されることはほとんどなく、結果的に
ABOUT
問合せによる再コールでのパフォーマンスが低下します。テーマの検証によって、
ABOUT
問合せの精度が向上し、再コール数が減少(戻される行が減少)します。ABOUT
問合せでの再コールが増加し、検索精度が低下する可能性がある場合は、テーマの検証を使用禁止にできます。デフォルトはYES
です。prove_themes
属性は、CONTEXT
索引およびCTXRULE
索引に対してサポートされています。 - theme_language
-
index_themes
がYES
に設定されている場合は、テーマ生成にどのナレッジ・ベースを使用するかを指定します。index_themes
がNO
に設定されている場合は、このパラメータを設定しても何も影響はありません。任意のグローバリゼーション・サポート対象言語または
AUTO
を指定します。指定する言語のナレッジ・ベースが必要です。このリリースで提供されているのは、英語とフランス語のナレッジ・ベースのみです。それ以外の言語では、独自のナレッジ・ベースを作成できます。デフォルトは
AUTO
であり、システムがこのパラメータを環境の言語に対応するように設定します。 - index_stems
-
語幹索引付けに使用するステマーを指定します。NONE、ARABIC、CATALAN、CROATIAN、CZECH、DANISH、DERIVATIONAL、DUTCH、ENGLISH、FINNISH、FRENCH、GERMAN、HEBREW、HUNGARIAN、ITALIAN、NORWEGIAN、POLISH、PORTUGUESE、ROMANIAN、SLOVAK、SLOVENIAN、SPANISHおよびSWEDISHから、ステマーを1つ選択します。
索引付け時に、トークンが通常の形式に加えて、単一の基本形にステミングされます。語幹索引付けによって、ステミング($)問合せ(例: $computed)の問合せパフォーマンスが向上します。
注意:
index_stems
属性を、表2-19に示すIDが8から33のいずれかの言語に設定すると、BASIC_WORDLIST
のstemmer
属性は無視され、問合せ時にはBASIC_LEXER
で使用するステマーが使用されて、指定の問合せ語句の語幹が判断されます。
- index_text
-
ワード情報の索引付けには、
YES
を指定します。index_themes属性およびindex_text属性の両方にNO
を指定することはできません。デフォルトは、
YES
です。 - alternate_spelling
-
GERMAN
、DANISH
、SWEDISH
のいずれかを指定して、これらの言語のうちの1つの代替スペルを使用可能にします。代替スペルを使用可能にすると、任意の代替形式でワードを問合せできます。デフォルトでは、代替スペルはオフになっていますが、Oracleが
admin/defaults
で提供している言語固有のスクリプト(ドイツ語:drdefd.sql
、オランダ語:drdefdk.sql
、スウェーデン語:drdefs.sql
)では、代替スペルがオンになっています。インストールでこれらのスクリプトを使用している場合、代替スペルがオンになります。ただし、代替スペルがない場合は、NONE
を指定します。Oracle Textが使用する代替スペルの規則については、「代替スペル」を参照してください。 - new_german_spelling
-
BASIC_LEXER
を使用する問合せが、ドイツ語のワードの従来のスペルと改良された(新規の)スペルを戻すかどうかを指定します。new_german_spelling
がYES
に設定されている場合、従来の形式と新規の形式のワードが索引付けされます。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.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の属性
属性 | 属性値 |
---|---|
|
ASCII7テキストの大/小文字混在の検索を有効にします(例: catおよびCat)。使用可能な値は |
2.5.5 CHINESE_LEXER
CHINESE_LEXER
型は、テキスト索引作成用の中国語(繁体字および簡体字)テキストのトークンを識別します。
このレクサーは、CHINESE_VGRAM_LEXER
と比較して次の利点があります。
-
小型の索引の生成
-
問合せ応答時間の短縮
-
実ワード・トークンの生成による問合せ精度の向上
-
ストップワードのサポート
CHINESE_LEXER
は異なるアルゴリズムを使用してトークンを生成するため、索引付けに要する時間は、CHINESE_VGRAM_LEXER
を使用した場合より長くなります。
データベース・キャラクタ・セットが、Oracleでサポートしている中国語キャラクタ・セットまたはUnicodeキャラクタ・セットである場合は、このレクサーを使用できます。
表2-23 CHINESE_LEXERの属性
属性 | 属性値 |
---|---|
|
ASCII7テキストの大/小文字混在の検索を有効にします(例: catおよびCat)。使用可能な値は |
中国語レクサーで使用される既存のレキシコン(辞書)を変更するか、ctxlc
コマンドを使用して独自の中国語レキシコンを作成できます。
2.5.6 JAPANESE_VGRAM_LEXER
JAPANESE_VGRAM_LEXER
型は、テキスト索引作成用の日本語テキストのトークンを識別します。このレクサーは、STEM($)演算子をサポートしています。
表2-24 JAPANESE_VGRAM_LEXERの属性
属性 | 属性値 |
---|---|
|
索引付けられたトークンとして全角のスラッシュや全角の中黒など、日本語の特定の空白文字を考慮するかどうかを指定します。 |
|
ASCII7テキストの大/小文字混在の検索を有効にします(例: catおよびCat)。使用可能な値は |
|
日本語のVGRAMレクサーでbigramを有効にするには、 |
|
英数字以外の文字を指定します。この文字は、ワード内(先頭、中程または末尾)にあれば英数字として処理され、テキスト索引にトークンとともに組み込まれます。これには、連続的に発生するprintjoinが含まれます。基本レクサー「printjoin」を参照してください。 |
|
英数字以外の文字を指定します。この文字がワード内で使用されている場合は、そのワードを単一のトークンとして識別します。ただし、その文字はテキスト索引内にトークンとともに格納されません。基本レクサー「skipjoin」を参照してください。 |
データベースで次のいずれかのキャラクタ・セットを使用する場合は、このレクサーを使用できます。
PRINTJOINおよびSKIPJOIN文字のルール
-
中国語、日本語または韓国語の文字、もしくは全角の非英数字を含まない、非英数字のASCII文字のみを使用できます。
-
単一の非英数字または複数の非英数字を、一度に指定できます。
-
使用できない文字を入力すると、printjoin/skipjoinは無視されます。これには、英数字、CJK(中国語、日本語、韓国語)の文字、または全角非英数字が含まれます。
-
非英数字を複製すると、複製されたエントリは無視されます。
例
例2-6 JAPANESE_VGRAM_LEXERでprintjoinを使用
この例では、ハイフンおよびアンダースコア文字をprintjoin
に定義します。これらの文字はテキスト索引のトークンに含まれます。したがって、web-siteまたはweb_siteなどの語句は、web-siteおよびweb_siteとして索引付けされます。websiteを検索する問合せは、web-siteまたはweb_siteを含むドキュメントを戻しません。
ctx_ddl.create_preference('mylex', 'JAPANESE_VGRAM_LEXER');
ctx_ddl.set_attribute('mylex', 'printjoins', '_-');
例2-7 JAPANESE_VGRAM_LEXERでskipjoinを使用
この例では、ハイフンおよびアンダースコア文字をskipjoin
に定義します。これらの文字はテキスト索引のトークンに含まれません。したがって、web-siteまたはweb_siteなどの語句は、websiteとして索引付けされます。websiteを検索する問合せは、web-siteまたはweb_siteを含むドキュメントを戻します。
ctx_ddl.create_preference('mylex', 'JAPANESE_VGRAM_LEXER');
ctx_ddl.set_attribute('mylex', 'skipjoins', '_-');
2.5.7 JAPANESE_LEXER
JAPANESE_LEXER
型は、テキスト索引作成用の日本語テキストのトークンを識別します。このレクサーは、STEM($)演算子をサポートしています。
このレクサーは、JAPANESE_VGRAM_LEXER
と比較して次の利点があります。
-
小型の索引の生成
-
問合せ応答時間の短縮
-
実ワード・トークンの生成による問合せ精度の向上
JAPANESE_LEXER
は異なるアルゴリズムを使用してトークンを生成するため、索引付けに要する時間は、JAPANESE_VGRAM_LEXER
を使用した場合より長くなります。
日本語レクサーで使用される既存のレキシコン(辞書)を変更するか、ctxlc
コマンドを使用して独自の日本語レキシコンを作成できます。
表2-25 JAPANESE_LEXERの属性
属性 | 属性値 |
---|---|
|
全角のスラッシュや全角の中黒など、日本語の特定の空白文字を無視するには、 |
|
ASCII7テキストの大/小文字混在の検索を有効にします(例: catおよびCat)。使用可能な値は |
JAPANESE_LEXER
は、次のキャラクタ・セットをサポートしています。
テキスト索引の作成用に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ディクショナリ
ディクショナリ | ファイル |
---|---|
システム |
|
文法 |
|
ストップワード |
|
ユーザー定義 |
|
文法、ユーザー定義およびストップワードの各ディクショナリは、KSC 5601またはMSWIN949キャラクタ・セットを使用して作成する必要があります。これらのディクショナリは定義済のルールを使用して変更できます。システム・ディクショナリは変更できません。
未登録のワードは、ユーザー定義ディクショナリ・ファイルに追加できます。新しいワードを指定するルールは、このファイルに含まれています。
データベースで次のいずれかのキャラクタ・セットを使用する場合は、KOREAN_MORPH_LEXER
を使用できます。
KOREAN_MORPH_LEXER
は、大/小文字混在の検索を有効にします。
2.5.8.2 KOREAN_MORPH_LEXERのユニコードのサポート
KOREAN_MORPH_LEXER
は、次のユニコードをサポートします。
-
Unicodeで定義されたKSC5601以外の韓国語の文字のワード
-
追加文字
関連項目:
追加文字の詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。
韓国語ドキュメントには、KSC5601以外の文字が使用されているものがあります。KOREAN_MORPH_LEXER
は、11,172個の有効な韓国語(ハングル)文字をすべて認識できるため、このような文書も、UTF8またはAL32UTF8キャラクタ・セットを使用することで解析できます。
サロゲート文字を抽出するには、データベースにAL32UTF8キャラクタ・セットを使用します。デフォルトでは、KOREAN_MORPH_LEXER
は、シリーズごとの1つのトークンとして、すべてのシリーズのサロゲート文字を抽出します。
韓国語Unicodeサポートの制限事項
ハンジャからハングル(韓国語)への変換の場合、KOREAN_MORPH_LEXER
は、KSC5601に定義された4,888個のハンジャ文字のみをサポートしています。
2.5.8.3 KOREAN_MORPH_LEXERの属性
KOREAN_MORPH_LEXER
を使用する場合は、次の属性を指定できます。
表2-27 KOREAN_MORPH_LEXERの属性
属性 | 属性値 |
---|---|
動詞、形容詞および副詞の索引付けに対して、 |
|
1つの音節の索引付けに対して、 |
|
数の索引付けに対して、 |
|
ユーザー・ディクショナリの索引付けに対して、 |
|
ストップワード・ディクショナリの使用に対して、 |
|
コンポジット名詞の索引付けスタイルを指定します。 コンポジット名詞のみを索引付けするには、 コンポジット名詞の名詞コンポーネントをすべて索引付けするには、 コンポジット名詞自体の他にコンポジット名詞の単一名詞コンポーネントを索引付けするには、
|
|
語形分析に対して、 |
|
英語の大文字への変換に対して、 |
|
ハンジャ文字を索引付けするには、 |
|
韓国語の16音節を超える長いワードを索引付けするには、 |
|
Unicode(2バイト地域でのみ使用)の日本語の文字を索引付けするには、 |
|
英数字文字列を索引付けするには、 |
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の属性
属性 | 属性値 |
---|---|
|
ストアド・プロシージャの名前。デフォルトはありません。 |
|
|
|
ストアド・プロシージャの名前。デフォルトはありません。 |
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では、トークン化するドキュメントまたはストップリスト・オブジェクトのストップワードをOracle Textからストアド・プロシージャに渡し、同様に、トークンをVARCHAR2
でストアド・プロシージャからOracle Textに渡すVARCHAR2
インタフェースについて説明します。
ユーザー定義レクサーの索引付けプロシージャでは、索引付けする列の全ドキュメントが32512バイト以下で、そのトークンが32512バイト以下で表される場合は、このインタフェースを使用してください。この場合、表2-31に示したCLOB
インタフェースも使用できますが、通常、VARCHAR2
インタフェースはCLOB
インタフェースよりも高速に実行されます。
このプロシージャは、次のパラメータを使用して定義する必要があります。
表2-30 INDEX_PROCEDURESのVARCHAR2インタフェース
パラメータ順序 | パラメータ・モード | パラメータのデータ型 | 説明 |
---|---|---|---|
1 |
|
|
トークン化するドキュメントまたはストップリスト・オブジェクトのストップワード。 ドキュメントが32512バイトを超える場合は、ドキュメント・レベルの索引付けエラーがレポートされます。 |
2 |
|
|
XMLとしてコード化されたトークン。 ドキュメントにトークンが含まれていない場合は、NULLを戻すか、または戻されるXMLドキュメントのトークン要素に子要素を含めないでください。 データのバイト長は、32512以下にしてください。 パフォーマンスを改善するには、このパラメータの宣言時に このプロシージャが戻すXMLドキュメントには不要なwhitespace文字(通常、可読性の向上のために使用する)を含めないでください。これによって、XMLドキュメントのサイズが縮小され、結果として送信時間が短縮されます。 パフォーマンス向上のために、index_procedureの実行時に、対応するXML Schemaに対するXMLドキュメントの妥当性はチェックされません。 このパラメータは、パフォーマンスの目的で |
3 |
|
|
トークン化するドキュメントでのトークンの文字オフセットと文字長がOracle Textで必要な場合、このパラメータは トークン化するドキュメントで検出されたトークンの文字オフセットと文字長がOracle Textで不要な場合、このパラメータは |
2.5.9.5.2 CLOBインタフェース
表2-31では、トークン化するドキュメントまたはストップリスト・オブジェクトのストップワードをCLOB
でOracle Textからストアド・プロシージャに渡し、同様に、トークンをCLOB
でストアド・プロシージャからOracle Textに渡すCLOB
インタフェースについて説明します。
ユーザー定義レクサーの索引付けプロシージャでは、索引付けする列の1つ以上のドキュメントが32512バイトを超える場合、または対応するトークンが32512バイトを超えるバイト数で表される場合は、このインタフェースを使用してください。
表2-31 INDEX_PROCEDUREのCLOBインタフェース
パラメータ順序 | パラメータ・モード | パラメータのデータ型 | 説明 |
---|---|---|---|
1 |
|
|
トークン化するドキュメントまたはストップリスト・オブジェクトのストップワード。 |
2 |
|
|
XMLとしてコード化されたトークン。 ドキュメントにトークンが含まれていない場合は、NULLを戻すか、または戻されるXMLドキュメントのトークン要素に子要素を含めないでください。 パフォーマンスを改善するには、このパラメータの宣言時に このプロシージャが戻すXMLドキュメントには不要なwhitespace文字(通常、可読性の向上のために使用する)を含めないでください。これによって、XMLドキュメントのサイズが縮小され、結果として送信時間が短縮されます。 パフォーマンス向上のために、index_procedureの実行時に、対応するXML Schemaに対するXMLドキュメントの妥当性はチェックされません。 このパラメータは、パフォーマンスの目的で |
3 |
|
|
トークン化するドキュメントでのトークンの文字オフセットと文字長がOracle Textで必要な場合、このパラメータは トークン化するドキュメントで検出されたトークンの文字オフセットと文字長がOracle Textで不要な場合、このパラメータは |
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 |
|
|
トークン化する問合せワード。 |
2 |
|
|
問合せワード内のワイルド・カード文字(%および_)の文字オフセット。Oracle Textによって渡された問合せワードにワイルド・カード文字が含まれていない場合、この索引付き表は空になります。 問合せワード内のワイルド・カード文字は、ワイルド・カード問合せ機能が正しく実行されるように、戻されるトークンに保持する必要があります。 文字オフセットは0(ゼロ)を基準にしています。オフセット情報はUSC-2コードポイント・セマンティクスに準拠します。 |
3 |
|
|
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以外で定義された要素および属性の使用
-
文字参照(例: ট)
-
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 preceded 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 |
数値トークンを表します。この要素の内容は数値自体です。ストップリスト・プリファレンスに このトークン型のサポートはオプションです。このトークン型をサポートしない場合、 |
eos |
文の終わりを表すトークンです。この情報は、 このトークン型のサポートはオプションです。このトークン型をサポートしない場合、 |
eop |
段落の終わりを表すトークンです。この情報は、 このトークン型のサポートはオプションです。このトークン型をサポートしない場合、 |
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<2500.00 </word> <word> AND </word> <word> job </word> <word> F&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機能の この長さは、データストアでフェッチされたドキュメントではなく、ユーザー定義レクサーの索引付けプロシージャに渡された文字ドキュメントに対するものです。データストアでフェッチされたドキュメントは、フィルタ・オブジェクトまたはセクション・グループで事前処理されてから、ユーザー定義レクサーの索引付けプロシージャに渡される場合があります。 長さの情報は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を参照してください。 -
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属性
属性 | 説明 |
---|---|
|
|
|
問合せ内の 要素の内容に含まれる最初の文字のオフセットは0(ゼロ)です。オフセット情報はUSC-2コードポイント・セマンティクスに準拠します。 トークンにワイルド・カード文字が含まれていない場合、この属性は指定できません。 |
例
問合せワード: pseudo-%morph%
トークン:
<tokens> <word> PSEUDO </word> <word wildcard="1 7"> %MORPH% </word> </tokens>
問合せワード: <%>
トークン:
<tokens> <word wildcard="5"> <%> </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_LEXER
には次の属性があります。
表2-36 WORLD_LEXERの属性
属性 | 属性値 |
---|---|
|
テキストの大/小文字混在の検索を有効にします(例: catおよびCat)。使用可能な値は |
|
英数字以外の文字を指定します。この文字は、ワード内(先頭、中程または末尾)にあれば英数字として処理され、テキスト索引にトークンとともに組み込まれます。これには、連続的に発生するprintjoinが含まれます。基本レクサー「printjoin」を参照してください。 |
|
英数字以外の文字を指定します。この文字がワード内で使用されている場合は、そのワードを単一のトークンとして識別します。ただし、その文字はテキスト索引内にトークンとともに格納されません。基本レクサー「skipjoin」を参照してください。 |
PRINTJOINおよびSKIPJOIN文字のルール
JAPANESE_VGRAM_LEXERの「PRINTJOINおよびSKIPJOIN文字のルール」を参照してください。
WORLD_LEXERの例
WORLD_LEXER
を使用して索引を作成する例を次に示します。
exec ctx_ddl.create_preference('MYLEXER', 'world_lexer'); create index doc_idx on doc(data) indextype is CONTEXT parameters ('lexer MYLEXER stoplist CTXSYS.EMPTY_STOPLIST');
2.6 ワードリスト型
ワードリスト・プリファレンスによって、使用している言語に対するステミングやファジー・マッチングなどの問合せオプションを使用可能にします。また、ワードリスト・プリファレンスを使用すると、サブストリングやプリフィックス索引付けを使用可能にでき、CONTAINS
およびCATSEARCH
によるワイルド・カード問合せのパフォーマンスが改善されます。
ワードリスト・プリファレンスを作成するには、BASIC_WORDLIST
を使用する必要があります。使用できるのはこの型のみです。
2.6.1 BASIC_WORDLIST
BASIC_WORDLIST
型を使用して、テキスト索引に対するステミングおよびファジー・マッチングを使用可能にしたり、プリフィックス索引を作成することができます。
次の表に、BASIC_WORDLIST
の属性を示します。
表2-37 BASIC_WORDLISTの属性
- stemmer
-
テキスト問合せでワード・ステミングに使用するステマーを指定します。
STEMMER
に対して値を指定しない場合、デフォルトはENGLISH
です。AUTO
を指定すると、データベース・セッションの言語設定に従って、システムが自動的にステミング言語を設定します。データベース言語がAMERICAN
またはENGLISH
の場合は、ENGLISH
ステマーが自動的に使用されます。それ以外の場合は、データベース・セッション言語にマップされたステマーが使用されます。言語に対してステマーが存在しない場合、デフォルトは
NULL
です。NULL
ステマーを使用すると、STEM演算子は問合せで無視されます。独自のステミング・ディクショナリを作成できます。詳細は、「ステミング・ユーザー・ディクショナリ」を参照してください。
注意:
次の場合は、
BASIC_WORDLIST
プリファレンスのSTEMMER
属性が無視されます。-
BASIC_LEXER
プリファレンスのINDEX_STEMS
を、BOKMAL
、CATALAN
、CROATIAN
、CZECH
、DANISH
、FINNISH
、GREEK
、HEBREW
、HUNGARIAN
、NYNORSK
、POLISH
、PORTUGUESE
、ROMANIAN
、RUSSIAN
、SERBIAN
、SLOVAK
、SLOVENIAN
、SWEDISH
、ENGLISH_NEW
、DERIVATIONAL_NEW
、DUTCH_NEW
、FRENCH_NEW
、GERMAN_NEW
、ITALIAN_NEW
またはSPANISH_NEW
に設定した場合または
-
AUTO_LEXER
プリファレンスのINDEX_STEMS
属性をYES
に設定した場合または
-
前述の1または2と同じ設定で、データベース・セッション言語に対して
MULTI_LEXER
がSUB_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表に格納されます。たとえば、
TOKEN
やTOY
は、通常、$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_letter
とndata_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などの準拠している名前を分割または結合して書き込みます。索引付けエンジンは、このプリファレンスで指定された名前の不変化詞を検索する場合に名前を分割したバージョンと結合したバージョンの両方の索引データを生成します。高度な再コールの問合せ処理も同様です。
- reverse_index
-
逆索引を使用すると、左切捨て検索条件を短時間で検索できます。
索引付られたワードは、索引
($X)
を持つトークン表($I)
に格納されます。通常、“%xxx”のような検索条件を使用して問い合せる場合、$X
索引は使用できません。つまり、$I
表の全表スキャンが必要になり、検索のパフォーマンスが低下します。REVERSE_INDEX
をTRUE
に設定すると、追加の索引($V)
がトークンの逆形態で作成されます。これにより、左切捨て検索条件での索引付け検索が可能になり、そのような検索語の問合せのパフォーマンスが向上します。REVERSE_INDEX
により、検索"oracle %base"内の2番目のワードのように前方ワイルドカードを使用して、トークンの検索が速くなります。"oracle %bas%"のように、前方ワイルドカードと後方ワイルドカード両方がトークンにある場合、この属性は働きません。かわりにSUBSTRING_INDEX
オプションを使用します。属性をワードリスト・プリファレンスの一部として指定し、
TRUE
またはFALSE
に設定します。デフォルトはFALSE
です。この属性を設定するには、他のワードリスト・プリファレンスと同様に、CTX_DDL.SET_ATTRIBUTE
プロシージャまたはALTER INDEX REBUILD
文を使用します。構文
ctx_ddl.set_attribute(worlist_pref_name, 'REVERSE_INDEX', BOOLEAN);
- worlist_pref_name
- 最初の引数をワードリスト・プリファレンスの名前に指定します。
- REVERSE_INDEX
- ワードリスト・プリファレンスの名前を
REVERSE_INDEX
に指定します。 - BOOLEAN
- 属性を、
TRUE
またはFALSE
に設定します。デフォルトはFALSE
です。
次の例では、ワードリスト・プリファレンスを作成し、
REVERSE_INDEX
をTRUE
に設定します。exec ctx_ddl.create_preference(‘wrdlst’, ‘BASIC_WORDLIST’); exec ctx_ddl.set_attribute(‘wrdlst’, ‘REVERSE_INDEX’, ‘TRUE’);
次のトレースが、逆索引
$V
に追加されています。これを使用して、この索引を問合せたタイミングおよび使用方法を追跡できます。トレースID トレース名 説明 37 TRACE_QRY_VV_TIME $Vカーソルの実行に要した時間 38 TRACE_QRY_VF_TIME $Vからの列のフェッチに要した時間 39 TRACE_QRY_V_ROWS $Vでフェッチされたメタデータの列の数
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 記憶域型
型 | 説明 |
---|---|
テキスト索引を構成するデータベース表および索引に対して、表領域および作成パラメータを指定するために使用する索引付けの型 |
2.7.1 BASIC_STORAGE
BASIC_STORAGE
の索引付けの型は、テキスト索引を構成するデータベース表および索引に対する表領域および作成パラメータを指定します。
指定した句は、索引作成時に内部のCREATE
TABLE
(i_index_clause
の場合はCREATE
INDEX
)文に追加されます。記憶域、LOB記憶域、パーティション化などの句を指定できます。ただし、索引構成表句は指定しないでください。
表に対する記憶域句にinmemory
を指定すると、テキスト索引表をインメモリー列ストア(IM列ストア)に格納できます。IM列記憶域では、次の記憶域属性で表される表の型がサポートされています。I_TABLE_CLAUSE
、R_TABLE_CLAUSE
、G_TABLE_CLAUSE
、O_TABLE_CLAUSE
、D_TABLE_CLAUSE
、SN_TABLE_CLAUSE
およびE_TABLE_CLAUSE
。
この項では、次の項目について説明します。
関連項目:
-
CREATE
INDEX
文を指定する方法の詳細は、Oracle Database SQL言語リファレンスを参照してください -
CREATE
TABLE
文を指定する方法の詳細は、Oracle Database SQL言語リファレンスを参照してください
2.7.1.1 BASIC_STORAGEの属性
BASIC_STORAGE
には、表2-39に示す属性があります。
表2-39 BASIC_STORAGEの属性
属性 | 属性値 |
---|---|
|
IO操作に広く使用される データ記憶域がSSDの場合、問合せパフォーマンスはそれほど向上しません。
|
|
$D表の記憶域句を指定するパラメータ句。 正引き索引の機能を使用する場合に、この句を指定できます。正引き索引の機能を使用すると、スニペットを計算するときの問合せパフォーマンスが向上します。
$D表は、 |
|
dr$索引名$E表作成用のパラメータ句。内部 |
|
正引き索引の機能を有効にする場合は、これをTRUEに設定します。これによって$O表が作成されます。$O表には、$I表のトークン・オフセットから、索引付けされているドキュメントのキャラクタ・オフセットへのマッピング情報が格納されます。 デフォルトはFALSEです。 |
|
$G表の$H Bツリー索引のパラメータ句。 内部CREATEINDEX文の終わりに追加するstorage句およびtablespace句を指定します。 STAGE_ITAB索引オプションでCONTEXT索引を作成すると、$H Bツリー索引付きで空の$G表が作成されます。DML操作で広く使用される |
|
$G表のパラメータ句。 内部CREATETABLE文の終わりに追加するstorage句およびtablespace句を指定します。 STAGE_ITAB索引オプションでCONTEXT索引を作成すると、$H Bツリー索引付きで空の$G表が作成されます。DML操作で広く使用される |
dr$索引名$X索引作成用のパラメータ句。内部 この圧縮によってディスク領域が節約され、問合せパフォーマンスが向上するため、デフォルトをオーバーライドする場合は、パラメータ句に |
|
|
$I表のdr$ROWID列に対する$R索引のstorage句を指定するパラメータ句。内部 この句は、 |
dr$索引名$I表作成用のパラメータ句。内部 I表は索引データ表です。 注意: $I LOBに対して「disable storage in row」を指定しないことをお薦めします。指定すると、問合せパフォーマンスが大幅に低下します。 |
|
dr$索引名$K表作成用のパラメータ句。内部 K表はキーマップ表です。 |
|
dr$索引名$N表作成用のパラメータ句。内部 N表はネガティブリスト表です。 |
|
|
$O表のstorage句を指定するパラメータ句。 正引き索引の機能を使用する場合に、この句を指定できます。正引き索引の機能を使用すると、スニペットを計算するときの問合せパフォーマンスが向上します。
|
内部 |
|
問合せフィルタ・キャッシュの最大サイズをバイト単位で指定するパラメータ句。問合せフィルタ・キャッシュは、共有プールから割り当てられるため、その最大サイズは共有プールのサイズより小さく設定する必要があります。この記憶域パラメータをパーティション・レベルで設定すると、索引レベルで暗黙的に設定されます。 デフォルトは0です。 |
|
dr$索引名$R表作成用のパラメータ句。内部 R表はROWID表です。 デフォルト句は、 この属性を変更する場合は、パフォーマンスを向上させるために、この句を必ず含めてください。 |
|
|
* パフォーマンス上の理由から、$S表は、データベース・ブロック・サイズが4KB以上の表領域に、オーバーフロー・セグメントと S表は、
|
|
ドキュメントを スニペットの計算中に問合せパフォーマンスを向上させる正引き索引の機能を使用するこの句を指定します。 ドキュメントのコピーをプレーン・テキスト形式で ドキュメントのコピーをフィルタ(HTML)形式で デフォルトは |
|
basic_storage属性を使用して ドキュメント・サイズが、この属性に指定したサイズより大きい場合は、この属性に指定したサイズまで切り捨てられたバージョンのドキュメントが、
デフォルトは0で、サイズにかかわらずドキュメント全体が 注意: |
|
IO操作に広く使用され、問合せが主に1つのワードまたはブール値問合せである
|
|
索引付られた既知のすべてのデータがシングルバイトである場合、パフォーマンスが向上する記憶域オプションです。
|
|
$R列のサイズを小さくする記憶域属性。パラレルDMLおよび問合せワークロード中の、DMLおよび問合せのパフォーマンスが向上します。これにより、DML中のロック競合が減少し、DMLパフォーマンスが向上します。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DML操作に広く使用される
|
|
$G( $G表の列の数が設定を超過すると、処理が開始されすべてのデータを$G表から$I表へ移動します。移動の際にデータは最適化されます。SYNC(ON COMMIT)を予想外に長い時間使用すると、特定のSYNC操作またはコミットが発生することに注意してください。これは、別の処理により挿入されたたくさんの$G列を移動しているためです。これを避けるためには、 自動最適化ジョブをスケジュールするには、
関連項目: SYNC_INDEX |
stage_itab_max_parallel |
新しい記憶域オプションは、 並列度のデフォルトの値は16です。 |
|
内部 |
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)'); ctx_ddl.set_attribute('mystore', 'U_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;
SINGLE_BYTEデータ索引付け記憶域の属性
構文
ctx_ddl.set_attribute(storage_pref_name, 'SINGLE_BYTE', BOOLEAN);
- storage_pref_name
- 最初の引数を記憶域プリファレンスの名前に指定します。
- SINGLE_BYTE
- 記憶域の属性名を、
SINGLE_BYTE
またはsingle_byte
に指定します。 - BOOLEAN
- 属性が設定されているかどうかを示します。デフォルト値は、
FALSE
です。ドキュメントがシングルバイトまたはマルチバイトのどちらで格納されているか、データベース・キャラクタ・セットが識別することを意味します。
次の例は、記憶域プリファレンスを設定し、single_byte
記憶域属性を有効化します。
exec ctx_ddl.create_preference('mysto', 'basic_storage'); ctx_ddl.set_attribute('mysto', 'single_byte', 'TRUE');
SMALL_R_ROW記憶域の属性
構文
ctx_ddl.set_attribute(storage_pref_name, 'SMALL_R_ROW', BOOLEAN);
- storage_pref_name
- 最初の引数を記憶域プリファレンスの名前に指定します。
- SMALL_R_ROW
- 記憶域の属性名を、
SMALL_R_ROW
またはsmall_r_row
に指定します。 - BOOLEAN
- 属性が設定されているかどうかを示します。デフォルト値は、
TRUE
です。
次の例は、記憶域プリファレンスを設定し、small_r_row
記憶域属性を有効化します。
begin ctx_ddl.create_preference('sto', 'basic_storage'); ctx_ddl.set_attribute('sto', 'small_r_row', 'T', end;
既存の索引でsmall_r_row
機能を有効化または無効化するには:
ALTER INDEX index_name rebuild PARAMETERS('replace storage sto');
デフォルトはsmall_r_row=TRUE
です。ただし、以前のリリースでは、デフォルトはsmall_r_row=FALSE
でした。
2.8 セクション・グループ型
ドキュメント・セクションに対してWITHIN
問合せを入力するには、セクションを定義する前に、セクション・グループを作成する必要があります。セクション・グループは、CREATE INDEXのPARAMETERS句で指定します。
この項では、次の項目について説明します。
2.8.1 セクション・グループの作成のためのセクション・グループ型
セクション・グループを作成する場合は、CTX_DDL.CREATE_SECTION_GROUPプロシージャを使用して次のグループ・タイプのいずれかを指定できます。
表2-40 セクション・グループ型
型 | 説明 |
---|---|
|
どのセクションも定義しないか、または |
|
このグループ・タイプを使用して、開始および終了タグが 注意: このグループ・タイプでは、対になっていないカッコ、コメント・タグおよび属性などの入力はサポートされません。これらを入力するには、 |
|
このグループ・タイプを使用して、HTMLドキュメントを索引付けし、HTMLドキュメントのセクションを定義します。 |
このグループを使用してJSON対応コンテキスト索引を作成します。 |
|
|
このグループ・タイプを使用して、XMLドキュメントを索引付けし、XMLドキュメントのセクションを定義します。索引付けされるセクションはすべて、このグループに対して手動で定義する必要があります。 |
|
このグループ・タイプを使用して、XMLドキュメントの開始タグ/終了タグに対して自動的にゾーン・セクションを作成します。XMLタグから導出されるセクション名は、XML内と同様に大/小文字が区別されます。 属性セクションは、属性を持つXMLタグに対して自動的に作成されます。属性セクションは、tag@attributeという形式でネーミングされます。
停止セクション、空のタグ、処理命令およびコメントは、索引付けされません。 自動セクション・グループには次の制限事項が適用されます。
|
|
このグループ・タイプを使用して、XMLドキュメントを索引付けします。このタイプは、 相違点は、このセクション・グループを使用すると、 |
|
このグループ・タイプを使用して、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.9 分類型
次の分類型を使用して、CTS_CLS.TRAIN
およびCTXRULE
索引作成のプリファレンスを作成します。
注意:
Oracle Database Express Edition (Oracle Database XE)では、データ・マイニング・オプションが使用できないため、RULE_CLASSIFIER
、SVM_CLASSIFIER
およびSENTIMENT_CLASSIFIER
はサポートされていません。これは、KMEAN_CLUSTERING
も同様です。
2.9.1 RULE_CLASSIFIER
RULE_CLASSIFIER
型を使用して、問合せルール生成プロシージャCTX_CLS.TRAIN
およびCTXRULE
作成のプリファレンスを作成します。この型を使用して生成されるルールは基本的に問合せ文字列で、簡単に調べることができます。この分類によって生成された問合せは、AND
、NOT
またはABOUT
演算子を使用できます。WITHIN
演算子は、フィールド・セクションに対する問合せの場合のみサポートされています。
表2-41に、RULE_CLASSIFIER
型の属性を示します。
表2-41 RULE_CLASSIFIERの属性
属性 | データ型 | デフォルト | 最小値 | 最大値 | 説明 |
---|---|---|---|---|---|
|
I |
50 |
1 |
99 |
ルール生成のしきい値(パーセント)を指定します。ルールは、その信頼度レベルがしきい値を超えた場合のみ出力されます。 |
|
I |
100 |
20 |
2000 |
各クラスについて、関連語句のリストがルール生成のために選択されます。各クラスについて選択可能な語句の最大数を指定します。 |
|
I |
500 |
10 |
4000 |
トレーニング用のメモリー使用量(MB)を指定します。大きい値を指定すると、パフォーマンスが向上します。 |
|
F |
0.001 |
0 |
0.90 |
語句選択のしきい値を指定します。関連語句を選択する際の2つのステップを導く2つのしきい値があります。このしきい値は、最初のステップの動作を制御します。このステップでは候補語句が選択されます。この候補語句は、次のステップでさらに検討されます。トレーニング・セット内のドキュメント数に対する語句の出現頻度の割合がこのしきい値を超えた場合に、その語句が選択されます。 |
|
I |
10 |
0 |
100 |
語句選択のしきい値(パーセント)を指定します。このしきい値は、2番目のステップの語句選択を制御します。各候補語句には、特定クラスとの相関関係を示す計算された数量があります。クラス内の全候補語句の最大値に対するこの数量値の割合がこのしきい値を超えた場合のみ、候補語句がそのクラスに対して選択されます。 |
|
I |
75 |
0 |
100 |
対象を広げるために、組込みの決定ツリーを削除する範囲を指定します。大きい値を指定すると、積極的に削除が行われ、生成されたルールの範囲が広くなりますが、精度は下がります。 |
2.9.2 SVM_CLASSIFIER
SVM_CLASSIFIER
型を使用して、ルール生成プロシージャCTX_CLS.TRAIN
およびCTXRULE
作成のプリファレンスを作成します。この分類型は、分類のサポート・ベクター・マシン方法を表しており、バイナリ形式のルールを生成します。高精度の分類が必要な場合は、この分類型を使用します。
この型の属性は、次のとおりです。
表2-42 SVM_CLASSIFIERの属性
属性名 | データ型 | デフォルト | 最小値 | 最大値 | 説明 |
---|---|---|---|---|---|
|
I |
50 |
10 |
8192 |
1つのドキュメントを表す語句の最大数を指定します。 |
|
I |
3,000 |
1 |
100,000 |
個別の機能の最大数を指定します。 |
|
B |
FALSE |
NULL |
NULL |
テーマを機能として使用するには、 |
|
B |
TRUE |
NULL |
NULL |
通常のトークンを機能として使用するには、 |
|
B |
FALSE |
NULL |
NULL |
ステミングされたトークンを機能として使用するには、 |
|
I |
500 |
10 |
4000 |
おおよそのメモリー・サイズ(MB)を指定します。 |
|
1 |
2 |
0 |
100 |
フィールド・セクションに通常の語として語句を追加するために、出現頻度の乗数を指定します。たとえば、デフォルトでは、"<A>cat</A>"のcatという語はフィールド・セクション語句で、出現頻度が2である通常の語として扱われるように指定できますが、上限は100まで可能です。 |
2.9.3 SENTIMENT_CLASSIFIER
SENTIMENT_CLASSIFIER
型を使用して、センチメント分析問合せのプリファレンスを作成します。この分類子は、ユーザー定義のセンチメント分類子プリファレンスに関連付けられたプリファレンスを指定します。CTX_CLS.SA_TRAIN_MODEL
プロシージャを使用してユーザー定義のセンチメント分類子をトレーニングする前に、この型のプリファレンスを定義する必要があります。
表2-43に、SENTIMENT_CLASSIFIER
型の属性を示します。
表2-43 SENTIMENT_CLASSIFIERの属性
属性 | データ型 | デフォルト | 最小値 | 最大値 | 説明 |
---|---|---|---|---|---|
MAX_DOCTERMS |
I | 50 | 10 | 8192 | 1つのドキュメントを表す個別の語句の最大数を指定します |
MAX_FEATURES |
I | 3000 | 1 | 100000 | センチメント分類子の作成で使用する個別の機能の最大数を指定します。 |
THEME_ON |
B | False | テーマを機能として抽出するかどうか指定します | ||
TOKEN_ON |
B | True | トークンを機能として抽出するかどうか指定します | ||
STEM_ON |
B | True | ステミングされたトークンを機能として抽出するかどうか指定します | ||
MEMORY_SIZE |
I | 500 | 10 | 4000 | センチメント分類子の作成で使用する一般的なメモリー・サイズ(MB)を指定します。 |
SECTION_WEIGHT |
I | 2 | 0 | 100 | フィールド・セクションでの語の出現頻度の乗数を整数で指定します。 |
NUM_ITERATIONS |
I | 600 | センチメント分類子が収束するまで実行を繰返す最大回数を指定します。 |
関連項目:
SENTIMENT_CLASSIFIER
型の使用例は、『Oracle Textアプリケーション開発者ガイド』を参照してください
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-44に示す属性があります。
表2-44 KMEAN_CLUSTERINGの属性
属性名 | データ型 | デフォルト | 最小値 | 最大値 | 説明 |
---|---|---|---|---|---|
|
I |
50 |
10 |
8192 |
1つのドキュメントを表す個別の語句の最大数を指定します。 |
|
I |
3,000 |
1 |
500,000 |
個別の機能の最大数を指定します。 |
|
B |
FALSE |
NULL |
NULL |
テーマを機能として使用するには、 |
|
B |
TRUE |
NULL |
NULL |
通常のトークンを機能として使用するには、 |
|
B |
FALSE |
NULL |
NULL |
ステミングされたトークンを機能として使用するには、 |
|
I |
500 |
10 |
4000 |
おおよそのメモリー・サイズ(MB)を指定します。 |
|
1 |
2 |
0 |
100 |
フィールド・セクションに通常の語として語句を追加するために、出現頻度の乗数を指定します。たとえば、デフォルトでは、"<A>cat</A>"のcatという語はフィールド・セクション語句で、出現頻度が2である通常の語として扱われるように指定できますが、上限は100まで可能です。 |
|
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.ADD_STOPWORD
-
CTX_DDL.REMOVE_STOPWORD
-
CTX_DDL.ADD_STOPTHEME
-
CTX_DDL.ADD_STOPCLASS
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
に設定)
-
-
使用言語がドイツ語の場合、このプリファレンスは次のオプションを使用可能にして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.4 セクション・グループ・プリファレンス
この項では、セクション・グループ・プリファレンスに関連付けられた型について説明します。
-
CTXSYS.NULL_SECTION_GROUP
プリファレンスは、NULL_SECTION_GROUP
型を使用します。 -
CTXSYS.HTML_SECTION_GROUP
プリファレンスは、HTML_SECTION_GROUP
型を使用します。 -
CTXSYS.JSON_SECTION_GROUP
プリファレンスは、PATH_SECTION_GROUP
型を使用します。 -
CTXSYS.AUTO_SECTION_GROUP
プリファレンスは、AUTO_SECTION_GROUP
型を使用します。 -
CTXSYS.PATH_SECTION_GROUP
プリファレンスは、PATH_SECTION_GROUP
型を使用します。
作成されるデフォルトのセクション・グループは次のとおりです。
-
CTXSYS.XQUERY_SEC_GROUP
プリファレンスは、XQueryのフルテキスト式だけではなく、XQueryレンジ式も評価します。 -
CTXSYS.XQFT_SEC_GROUP
プリファレンスは、XQueryフルテキスト式のみを評価します。
2.12.5 ストップリスト・プリファレンス
この項では、ストップリスト・プリファレンスに関連付けられた型について説明します。
-
CTXSYS.DEFAULT_STOPLIST
ストップリスト・プリファレンスは、使用するデータベース言語のストップリストをデフォルトに設定します。
関連項目:
提供されるストップリストのストップワードの完全なリストは、「Oracle Textで提供されるストップリスト」を参照してください。
2.12.6 ストレージ・プリファレンス
この項では、記憶域プリファレンスに関連付けられた型について説明します。
CTXSYS.DEFAULT_STORAGE
記憶域プリファレンスは、BASIC_STORAGE型を使用します。
記憶域のプリファレンスは次のとおりです。
-
CTXSYS.XQFT_LOW
プリファレンスは、$D
表へのセカンダリXML表現の持続性を無効にし、索引の記憶域スペースを節約します。-
xml_save_copy = FALSE
-
xml_forward_enable = FALSE
-
-
CTXSYS.XQFT_MEDIUM
プリファレンスは、$D
表へのセカンダリXML表現の持続性を有効化し、必要に応じ、索引XQuery評価の後にかかる時間を減少させます。-
xml_save_copy = TRUE
-
xml_forward_enable = FALSE
-
-
CTXSYS.XQFT_HIGH
プリファレンスは、$D
表へのセカンダリXML表現の持続性を有効化し、索引を$O
に進ませ、必要に応じ、索引XQuery評価後およびXQueryフルテキスト式の評価にかかる時間を減少ます。-
xml_save_copy = TRUE
-
xml_forward_enable = TRUE
-
2.12.7 ワードリスト・プリファレンス
この項では、ワードリスト・プリファレンスに関連付けられた型について説明します。
CTXSYS.DEFAULT_WORDLIST
プリファレンスは、データベース言語の言語ステマーを使用します。使用している言語が表2-37に記載されていない場合、このプリファレンスは、NULL
ステマーおよびGENERIC
ファジー・マッチング属性にデフォルト設定されます。
2.13 システム・パラメータ
この項では、Oracle Textのシステム・パラメータについて説明します。システム・パラメータは次のカテゴリに分類されます。
関連項目:
2.13.1 汎用システム・パラメータ
Oracle Textをインストールすると、システム定義プリファレンスの他に、次のシステム・パラメータが設定されます。
表2-45 汎用システム・パラメータ
システム・パラメータ | 説明 |
---|---|
|
|
|
|
|
|
|
関連項目: 「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-46 デフォルトのCONTEXT索引のパラメータ
パラメータ | 使用される場合 | デフォルト値 |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
関連項目:
2.13.2.2 CTXCAT索引のパラメータ
次のデフォルトの各パラメータは、CREATE
INDEX
を使用したCTXCAT
索引の作成時に、そのパラメータ文字列にパラメータを指定しない場合に使用されます。CTXCAT
索引は、索引セット、レクサー、記憶域、ストップリストおよびワードリストのパラメータのみをサポートしています。デフォルトの各パラメータによって、システム定義プリファレンスが指定されます。
表2-47 デフォルトのCTXCAT索引のパラメータ
パラメータ | 使用される場合 | デフォルト値 |
---|---|---|
|
|
該当なし |
|
|
|
|
|
|
|
|
|
|
|
|
関連項目:
2.13.2.3 CTXRULE索引のパラメータ
表2-48に示すデフォルトの各パラメータは、CREATE
INDEX
を使用したCTXRULE
索引の作成時に、そのパラメータ文字列にパラメータを指定しない場合に使用されます。CTXRULE
索引は、レクサー、記憶域、ストップリストおよびワードリストのパラメータのみをサポートしています。デフォルトの各パラメータによって、システム定義プリファレンスが指定されます。
表2-48 デフォルトのCTXRULE索引のパラメータ
パラメータ | 使用される場合 | デフォルト値 |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
PARAMETER句に分類プリファレンスが指定されていない場合 |
|
関連項目:
CTXRULE索引の制限事項
CTXRULE
索引では、次の問合せ演算子をサポートしていません。
-
FUZZY
-
SOUNDEX
また、次のBASIC_WORDLIST
属性もサポートしていません。
-
SUBSTRING_INDEX
-
PREFIX_INDEX
2.13.3 デフォルトのポリシー・パラメータ
Oracle Textでポリシーを使用すると、索引を作成せずにドキュメント・サービスを利用できます。たとえば、ドキュメント・サービスをフィルタ処理してプレーン・テキストまたはHTMLバージョンのドキュメントを生成したり、テーマ・サマリーまたはテーマ・リストを生成してハイライトすることが可能です。
表2-49に、ポリシーを作成するときや、CTX_DDL.CREATE_POLICYを使用する際にプリファレンスを指定しないときのデフォルト・パラメータを示します。デフォルトの各パラメータによって、フィルタ処理、レクサー処理などに使用するためにシステム定義プリファレンスが指定されます。
表2-49 CTX_DDL.CREATE_POLICYのデフォルトのポリシー・パラメータ
パラメータ | 使用される場合 | デフォルト値 |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
関連項目:
-
詳細は、「CREATE_POLICY」を参照してください。