HiRDB 全文検索プラグイン HiRDB Text Search Plug-in Version 8

[目次][用語][索引][前へ][次へ]

2.5.6 インデクスの定義

文書検索プラグインでのインデクスの作成は,通常のインデクス定義,および差分インデクスを使用した登録性能を向上させるためのインデクス定義があります。また,文書の登録または更新時のインデクス作成方法を指定することもできます。

注意事項
大量の文書が登録されている表に対し,CREATE INDEX文でn-gramインデクスを作成する場合,タイムアウトが発生する場合があります。これを避けるために,大量の文書のインデクスを作成するCREATE INDEX文を実行するときは,次に示す設定をしてタイムアウトを無制限にしてから実行してください。
HiRDBのシステム共通定義
pd_watch_time=0
クライアント環境変数
PDCWAITTIME=0
また,この場合はログを取得しない運用をお勧めします。ログを取得しない運用については,「5.3.1 登録運用のログ取得方式の設定について」の「(3)ログレスモード」を参照してください。

以降,各定義方法について説明します。

<この項の構成>
(1) 通常のインデクス定義
(2) インデクスファイル自動拡張機能のインデクス定義
(3) インデクス作成ルール追加機能のインデクス定義
(4) 大小文字・全角文字半角文字統一機能のインデクス定義
(5) 拗音統一機能のインデクス定義
(6) 濁音統一機能のインデクス定義
(7) 削除文字指定機能のインデクス定義
(8) 文字単位インデクス作成機能使用時のインデクス定義
(9) 差分インデクス定義
(10) インデクス作成方法指定
(11) UCS4のインデクス定義
(12) 英文検索機能のインデクス定義

(1) 通常のインデクス定義

全文検索用または概念検索用のインデクス作成情報を定義するには,定義系SQLのCREATE INDEXを使用します。この定義をすることで,全文検索機能や概念検索機能が使用できるようになります。

CREATE INDEXのインデクス型識別子にはNGRAMと指定してください。また,RDエリア名には,「2.5.4 データ格納領域の確保」でn-gramインデクス情報の格納領域として確保したRDエリアを指定してください。n-gramインデクスプラグインで使用するインデクスのRDエリアは,ログ取得モードとなります。CREATE INDEXの詳細については,マニュアル「HiRDB SQLリファレンス」を参照してください。

なお,CREATE INDEX実行時に指定するプラグインオプションには複数の定義が指定できます。

(例)
複数の定義を指定する場合は,次のように定義ごとに,(半角コンマ)で区切って指定します。
PLUGIN'定義,定義,定義,…'

インデクスの定義では,全文検索機能だけを使用する場合と,全文検索機能に加えて,概念検索機能を使用する場合とでは,CREATE INDEXの指定方法が異なります。それぞれのインデクスの定義例を次に示します。

全文検索機能を使用する場合
全文検索機能を使用する場合の,インデクスの定義例を次の図に示します。

図2-11 全文検索機能使用時のインデクス定義例

[図データ]

全文検索機能に加えて,概念検索機能を使用する場合
全文検索機能に加えて,概念検索機能を使用する場合は,CREATE INDEXのプラグインオプションに次の定義の追加が必要です。
PLUGIN 'CONCEPT_ON'
この指定を省略した場合,概念検索用のインデクスが作成されないため,概念検索を実行できません。概念検索機能を使用する場合の,インデクスの定義例を次の図に示します。

図2-12 概念検索機能使用時のインデクス定義例

[図データ]

(2) インデクスファイル自動拡張機能のインデクス定義

インデクスファイル自動拡張機能を利用すると,インデクスファイル作成時の空き容量を,各論理ファイルの拡張領域として使用できるようになります。これによってRDエリアを有効利用できますので,インデクスファイル自動拡張機能の使用を推奨します。この機能を使用する場合は,プラグインオプションに次の定義が必要です。

PLUGIN 'FLEX_AREA'
 

