テキスト検索索引の作成

Db2 Text Search 用にデータベースを有効にしたら、検索したいテキストを含む列にテキスト検索インデックスを作成できます。

始める前に

テキスト検索索引を作成するには、次のいずれかの許可レベルが必要です。
  • 索引表に対する CONTROL 特権
  • 索引表に対する INDEX 特権と、データベースに対する IMPLICIT_SCHEMA 権限または索引表スキーマに対する CREATEIN 特権のいずれか
  • DATAACCESS を持つ DBADM 権限

自動索引更新をスケジュールするには、インスタンス所有者は管理用タスク・スケジューラー表に対する DBADM 権限または CONTROL 特権のいずれかを持っている必要があります。

この表の主キーが存在している必要があります。 主キーが存在しない場合は、索引を作成する前に主キーを作成してください。

このタスクについて

表からテキスト検索索引に文書の変更を手動で適用しない場合は、UPDATE FREQUENCY パラメーターを指定して、 自動更新をスケジュールできます。 UPDATE MINIMUM パラメーターを使用して、表に対して行われた変更が最小回数に達した場合にのみ更新を実行するかどうかを制御します。 例えば、MYSCHEMA.MYTEXTINDEX を、最低 5 つの変更が行われてから更新するようにし、更新サービスに毎週月曜日と水曜日の深夜 0 時と正午 12 時にチェックを行わせるように指定する場合は、次のコマンドを発行します。
db2ts "CREATE INDEX MYSCHEMA.MYTEXTINDEX FOR TEXT ON PRODUCT(NAME)
	UPDATE FREQUENCY d(1,3) h(0,12) m(0) UPDATE MINIMUM 5"
	CALL SYSPROC.SYSTS_CREATE('myschema', 'myTextIndex', 'product (name)', 
	'UPDATE FREQUENCY D(1,3) H(0,12) M(0)' 'UPDATE MINIMUM 5', 'en_US', ?)

索引を作成するときに、LANGUAGE オプションを使用して、そのロケール (言語と地域) を指定できます。 ロケールを判別するために文書が自動的にスキャンされるようにするには、 LANGUAGE自動に設定します。 LANGUAGEを指定しない場合は、デフォルトが使用されます。 このデフォルトは、DEFAULTNAME='LANGUAGE' になっている SYSIBMTS.TSDEFAULTS の DEFAULTVALUE によって決まります。 (この場合、DEFAULTVALUE はデータベースでテキスト検索が使用可能にされるときに設定されます。 データベース・テリトリーがいずれかのサポートされている文書ロケールにマップできる場合、この値はデータベース・テリトリーから決定されます。 サポートされている文書ロケールの判別にデータベース・テリトリーが使用できない場合は、DEFAULTVALUE は AUTO に設定されます。)


の制約事項

  • 索引内のテキスト列は、以下にあげる、サポートされているタイプのいずれかでなければなりません。
    • CHAR
    • VARCHAR
    • LONG VARCHAR
    • CLOB
    • GRAPHIC
    • VARGRAPHIC
    • LONG VARGRAPHIC
    • DBCLOB
    • BLOB
    • XML
  • テキスト検索関連オブジェクトは、 DB2® 命名規則に従うだけでなく、それらの ID にも以下の文字のみを含める必要があります。
    • [A-Za-z][A-Za-z0-9@#$_]* または
    • "[A-Za-z ][A-Za-z0-9@#$_ ]*"
    この制限は、以下のものに適用されます。
    • テキスト検索索引を含むスキーマの名前
    • テキスト検索索引が関連付けられている表の名前
    • テキスト列の名前
    • テキスト検索索引の名前

プロシージャー

次のいずれかの方法でテキスト検索索引を作成します。

  • 次の CREATE INDEX コマンドを発行します。
    	db2ts "CREATE INDEX index-name FOR TEXT ON table-name (column-name)"
  • SYSPROC.SYSTS_CREATE ストアード・プロシージャーを呼び出します。
    	CALL SYSPROC.SYSTS_CREATE('index-schema', 'index-name', 'table-name
    	(column-name)', 'options', 'locale', ?)
    注: ストアード・プロシージャーを使用する場合、スキーマ名と索引名には大/小文字の区別があります。

例えば、SAMPLE データベースの PRODUCT 表に、PRODUCT ID、NAME、PRICE、DESCRIPTION などの列があるとします。 NAME 列に対して MYSCHEMA.MYTEXTINDEX というテキスト検索索引を作成する場合は、次のようにコマンドを発行するかストアード・プロシージャーを呼び出します。

db2ts "CREATE INDEX MYSCHEMA.MYTEXTINDEX FOR TEXT ON PRODUCT(NAME)"
CALL SYSPROC.SYSTS_CREATE('MYSCHEMA', 'MYTEXTINDEX', 'PRODUCT(NAME)', '', 'en_US',?)
同様に、XML 列 DESCRIPTION に対して MYSCHEMA.MYXMLINDEX というテキスト検索索引を作成する場合は、次のコマンドを入力します。
db2ts "CREATE INDEX MYSCHEMA.MYXMLINDEX FOR TEXT ON PRODUCT(DESCRIPTION)"
または
CALL SYSPROC.SYSTS_CREATE('MYXMLINDEX', 'MYXMLINDEX', 
  'PRODUCT (DESCRIPTION)', '', 'en_US', ?)