2.5.4 インデクスの定義
(1) 通常のインデクス定義
XMLデータ検索用のインデクス作成情報を定義するには,定義系SQLのCREATE INDEXを使用します。この定義をすることで,XMLデータ検索機能が使用できるようになります。
CREATE INDEXのインデクス型識別子にはIXXMLと指定してください。また,RDエリア名には,「2.5.2 データ格納領域の確保」でIXXML型情報の格納領域として確保したRDエリアを指定してください。IXXMLインデクス型プラグインで使用するインデクスのRDエリアは,ログ取得モードとなります。CREATE INDEXの詳細については,マニュアル「HiRDB SQLリファレンス」を参照してください。
インデクスの定義例を次に示します。
- XMLデータ検索機能を使用する場合
- XMLデータ検索機能を使用する場合の,インデクスの定義例を次の図に示します。
図2-6 XMLデータ検索機能使用時のインデクス定義例
![[図データ]](figure/zu020600.gif)
(2) インデクスファイル自動拡張機能のインデクス定義
インデクスファイル自動拡張機能を利用すると,インデクスファイル作成時の空き容量を,各論理ファイルの拡張領域として使用できるようになります。これによってRDエリアを有効利用できます。なお,HiRDBが文字コードutf-8でセットアップされた場合,インデクスファイル自動拡張機能は自動的に有効になります。
この機能を使用する場合は,プラグインオプションに次の定義が必要です。
PLUGIN 'FLEX_AREA'
この機能を使用するとインデクスが自動的に拡張するため,インデクスの拡張ユティリティ(phjexpnd)を実行する必要はありません。この機能を利用した場合にインデクスの拡張ユティリティを実行したときは,無視されます。
インデクスファイル自動拡張機能を使用する場合の,インデクス定義例を次の図に示します。
図2-7 インデクスファイル自動拡張機能使用時のインデクス定義例(XMLデータ検索用インデクスの場合)
![[図データ]](figure/zu020700.gif)
(3) インデクス作成ルール追加機能のインデクス定義
インデクス作成ルール追加機能とは,標準で作成するインデクス情報に,かたかな,漢字,数字,英字など,すべての文字の種類(文字種)の組み合わせを追加する機能です。この機能を使用することで,検索タームがさまざまな文字種の組み合わせで構成される場合の検索性能が向上します。
(a) インデクス作成ルール追加機能の定義方法
インデクス作成ルール追加機能を使用する場合には,CREATE INDEXのプラグインオプションに対して次の表に示す内容を定義してください。
表2-10 CREATE INDEXのプラグインオプションに対する定義内容
定義内容※ | 説明 |
---|
INDEX_ALL | すべての文字種の組み合わせを追加します。 |
INDEX_MEDIUM | かたかな,数字,および記号の一部の文字種の組み合わせを追加します。専門分野で使用する用語や技術系の用語が頻出する場合に,使用することをお勧めします。 |
- 注※
- 半角の英字で記述します。
インデクス作成ルール追加機能を使用する場合の,インデクスの定義例を次の図に示します。
図2-8 インデクス作成ルール追加機能使用時(INDEX_MEDIUM)のインデクス定義例
![[図データ]](figure/zu020800.gif)
(4) インデクス作成方法指定
表のXML型列にXMLデータを登録している状態でCREATE INDEXを実行する場合,次のどれかの方法を指定できます。運用形態に合わせて指定してください。
- CREATE INDEX実行時にインデクス作成とインデクスへのXMLデータ登録を実行する方法(即時登録)
- CREATE INDEX実行時にはインデクスに反映しないでXMLデータやデータの登録だけを実行し,「phjstartidx(インデクス作成開始ユティリティ)」を実行してインデクスへのXMLデータ登録を実行する方法(初期分割登録,または分割遅延登録)
(a) インデクス作成方法指定の定義方法
インデクス作成方法指定を使用する場合,CREATE INDEXのプラグインオプションに即時登録,初期分割登録,または分割遅延登録の定義を追加します。インデクス作成方法指定の定義を省略した場合,即時登録が適用されます。
- 即時登録
- 表に登録されているXMLデータについて,CREATE INDEX実行時にインデクス作成とインデクスへのXMLデータ登録を実行します。
- 即時登録を使用する場合,CREATE INDEXのプラグインオプションに次の定義を追加,または省略します。
PLUGIN 'CREATEMODE=0'
- 初期分割登録
- 表に登録されているXMLデータについて,CREATE INDEX実行時にはインデクスへは反映しません。「phjstartidx(インデクス作成開始ユティリティ)」を実行してインデクスへのXMLデータ登録を実行します。
- 初期分割登録を使用する場合,CREATE INDEXのプラグインオプションに次の定義を追加します。
PLUGIN 'CREATEMODE=1'
初期分割登録使用時のインデクスの定義例を次の図に示します。
図2-9 初期分割登録使用時のインデクス定義例(XMLデータ検索用のインデクスの場合)
![[図データ]](figure/zu020900.gif)
- 分割遅延登録
- 表に登録されているXMLデータについて,CREATE INDEX実行時にはインデクスへ反映しません。「phjstartidx(インデクス作成開始ユティリティ)」を実行してインデクスへのXMLデータ登録を実行します。分割遅延登録を使用する場合,インデクス分割遅延登録用の領域が必要となります。
- 分割遅延登録を使用する場合,CREATE INDEXのプラグインオプションに次の定義を追加します。
PLUGIN 'CREATEMODE=2,DELAY_SIZE=インデクス分割遅延登録用領域サイズ(キロバイト)'
- インデクス分割遅延登録用領域サイズの見積もりについては,「2.3.2(1)(b) ユーザLOB用RDエリア容量」を参照してください。また,分割遅延登録を設定していないインデクスに対しては,「phjmodidx(インデクス情報変更ユティリティ)」を実行することで分割遅延登録を設定したインデクスに移行できます。指定できる最大値・最小値は次のとおりです。
- 最大値:129,584キロバイト
- 最小値:2,608キロバイト
分割遅延登録時のインデクスの定義例を次の図に示します。
図2-10 分割遅延登録使用時のインデクス定義例(XMLデータ検索用のインデクスの場合)
![[図データ]](figure/zu021000.gif)
分割遅延登録への移行時に実行する,「phjmodidx(インデクス情報変更ユティリティ)」の指定例を次の図に示します。
図2-11 分割遅延登録への移行時に実行する,インデクス情報変更ユティリティの指定例
![[図データ]](figure/zu021100.gif)
- 分割遅延登録・更新系SQL同時実行
- 遅延登録実行時に,同時に「phjstartidx(インデクス作成開始ユティリティ)」を実行してインデクスへXMLデータを登録します。分割遅延登録・更新系SQL同時実行を利用する場合,遅延登録時に情報を退避しておく領域が必要です。CREATE INDEXのプラグインオプションに次の定義を追加します。
PLUGIN 'CREATEMODE=3,DELAY_SIZE=遅延登録時に情報を退避する領域サイズ(キロバイト)'
- 遅延登録時に情報を退避する領域サイズの見積もりについては,「2.3.2(1)(b) ユーザLOB用RDエリア容量」を参照してください。
- この退避領域に指定できる最大値・最小値は次のとおりです。
- 最大値:129,584キロバイト
- 最小値:12,832キロバイト
- 分割遅延登録・更新系SQL同時実行のインデクスの定義例を次の図に示します。
図2-12 分割遅延登録・更新系SQL同時実行使用時のインデクス定義例
![[図データ]](figure/zu021200.gif)
- 分割遅延登録・更新系SQL同時実行する際に,インデクスに反映されていない文書をスキャンで検索する場合は,CREATE INDEXのプラグインオプションに次の定義を追加してください。
PLUGIN 'CREATEMODE=3,DELAY_SIZE=遅延登録時に情報を退避するサイズ,WITH_TABLE_SCAN=スキャンデータ格納用領域サイズ(キロバイト)';
- スキャンデータ格納用領域サイズの見積りについては,「2.3.2(1)(b) ユーザLOB用RDエリア容量」を参照してください。
- スキャンデータ格納用領域サイズに指定できる最大値,および最小値は次のとおりです。
- 最大値:2,097,144キロバイト
- 最小値:max(44,000キロバイト,DELAY_SIZE指定容量×3+5,120キロバイト)
- なお,スキャンで検索できるのはXQueryで次の述語を使用する場合だけです。
- 文字列(xs:string型)同士の完全一致(=)
- fn:contains関数
- fn:starts-with関数
- fn:ends-with関数
- インデクスに反映されていない文書をスキャンで検索する場合のインデクス定義例を次の図に示します。
図2-13 インデクス未反映文書をスキャンで検索する場合のインデクス定義例
![[図データ]](figure/zu021300.gif)
(b) 初期分割登録・分割遅延登録使用時の注意
- CREATE INDEX実行後,インデクスへ登録されていないXMLデータのインデクスは,「phjstartidx(インデクス作成開始ユティリティ)」を実行して登録してください。インデクスへ登録されていないXMLデータが存在するかどうかは,「phjidxls(インデクス情報の取得ユティリティ)」を実行して,「Number of Documents for Unfinished-Index」の項目を確認してください。
- インデクス検索を使用する場合,インデクスへ登録されていないXMLデータは,検索対象になりません。
- インデクスへ登録されていないXMLデータが存在する場合,登録または更新したXMLデータはインデクスへ登録されません。インデクスへ登録する場合は,「phjstartidx(インデクス作成開始ユティリティ)」を実行してください。
- インデクスが作成されていないXMLデータが存在する場合,検索を実行しても,インデクスが作成されていない旨のメッセージは出力されません。
- 初期分割登録の場合,CREATE INDEX実行後,インデクス作成開始ユティリティを実行して,すべてのXMLデータがインデクスへ登録された時点で,インデクス作成方法が初期分割登録から即時登録に切り替わります。以降,XMLデータの登録または更新と同時にインデクスへの登録が行われるようになるため,XMLデータ登録または更新時にインデクスへ登録する時間が掛かるようになります。
- 「phjmodidx(インデクス情報変更ユティリティ)」で移行したインデクスに対して初期化をした場合,変更した情報は無効になります。
- インデクス分割遅延登録用領域を使い切った場合は,遅延しているすべてのXMLデータをインデクスに反映するか,または「phjmodidx(インデクス情報変更ユティリティ)」を使用してインデクス分割遅延登録用領域を拡張してください。
- 分割遅延登録・更新系SQL同時実行をしない運用へ移行する場合,インデクスを削除してください。そのあと,運用に合わせてインデクスを再定義してください。
- WITH_TABLE_SCAN指定を行う運用の場合,グローバルバッファを指定するとスキャン対象データがグローバルバッファに保持されます。このため高速な検索が実現できます。バッファサイズはWITH_TABLE_SCANで指定した値以上のサイズを指定する必要があります。
- WITH_TABLE_SCAN指定をした場合,指定された領域内にESIS-Bデータを格納します。phjstartidxでインデクス作成を実行すると,格納したESIS-Bデータは削除されます。ただし,最後に実行したphjstartidxでインデクス作成したときのESIS-Bデータだけは,ロールバックに備えるため保持されます。
(5) 大小文字・全角文字半角文字統一機能のインデクス定義
大文字と小文字,または全角文字と半角文字の違いを区別しないで検索を実行したい場合には,大小文字・全角文字半角文字統一機能を使用します。
(a) 大小文字・全角文字半角文字統一機能の定義方法
大小文字・全角文字半角文字統一機能を使用する場合には,CREATE INDEXのプラグインオプションに対して次の表に示す内容を定義します。
表2-11 大小文字・全角文字半角文字の定義内容
定義内容※ | 説明 |
---|
SAMECASE=ON | 英大文字と英小文字を区別しないでインデクスを作成します。 |
SAMEWIDE=ON | 全角文字と半角文字の英数字,かたかな,記号を区別しないでインデクスを作成します。 |
- 注※
- 半角の英字で記述します。また,SAMECASEとSAMEWIDEは組み合わせて指定できます。
大小文字・全角文字半角文字統一機能使用時のインデクス定義例を図2-14,図2-15に示します。
図2-14 大小文字統一機能使用時のインデクス定義例
![[図データ]](figure/zu021400.gif)
図2-15 全角文字半角文字統一機能使用時のインデクス定義例
![[図データ]](figure/zu021500.gif)
(b) 大小文字・全角文字半角文字統一機能使用時の注意
全角文字半角文字統一機能を指定しないで,近傍条件検索やワイルドカードに「?」を指定した検索を実行した場合,半角文字のガ行,ザ行,ダ行,バ行,パ行,および「ヴ」を2文字として扱います。しかし,全角文字半角文字統一機能を指定した場合は1文字として扱うため注意が必要です。
(6) 拗音統一機能のインデクス定義
検索時に「や」と「ゃ」,「よ」と「ょ」などの拗音を区別しないようにするには,拗音統一機能を使用します。
(a) 拗音統一機能の定義方法
拗音統一機能を使用する場合は,CREATE INDEXのプラグインオプションに次の定義を追加してください。
PLUGIN 'SAMEY=ON'
拗音統一機能を使用する場合の,インデクスの定義例を次の図に示します。
図2-16 拗音統一機能使用時のインデクス定義例
![[図データ]](figure/zu021600.gif)
「SAMEY=ON」を指定すると,次の拗音が統一されます。
![[図データ]](figure/zu010400.gif)
(7) 濁音統一機能のインデクス定義
検索時に「バ」と「ハ゛」,「ぱ」や「は゜」のように濁音や半濁音を区別しないようにするには,濁音統一機能を使用します。
(a) 濁音統一機能の定義方法
濁音統一機能を使用する場合は,CREATE INDEXのプラグインオプションに次の定義を追加してください。
PLUGIN 'SAMED=ON'
濁音統一機能を使用する場合の,インデクスの定義例を次の図に示します。
図2-17 濁音統一機能使用時のインデクス定義例
![[図データ]](figure/zu021700.gif)
「SAMED=ON」を指定すると,濁音,半濁音が統一されます。
(b) 濁音統一機能使用時の注意
濁音文字統一機能を指定しないで,近傍条件検索やワイルドカードに「?」を指定した検索を実行した場合,半角文字の濁音で表示できる文字を2文字として扱います。しかし,濁音文字統一機能を指定した場合は1文字として扱うため注意が必要です。
(8) 削除文字指定機能のインデクス定義
検索に使用しない文字を除いて検索性能を向上させるには,削除文字指定機能を使用します。
(a) 削除文字指定機能の定義方法
削除文字指定機能を使用する場合は,CREATE INDEXのプラグインオプションに次の定義の追加が必要です。
PLUGIN 'DELcode=ON'
削除文字指定機能を使用する場合のインデクス定義例を次の図に示します。
図2-18 削除文字指定機能使用時のインデクス定義例
![[図データ]](figure/zu021800.gif)
「DELcode=ON」を指定すると,次の文字が削除されます。
- 全角および半角文字の「。」(句点),「、」(読点)
- 全角スペース,半角スペース(0x20)
- 改行コード(0x0a,0x0d),タブコード(0x09)
(b) 削除文字指定機能使用時の注意
- 近傍検索で指定された語句リストの間に削除文字が含まれる場合,距離の指定方法によってはヒットしないことがあります。
例えば,登録データが「COMPUTER△NETWORK」の場合,「COMPUTER」と「NETWORK」の間の距離は0となります。
- 削除文字を指定したインデクスに対して検索を実行する場合,登録データから削除文字が取り除かれていることに注意してください。
例えば,削除文字が半角スペースで,登録データが「tha[△・・・△]</終了タグ>」の場合(・・・は0個以上の繰り返しを示します),「tha?」で検索してもヒットしません。
- 検索タームおよびすべての異表記展開・同義語異表記展開結果が,削除文字だけで構成されている場合,0件ヒットとなります。
(9) 英文検索機能のインデクス定義
英文に対する検索を行なう場合は,単語単位での検索を行なう英文インデクス定義をしてください。
英文インデクスの定義は次の方法があります。運用に応じてご使用ください。
- 注意事項
- 英文インデクス定義は,次のインデクス定義と併用することはできません。
- 全角文字半角文字統一機能(SAMEWIDE=ON)
- 拗音統一検索(SAMEY=ON)
- インデクス作成ルール追加機能(INDEX_ALL)
- インデクス作成ルール追加機能(INDEX_MEDIUM)
(a) 英文検索のインデクスに指定できる項目
英文検索機能で使用するインデクスの定義ファイルについて説明します。
- インデクスデリミタファイル
- 機能
- 英文検索機能で使用するインデクスを作成する場合に必要な単語の区切り(デリミタ)を定義します。定義したインデクスデリミタに従って単語を抽出し,英文検索機能で使用するインデクスを作成します。抽出した単語が64文字(バイト)を超える場合は,65文字(バイト)目以降を無視して,64文字(バイト)目までの文字でインデクスを作成します。なお,インデクスデリミタは検索対象にできません。
- 指定形式
- CREATE INDEX文のプラグインオプションにインデクスデリミタファイルのファイル名を指定します。
INDEXdlmt=ファイル名
- インデクスデリミタファイルは,CREATE INDEXを実行する前に,XML Extensionをセットアップしたすべてのサーバマシンに対して,同一の内容で次に示すディレクトリに事前に作成しておく必要があります。
$PDDIR/plugin/_phjxml/idx_def
- また,サンプルファイル($PDDIR/plugin/_phjxml/sample/pdplgdlmt)を提供しています。
- 記述形式
"インデクスデリミタ"[,"インデクスデリミタ"]・・・・・・
- インデクスデリミタは,「"」(半角ダブルクォーテーション)で囲んで指定します。
- インデクスデリミタに使用できる文字は,「0x21」~「0x7E」の範囲の1バイト文字コードです。
- 「0x20」(半角スペース),「0x09」(タブ)は,無条件にインデクスデリミタとなります。
- 複数指定する場合は,「"」で囲んだインデクスデリミタを「,」(半角コンマ)で区切って指定します。
- 「"」をインデクスデリミタにする場合は「""」と二つ続けて定義し,それを「"」で囲んで指定します。
- 注意事項
- インデクスデリミタファイルは省略できます。
- 省略した場合は,「0x20」(半角スペース),「0x09」(タブ),記号(「0x21」~「0x2F」,「0x3A」~「0x40」,「0x5B」~「0x60」,「0x7B」~「0x7E」)がインデクスデリミタとなります。
- 不要語,または削除コードに指定した文字コードをインデクスデリミタに指定しないでください。指定した場合は,インデクスデリミタ,削除コード,不要語,の優先順位で処理します。
- 不要語ファイル
- 機能
- 英文検索機能に使用するインデクスを作成する場合,検索に不要な単語を定義します。不要語については,検索用インデクスを作成しません。
- 指定形式
- CREATE INDEX文のプラグインオプションに不要語ファイルのファイル名を指定します。
NOindex=ファイル名
- 不要語ファイルは,CREATE INDEXを実行する前に,XML Extensionをセットアップしたすべてのサーバマシンに対して,同一の内容で次のディレクトリに事前に作成しておく必要があります。
$PDDIR/plugin/_phjxml/idx_def
- 記述形式
"不要語"[,"不要語"]・・・・・・
- 不要語は,「"」(半角ダブルクォーテーション)で囲んで指定します。
- 不要語に使用できる文字は,「0x21」~「0x7E」の範囲1バイトの文字コードです。
- 複数指定する場合は,「"」で囲んだ不要語を「,」(半角コンマ)で区切って指定します。不要語は100個まで指定できます。
- 「"」を不要語にする場合は,「""」と二つ続けて定義し,それを「"」で囲んで指定します。
- 不要語は64文字(バイト)まで指定できます。64文字(バイト)を超えて指定した場合,65文字(バイト)目以降を無視して,64文字(バイト)目までの文字列を不要語とします。
- 注意事項
- 不要語ファイルは省略できます。省略した場合は,不要語なしでインデクスを作成します。
- インデクスデリミタ,または削除コードに指定した文字コードを不要語に指定しないようにしてください。指定した場合は,インデクスデリミタ,削除コード,不要語の優先順位で処理します。
- 検索条件で指定した検索タームに不要語を含む場合は,不要語を任意の1単語とみなして検索します。なお,検索条件に不要語だけを指定した場合は,入力条件エラーとなります。
- 削除コードファイル
- 機能
- 英文検索機能で使用するインデクスを作成する場合に,削除するコードを定義します。定義した削除コードはないものとして単語を抽出し,英文検索機能で使用するインデクスを作成します。
- 単語に「-」(ハイフン)のような不要なコードがある場合,削除してその前後を詰めて扱い,必要なコードだけでインデクスを作成できます。
- 指定形式
- CREATE INDEX文のプラグインオプションに削除コードファイルのファイル名を指定します。
DELcode=ファイル名
- 削除コードファイルは,CREATE INDEXを実行する前に,XML Extensionをセットアップしたすべてのサーバマシンに対して,同じ内容で次のディレクトリに事前に作成しておく必要があります。
$PDDIR/plugin/_phjxml/idx_def
- 記述形式
"削除コード"[,"削除コード"]・・・・・・・
- 削除コードは,「"」(半角ダブルクォーテーション)で囲んで指定します。
- 削除コードに使用できる文字は,「0x21」~「0x7E」の範囲の1バイト文字コードです。
- 複数指定する場合は,「"」で囲んだ削除コードを「,」(半角コンマ)で区切って指定します。
- 「"」を削除コードにする場合は,「""」と二つ続けて定義し,それを「"」で囲んで指定します。
- 注意事項
- 削除コードファイルは省略できます。省略した場合は,削除コードなしでインデクスを作成します。
- インデクスデリミタ,または不要語に指定した文字コードを削除コードに指定しないようにしてください。指定した場合は,インデクスデリミタ,削除コード,不要語の優先順位で処理します。