この機能を使用するとインデクスが自動的に拡張するため,インデクスの拡張ユティリティ(phnexpnd)を実行する必要はありません。この機能を利用した場合にインデクスの拡張ユティリティを実行したときは,無視されます。

インデクスファイル自動拡張機能を使用する場合の,インデクス定義例を次の図に示します。

図2-13 インデクスファイル自動拡張機能使用時のインデクス定義例(全文検索用インデクスの場合)

[図データ]

(3) インデクス作成ルール追加機能のインデクス定義

インデクス作成ルール追加機能とは,標準で作成するインデクス情報に,かたかな,漢字,数字,英字など,すべての文字の種類(文字種)の組み合わせを追加する機能です。この機能を使用することで,検索タームがさまざまな文字種の組み合わせで構成される場合の検索性能が向上します。

特に,概念検索機能を使用する場合には,インデクス作成ルール追加機能を使用することをお勧めします。

(a) インデクス作成ルール追加機能の定義方法

インデクス作成ルール追加機能を使用する場合には,CREATE INDEXのプラグインオプションに対して次の表に示す内容を定義してください。

表2-8 CREATE INDEXのプラグインオプションに対する定義内容

定義内容 説明
INDEX_ALL すべての文字種の組み合わせを追加します。特に,概念検索機能を使用する場合には,併用することをお勧めします。
INDEX_MEDIUM かたかな,数字,および記号の一部の文字種の組み合わせを追加します。専門分野で使用する用語や技術系の用語が頻出する場合に,使用することをお勧めします。

注※
半角の英字で記述します。

インデクス作成ルール追加機能を使用する場合の,インデクスの定義例を図2-14および図2-15に示します。

図2-14 インデクス作成ルール追加機能使用時(INDEX_MEDIUM)のインデクス定義例(全文検索用のインデクスの場合)

[図データ]

図2-15 インデクス作成ルール追加機能使用時(INDEX_ALL)のインデクス定義例(概念検索用のインデクスの場合)

[図データ]

(b) インデクス作成ルール追加機能使用時の注意

インデクス作成ルール追加機能はSGMLTEXT型の列に対してだけ指定できます。FREEWORD型の列に対しては指定できません。

(4) 大小文字・全角文字半角文字統一機能のインデクス定義

大文字と小文字,または全角文字と半角文字の違いを区別しないで検索を実行したい場合には,大小文字・全角文字半角文字統一機能を使用します。

(a) 大小文字・全角文字半角文字統一機能の定義方法

大小文字・全角文字半角文字統一機能を使用する場合には,CREATE INDEXのプラグインオプションに対して次の表に示す内容を定義します。

表2-9 定義内容

定義内容 説明
SAMECASE=ON 英大文字と英小文字を区別しないでインデクスを作成します。
SAMEWIDE=ON 全角文字と半角文字の英数字,かたかな,記号を区別しないでインデクスを作成します。

注※
半角の英字で記述します。SAMECASESAMEWIDEを組み合わせて指定できます。

大小文字・全角文字半角文字統一機能使用時のインデクス定義例を図2-16,図2-17,図2-18に示します。

図2-16 大小文字統一機能使用時のインデクス定義例(全文検索用のインデクスの場合)

[図データ]

図2-17 全角文字半角文字統一機能使用時のインデクス定義例(全文検索用のインデクスの場合)

[図データ]

図2-18 大小文字統一機能,および全角文字半角文字統一機能使用時のインデクス定義例(概念検索用のインデクスの場合)

[図データ]

(b) 大小文字・全角文字半角文字統一機能使用時の注意

(5) 拗音統一機能のインデクス定義

検索時に「や」と「ゃ」,「よ」と「ょ」などの拗音を区別しないようにするには,拗音統一機能を使用します。

(a) 拗音統一機能の定義方法

拗音統一機能を使用する場合は,CREATE INDEXのプラグインオプションに次の定義を追加してください。

PLUGIN 'SAMEY=ON'

