1

私はOracle 19cを使用しています。

Oracle Text を使用して全文索引を作成する VARCHAR2(4000) 列を含む表があります。

インデックスを作成するSQLは次のとおりです。

begin
ctx_ddl.create_index_set('ix_iset');
ctx_ddl.create_preference('ix_pref', 'BASIC_LEXER');
ctx_ddl.set_attribute('ix_pref', 'skipjoins', '-');
ctx_ddl.set_attribute ( 'ix_pref', 'index_stems', 'portuguese');
ctx_ddl.set_attribute ( 'ix_pref', 'index_text', 'YES');
ctx_ddl.set_attribute ( 'ix_pref', 'base_letter', 'YES');
end;

CREATE INDEX ix_tx_column ON MYTABLE(tx_column)
INDEXTYPE IS CTXSYS.CTXCAT
PARAMETERS ('index set ix_iset lexer ix_pref');

すべてうまく機能しますが、64 文字を超える単語があると、エラーが発生します。

ORA-29855: error occurred in the execution of ODCIINDEXCREATE routine
ORA-20000: Oracle Text Error:
DRG-50857: oracle error in dreii1fsh
ORA-12899: value too large for column "CAD"."DR$IX_TX_COLUMN$I"."DR$TOKEN" (actual: 65, maximum: 64)


ORA-06512: em "CTXSYS.DRUE", line 186
ORA-06512: em "CTXSYS.CATINDEXMETHODS", line 102
29855. 00000 -  "error occurred in the execution of ODCIINDEXCREATE routine"
*Cause:    Failed to successfully execute the ODCIIndexCreate routine.
*Action:   Check to see if the routine has been coded correctly.

私はドキュメントを調べましたが、この制限への唯一の参照は次の項目です: 2.14 Oracle Text インデックスのトークン制限

いくつかの調査の後、おそらくOracle-Textの内部関数が単語を 64 CHARSに切り捨てていることに気付きましたが、トークンの制限は 64 BYTESです。

このエラーの原因となっているテキスト ワードには、最初の 64 文字内に ç ã õ é などの発音区別文字が含まれています。各文字のサイズは 2 バイトです。

私はNLS_LENGTH_SEMANTICS=BYTE成功せずに設定しようとしました。

私が調査した限り、インデックス トークンのサイズを変更する方法はありません。


編集:の結果SELECT * FROM v$nls_parametersは次のとおりです。

ここに画像の説明を入力

4

0 に答える 0