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

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

2.7.4 インデクスの定義

インデクスデータを作成してデータを登録します。データ登録後にCREATE INDEXを実行すると,登録済みの文字列データからIXFREEWORDインデクスが一括作成されます。

文字列検索プラグインでのインデクスの作成には,通常のインデクス定義,および文書の登録・更新時のインデクス作成方法の定義があります。各定義方法について次に説明します。

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

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

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

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

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

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

インデクスの定義例を次の図に示します。

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

[図データ]

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

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

PLUGIN 'FLEX_AREA'
 

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

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

図2-42 インデクスファイル自動拡張機能使用時のインデクス定義例

[図データ]

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

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

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

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

表2-12 定義内容

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

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

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

図2-43 大小文字統一機能使用時のインデクス定義例

[図データ]

図2-44 全角文字半角文字統一機能使用時のインデクス定義例

[図データ]

図2-45 大小文字統一機能,および全角文字半角文字統一機能使用時のインデクス定義例

[図データ]

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

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

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

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

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

PLUGIN 'SAMEY=ON'

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

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

[図データ]

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

[図データ]

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

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

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

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

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

PLUGIN 'SAMED=ON'

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

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

[図データ]

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

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

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

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

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

削除文字指定機能を使用する場合は,CREATE INDEXのプラグインオプションに次の定義を追加してください。

PLUGIN 'DELcode=ON'

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

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

[図データ]

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

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

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

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

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

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

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

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

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

PLUGIN 'INDEX_GRAM1'

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

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

[図データ]

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

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

表のFREEWORD型列に文字列データを登録している状態でCREATE INDEXを実行する場合,CREATE INDEX実行時にインデクス作成とインデクスへの文字列データ登録を実行する方法(即時登録)か,CREATE INDEX実行時にはインデクスに反映しないで文書やデータの登録だけを実行し,「phxstartidx(インデクス作成開始ユティリティ)」を実行してインデクスへの文字列データ登録を実行する方法(初期分割登録または分割遅延登録)のどちらかのインデクス作成方法を指定できます。運用形態に合わせて指定してください。

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

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

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

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

初期分割登録使用時のインデクスの定義例を次の図に示します。

図2-50 初期分割登録使用時のインデクス定義例

[図データ]

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

分割遅延登録時のインデクスの定義例を次の図に示します。

図2-51 分割遅延登録使用時のインデクス定義例

[図データ]

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

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

[図データ]

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

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

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

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

UCS2の範囲を超えるUCS4の範囲の文字を使用するには,UCS4用の定義が必要になります。.

(a) インデクスの指定

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

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

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

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

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

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

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

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

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

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

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

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

(11) 登録件数指定

本製品が推奨する文字列データサイズ(255バイト)より小さい文書を大量にIXFREEWORDインデクス型プラグインに登録する場合,登録文書数を管理する領域を拡張することがあります。その際にはphxidxlsコマンドで表示されるインデクス情報の“Available Work Area Size”で示される領域を使用するため,この領域が不足するとRDエリア不足となり,RDエリアを追加する必要があります。本機能では,あらかじめユーザが最終目標とする文書数を管理できる領域を確保し,前記の弊害をなくすことを目的としています。

登録件数指定を指定してIXFREEWORDインデクスを作成する場合には,CREATE INDEXのプラグインオプションに次の定義を追加します。

 
PLUGIN ‘DOC_COUNT=登録件数(件)’
 

登録件数に指定できる最大値・最小値は次のとおりです。

登録件数指定を省略した場合は,次の(a)(b)の大きい方の値がデフォルト値となります。

(a)40,960件

(b)インデクス作成時のn-gramインデクス情報格納用RDエリア容量(バイト)/(100×32)件

図2-55 登録件数指定のインデクス定義例

[図データ]

注意事項
  • 表分割される場合は,各分割表ごとに指定された文書数が登録可能となります。
    例えば,“DOC_COUNT=1000000”を表A(分割表A1/A2/A3の3分割表)のインデクス作成時に指定した場合,各分割表ごとに1,000,000件のインデクスが作成できるので,表Aのインデクスとしては3,000,000件登録できます。
  • UPDATE/DELETEによって無効となった文書も管理データとしては残ります。
    例えば,10件登録後に5件削除した場合,管理上は10件分の管理領域を必要とします。
    また,10件登録後に5件更新した場合,5件削除後に5件追加する処理を行うため,15件分の管理領域が必要となります。このような無効領域を解消するためには,インデクス再作成や表の再編成を行ってください。
  • 登録件数がDOC_COUNTに指定した文書数を超えた場合,“Available Work Area Size”に空き容量がある限りは管理領域を拡張して登録を行います。