拗音統一機能を使用する場合の,インデクスの定義例を次の図に示します。

図2-19 拗音統一機能使用時のインデクス定義例

[図データ]

「SAMEY=ON」を指定すると,次の拗音が統一されます。

[図データ]

(b) 拗音統一機能使用時の注意

(6) 濁音統一機能のインデクス定義

検索時に「バ」と「ハ゛」,「ぱ」や「は゜」のように濁音や半濁音を区別しないようにするには,濁音統一機能を使用します。

(a) 濁音統一機能の定義方法

濁音統一機能を使用する場合は,CREATE INDEXのプラグインオプションに次の定義を追加してください。

PLUGIN 'SAMED=ON'

濁音統一機能を使用する場合の,インデクスの定義例を次の図に示します。

図2-20 濁音統一機能使用時のインデクス定義例

[図データ]

「SAMED=ON」を指定すると,濁音,半濁音が統一されます。

(b) 濁音統一機能使用時の注意

(7) 削除文字指定機能のインデクス定義

検索に使用しない文字を除いて検索性能を向上させるには,削除文字指定機能を使用します。

(a) 削除文字指定機能の定義方法

削除文字指定機能を使用する場合は,CREATE INDEXのプラグインオプションに次の定義の追加が必要です。

PLUGIN 'DELcode=ON'

削除文字指定機能を使用する場合の,インデクスの定義例を次の図に示します。

図2-21 削除文字指定機能使用時のインデクス定義例

[図データ]

「DELcode=ON」を指定すると,次の文字が削除されます。

全角文字の "。"(句点),"、"(読点),全角スペース,

半角文字の "。"(句点),"、"(読点),半角スペース(0x20),

改行コード(0x0a,0x0d),タブコード(0x09)

(b) 削除文字指定機能使用時の注意

(8) 文字単位インデクス作成機能使用時のインデクス定義

インデクス容量を削減する方法として,1文字ずつインデクスを作成することができます。この機能を文字単位インデクス(1gramインデクス)作成機能といいます。

(a) 文字単位インデクス作成機能の定義方法

文字単位インデクス作成機能を使用する場合は,CREATE INDEXのプラグインオプションに次の定義の追加が必要です。

PLUGIN 'INDEX_GRAM1'

文字単位インデクス作成機能を使用する場合の,インデクスの定義例を次の図に示します。

図2-22 文字単位インデクス作成機能使用時のインデクス定義例

[図データ]

(b) 文字単位インデクス作成機能使用時の注意事項

(9) 差分インデクス定義

登録性能を向上させるために,小容量の一時的な登録用インデクスに,文書を追加します。この登録用インデクスを差分インデクスといいます。

(a) 差分インデクスの定義方法

差分インデクスを使用する場合は,CREATE INDEXのプラグインオプションに差分インデクスとして使用する容量を定義します。サイズはキロバイト単位で,次のように定義します。

PLUGIN 'SUB_INDEX=xxxxxx'

なお,差分インデクスとして使用できる容量の最大値は102,400キロバイト,最小値は40,000キロバイトです。差分インデクスの定義が省略された場合,差分インデクスは作成されません。

差分インデクス使用時のインデクスの定義例を図2-23および図2-24に示します。

図2-23 差分インデクス使用時のインデクス定義例(全文検索用のインデクスの場合)

[図データ]

図2-24 差分インデクス使用時のインデクス定義例(概念検索用のインデクスの場合)

[図データ]

(b) 登録先インデクスの指定方法

差分インデクスを作成した場合,ユーザはHiRDBクライアント環境変数の指定によって,MASTERインデクスへの登録か,差分インデクスへの登録かを選択できます。

HiRDBクライアント環境変数は次のように指定します。

環境変数名称 : PDPLUGINNSUB
指定できる値 YまたはN
Y:差分インデクスへの登録
N:MASTERインデクスへの登録

