5.5.1.1 Oracle Textを使用したテキスト索引の構成

Oracle Spatial and GraphはOracle Textを使用した自動テキスト索引をサポートします。Oracle Textでは、頂点(またはエッジ)表のV列に格納されているテキスト値の索引付け、検索および分析のために標準SQLが使用されます。Oracle Textはプロパティ・グラフの頂点(またはエッジ)のすべての既存のK/Vペアを索引付けするので、このオプションは自動テキスト索引とともにのみ使用でき、索引の作成時にはワイルドカード("*")索引キー・パラメータを使用する必要があります。

プロパティ・グラフ機能はUnicodeをより適切にサポートするためにNVARCHARタイプの列を使用するので、データベースの文字セットとしてUTF8 (AL32UTF8)を使用することを強くお薦めします。

頂点表(またはエッジ表)にOracle Text索引を作成するには、ALTER SESSION権限が必要です。次の例では、権限を付与します。

SQL> grant alter session to <YOUR_USER_SCHEMA_HERE>;

カスタマイズが必要な場合、次の例のように、CTX_DDLにEXECUTEを付与します。

SQL> grant execute on ctx_ddl to <YOUR_USER_SCHEMA_HERE>;

Oracle Textを使用したテキスト索引はOracleTextIndexParametersオブジェクトを使用します。Oracle Textを使用した索引の構成パラメータには次のものがあります。

  • プリファレンス所有者: プリファレンスの所有者。

  • データ・ストア: テキスト値の格納方法を指定するデータストア・プリファレンス。データストア・プリファレンスは次のようにctx_ddl.create_preference APIを使用して作成できます。

    SQL> -- The following requires access privilege to CTX_DDL
    SQL> exec ctx_ddl.create_preference('SCOTT.OPG_DATASTORE', 'DIRECT_DATASTORE');
    

    値がNULLに設定されている場合、索引はCTXSYS.DEFAULT_DATASOREを使用して作成されます。このプリファレンスは、DIRECT_DATASTORE型を使用します。

  • フィルタ: 索引付けのためのテキストのフィルタ処理方法を決定するフィルタ・プリファレンスです。フィルタ・プリファレンスは次のようにctx_ddl.create_preferenceを使用して作成できます。

    SQL> -- The following requires access privilege to CTX_DDL
    SQL> exec ctx_ddl.create_preference('SCOTT.OPG_FILTER', 'AUTO_FILTER');
    

    値がNULLに設定されている場合、索引はCTXSYS.NULL_FILTERを使用して作成されます。このプリファレンスは、NULL_FILTER型を使用します。

  • 記憶域: テキスト索引に関連付けられた表に対して表領域および作成パラメータを指定する記憶域プリファレンス。記憶域プリファレンスは次のようにctx_ddl.create_preferenceを使用して作成できます。

    SQL> -- The following requires access privilege to CTX_DDL
    SQL> exec ctx_ddl.create_preference('SCOTT.OPG_STORAGE', 'BASIC_STORAGE');
    

    値がNULLに設定されている場合、索引はCTXSYS.DEFAULT_STORAGEを使用して作成されます。このプリファレンスは、BASIC_STORAGE型を使用します。

  • ワード・リスト: 有効な問合せオプションを指定するワード・リスト・プリファレンス。これらの問合せオプションには、ステミング、ファジー・マッチ、サブストリング、接頭辞索引付けが含まれます。データ・ストア・プリファレンスは次のようにctx_ddl.create_preferenceを使用して作成できます。

    SQL> -- The following example enables stemming and fuzzy matching for English.
    SQL> exec ctx_ddl.create_preference('SCOTT.OPG_WORDLIST', 'BASIC_WORDLIST');
    

    値がNULLに設定されている場合、索引はCTXSYS.DEFAULT_WORDLISTを使用して作成されます。このプリファレンスは、使用するデータベース言語に対して言語ステマーを使用します。

  • ストップ・リスト: 索引付けが想定されないワードのリストを指定するストップ・リスト・プリファレンス。ストップ・リスト・プリファレンスは、ctx_ddl.create_stoplistを使用して作成できます。

    値がNULLに設定されている場合、索引はCTXSYS.DEFAULT_STOPLISTを使用して作成されます。このプリファレンスは、使用するデータベース言語のストップリストを使用します。

  • レクサー: 索引付けするテキストの言語を指定するレクサー・プリファレンス。レクサー・プリファレンスは次のようにctx_ddl.create_preferenceを使用して作成できます。

    SQL> -- The following requires access privilege to CTX_DDL
    SQL> exec ctx_ddl.create_preference('SCOTT.OPG_AUTO_LEXER', 'AUTO_LEXER');
    

    値がNULLに設定されている場合、索引はCTXSYS.DEFAULT_LEXERを使用して作成されます。このプリファレンスは、インストール時に使用された言語に基づき、追加のオプションとともに、BASIC_LEXER型を使用します。

次のコード・フラグメントは、Oracle TextをデフォルトのオプションとOPG_AUTO_LEXERと使用して、テキスト索引の構成を作成します。

String prefOwner = "scott";
String datastore = (String) null;
String filter = (String) null;
String storage = (String) null;
String wordlist = (String) null;
String stoplist = (String) null;
String lexer = "OPG_AUTO_LEXER";
String options = (String) null;

OracleIndexParameters params 
                  = OracleTextIndexParameters.buildOracleText(prefOwner,               
                                                              datastore, 
                                                              filter, 
                                                              storage, 
                                                              wordlist, 
                                                              stoplist, 
                                                              lexer, 
                                                              dop, 
                                                              options);