環境変数に指定がない場合は,"Y"(差分インデクスへの登録)が仮定されます。ただし,次の場合には環境変数の指定内容に関係なく,MASTERインデクスへ登録します。

(c) 差分インデクス使用時の注意

(10) インデクス作成方法指定

表のSGMLTEXT型列に文書を登録している状態でCREATE INDEXを実行する場合,次のどれかの方法を指定できます。運用形態に合わせて指定してください。

(a) インデクス作成方法指定の定義方法

インデクス作成方法指定を使用する場合,CREATE INDEXのプラグインオプションに即時登録,初期分割登録,または分割遅延登録の定義を追加します。インデクス作成方法指定の定義を省略した場合,即時登録が適用されます。

即時登録
表に登録されている文書について,CREATE INDEX実行時にインデクス作成とインデクスへの文書登録を実行します。
即時登録を使用する場合,CREATE INDEXのプラグインオプションに次の定義を追加,または省略します。
PLUGIN 'CREATEMODE=0'

初期分割登録
表に登録されている文書について,CREATE INDEX実行時にはインデクスへは反映しません。「phnstartidx(インデクス作成開始ユティリティ)」を実行してインデクスへの文書登録を実行します。
初期分割登録を使用する場合,CREATE INDEXのプラグインオプションに次の定義を追加します。
PLUGIN 'CREATEMODE=1'

初期分割登録使用時のインデクスの定義例を図2-25および図2-26に示します。

図2-25 初期分割登録使用時のインデクス定義例(全文検索用のインデクスの場合)

[図データ]

図2-26 初期分割登録使用時のインデクス定義例(概念検索用のインデクスの場合)

[図データ]

分割遅延登録
表に登録されている文書について,CREATE INDEX実行時にはインデクスへ反映しません。「phnstartidx(インデクス作成開始ユティリティ)」を実行してインデクスへの文書登録を実行します。分割遅延登録を使用する場合,インデクス分割遅延登録用の領域が必要となります。
分割遅延登録を使用する場合,CREATE INDEXのプラグインオプションに次の定義を追加します。
PLUGIN 'CREATEMODE=2,DELAY_SIZE=インデクス分割遅延登録用領域サイズ(キロバイト)'
 
インデクス分割遅延登録用領域サイズの見積もりについては,「2.3.2(1)(b) ユーザLOB用RDエリア容量」を参照してください。また,分割遅延登録を設定していないインデクスに対しては,「phnmodidx(インデクス情報変更ユティリティ)」を実行することで分割遅延登録を設定したインデクスに移行できます。指定できる最大値・最小値は次のとおりです。
  • 最大値:129,584キロバイト
  • 最小値:2,608キロバイト

分割遅延登録時のインデクスの定義例を図2-27および図2-28に示します。

図2-27 分割遅延登録使用時のインデクス定義例(全文検索用のインデクスの場合)

[図データ]

図2-28 分割遅延登録使用時のインデクス定義例(概念検索用のインデクスの場合)

[図データ]

分割遅延登録への移行時に実行する,「phnmodidx(インデクス情報変更ユティリティ)」の指定例を次の図に示します。

図2-29 分割遅延登録への移行時に実行する,インデクス情報変更ユティリティの指定例

[図データ]

分割遅延登録・更新系SQL同時実行
遅延登録実行時に,同時に「phnstartidx(インデクス作成開始ユティリティ)」を実行してインデクスへ文書を登録します。分割遅延登録・更新系SQL同時実行を利用する場合,遅延登録時に情報を退避しておく領域が必要です。CREATE INDEXのプラグインオプションに次の定義を追加します。
 
PLUGIN 'CREATEMODE=3,DELAY_SIZE=遅延登録時に情報を退避する領域サイズ(キロバイト)'
 
遅延登録時に情報を退避する領域サイズの見積もりについては,「2.3.2(1)(b) ユーザLOB用RDエリア容量」を参照してください。
この退避領域に指定できる最大値・最小値は次のとおりです。
  • 最大値:129,584キロバイト
  • 最小値:12,832キロバイト
分割遅延登録・更新系SQL同時実行のインデクスの定義例を次の図に示します。

図2-30 分割遅延登録・更新系SQL同時実行使用時のインデクス定義例

[図データ]
(b) 初期分割登録・分割遅延登録使用時の注意

(11) UCS4のインデクス定義

UCS2の範囲を超えるUCS4の範囲の文字を使用するには,UCS4用の定義が必要になります。また,UCS4インデクスは自動拡張機能を適用します。

(a) インデクスの定義方法

UCS2の範囲を超えるUCS4の範囲の文字を使用する場合は,プラグインオプションに次の定義の追加が必要です。

PLUGIN 'INDEX_UCS4'
 
(b) インデクス定義時の注意
(c) UCS2からUCS4への移行

UCS2とUCS4はインデクスの構成が異なるため,UCS2用のインデクスをそのままUCS4用のインデクスとして使用することはできません。

UCS2用のインデクスをUCS4用として使用する場合は,「phnmodidx(インデクス情報変更ユティリティ)」で変更項目に"INDEX_TYPE=UCS4"を指定して移行してください。

移行する前のインデクスに次の機能が指定されている場合は,移行コマンド実行時にエラーとなります。

(12) 英文検索機能のインデクス定義

英文に対する検索を行なう場合は,単語単位での検索を行なう英文インデクス定義をしてください。

英文インデクスの定義は次の方法があります。運用に応じてご使用ください。

注意事項
英文インデクス定義は,次のインデクス定義と併用することはできません。
  • 概念検索機能(CONCEPT_ON)
  • 全角文字半角文字統一機能(SAMEWIDE=ON)
  • 拗音統一検索(SAMEY=ON)
  • インデクス作成ルール追加機能(INDEX_ALL)
  • インデクス作成ルール追加機能(INDEX_MEDIUM)
  • 文字単位インデクス作成機能(INDEX_GRAM1)
(a) 英文検索のインデクスに指定できる項目

英文検索機能で使用するインデクスの定義ファイルについて説明します。

インデクスデリミタファイル
機能
英文検索機能で使用するインデクスを作成する場合に必要な単語の区切り(デリミタ)を定義します。定義したインデクスデリミタに従って単語を抽出し,英文検索機能で使用するインデクスを作成します。抽出した単語が64文字(バイト)を超える場合は,65文字(バイト)目以降を無視して,64文字(バイト)目までの文字でインデクスを作成します。なお,インデクスデリミタは検索対象にできません。
指定形式
CREATE INDEX文のプラグインオプションにインデクスデリミタファイルのファイル名を指定します。
 
INDEXdlmt=ファイル名
 
インデクスデリミタファイルは,CREATE INDEXを実行する前に,Text Search Plug-inをセットアップしたすべてのサーバマシンに対して,同一の内容で次に示すディレクトリに事前に作成しておく必要があります。
 
$PDDIR/plugin/_phngram/idx_def
 
また,サンプルファイル($PDDIR/plugin/_phngram/sample/pdplgdlmt)を提供しています。
記述形式
"インデクスデリミタ" [,"インデクスデリミタ"]・・・・・・
  • インデクスデリミタは,"(半角ダブルクォーテーション)で囲んで指定します。
  • インデクスデリミタに使用できる文字は,'0x21'〜'0x7E'の範囲の1バイト文字コードです。
  • '0x20'(半角スペース),'0x09'(タブ)は,無条件にインデクスデリミタとなります。
  • 複数指定する場合は,"(半角ダブルクォーテーション)で囲んだインデクスデリミタを,(半角コンマ)で区切って指定します。
  • "(半角ダブルクォーテーション)をインデクスデリミタにする場合は,""と二つ続けて定義し,それを"(半角ダブルクォーテーション)で囲んで指定します。
注意事項
  • インデクスデリミタファイルは省略できます。
  • 省略した場合は,'0x20'(半角スペース),'0x09'(タブ),記号「'0x21'〜'0x2F','0x3A'〜'0x40','0x5B'〜'0x60','0x7B'〜'0x7E'」がインデクスデリミタとなります。
  • 不要語,または削除コードに指定した文字コードをインデクスデリミタに指定しないでください。指定した場合は,インデクスデリミタ,削除コード,不要語,の優先順位で処理します。

不要語ファイル
機能
英文検索機能に使用するインデクスを作成する場合,検索に不要な単語を定義します。不要語については,検索用インデクスを作成しません。
指定形式
CREATE INDEX文のプラグインオプションに不要語ファイルのファイル名を指定します。
 
NOindex=ファイル名
 
不要語ファイルは,CREATE INDEXを実行する前に,Text Search Plug-inをセットアップしたすべてのサーバマシンに対して,同一の内容で次のディレクトリに事前に作成しておく必要があります。
 
$PDDIR/plugin/_phngram/idx_def
 
記述形式
"不要語" [,"不要語"]・・・・・・
  • 不要語は,"(半角ダブルクォーテーション)で囲んで指定します。
  • 不要語に使用できる文字は,'0x21'〜'0x7E'の範囲1バイトの文字コードです。
  • 複数指定する場合は,"(半角ダブルクォーテーション)で囲んだ不要語を,(半角コンマ)で区切って指定します。不要語は100個まで指定できます。
  • "(半角ダブルクォーテーション)を不要語にする場合は,""と二つ続けて定義し,それを"(半角ダブルクォーテーション)で囲んで指定します。
  • 不要語は64文字(バイト)まで指定できます。64文字(バイト)を超えて指定した場合,65文字(バイト)目以降を無視して,64文字(バイト)目までの文字列を不要語とします。
注意事項
  • 不要語ファイルは省略できます。省略した場合は,不要語なしでインデクスを作成します。
  • インデクスデリミタ,または削除コードに指定した文字コードを不要語に指定しないようにしてください。指定した場合は,インデクスデリミタ,削除コード,不要語の優先順位で処理します。
  • 検索条件で指定した検索タームに不要語を含む場合は,不要語を任意の1単語とみなして検索します。なお,検索条件に不要語だけを指定した場合は,入力条件エラーとなります。

削除コードファイル
機能
英文検索機能で使用するインデクスを作成する場合に,削除するコードを定義します。定義した削除コードはないものとして単語を抽出し,英文検索機能で使用するインデクスを作成します。
単語に-(ハイフン)のような不要なコードがある場合,削除してその前後を詰めて扱い,必要なコードだけでインデクスを作成できます。
指定形式
CREATE INDEX文のプラグインオプションに削除コードファイルのファイル名を指定します。
 
DELcode=ファイル名
 
削除コードファイルは,CREATE INDEXを実行する前に,Text Search Plug-inをセットアップしたすべてのサーバマシンに対して,同じ内容で次のディレクトリに事前に作成しておく必要があります。
 
$PDDIR/plugin/_phngram/idx_def
 
記述形式
"削除コード" [,"削除コード"]・・・・・・・
  • 削除コードは,"(半角ダブルクォーテーション)で囲んで指定します。
  • 削除コードに使用できる文字は,'0x21'〜'0x7E'の範囲の1バイト文字コードです。
  • 複数指定する場合は,"(半角ダブルクォーテーション)で囲んだ削除コードを,(半角コンマ)で区切って指定します。
  • "(半角ダブルクォーテーション)を削除コードにする場合は,""と二つ続けて定義し,それを"(半角ダブルクォーテーション)で囲んで指定します。
注意事項
  • 削除コードファイルは省略できます。省略した場合は,削除コードなしでインデクスを作成します。
  • インデクスデリミタ,または不要語に指定した文字コードを削除コードに指定しないようにしてください。指定した場合は,インデクスデリミタ,削除コード,不要語,の優先順位で処理します。