OracleTextのCtxAppタイプの検索

なんのことか不明なタイトルです。
OracleにはOracleTextという全文検索機能があり、私的には結構重宝しています。
Word、Excel、パワポ、PDF、OpenOffice、Lotusやメール、HTMLなど色々なフォーマットに対して全文検索の索引を作成することができて、他の全文検索ソフトとの連動とか考えなくてもよいし、Oracle専用とはいえSQL文で検索できるので便利なのです。
残念な点は、11gでも、Office2007やAcrobat8に対応していないなど、フォーマットの最新版についていけていないという点です。
しかし、まだまだOffice2003とかでも需要があるので、便利だとは思います。
もちろん、varchar2の列にも対応しているので、件数が多くてLike句では遅すぎる場合でも使えるんじゃないかなと思って調査中です。
さて、問題はそこではありません。

OracleTextはContextタイプやCtxAppタイプなどいくつかの種類の全文検索タイプの索引を作成できます。
今回はCtxAppタイプの索引を作ることにしました。自動的に同期を取るなど便利そうだからです。
索引を作ることは問題ありませんでした。

ところが、この索引で日本語1文字を使って検索すると、DRG-10847のエラーメッセージが帰ってきて、検索できません。二文字以上あれば問題ないんだけどね。
レクサーの設定は変更できないし(変更すれば日本語の句切れの認識がおかしくなる)。
Contextタイプでは問題ありません。
エラー内容はというと
「このタイプの問合せでcatsearchを実行するには同一キー索引が必要です」
ということです。

結局どうすればよいのかというと、検索オプション(BASIC_WORD_LIST)の設定であるPREFIX_INDEXをYESにする(デフォルトNo)ことでした。

CTX_DDL.CREATE_PREFERENCE('TestWordlist', 'BASIC_WORDLIST');
CTX_DDL.SET_ATTRIBUTE('TestWordlist', 'PREFIX_INDEX', 'YES');

と、こんな感じです。
わかった理由は、英語のサイトをググってみると、ありました。こういう場合

Create a prefix index.

とあったからでした。
このエラー内容の「同一キー索引」って英語では「prefix index」じゃん。そう書いてあったらもっと早くわかるのに!
日本語サイトででてこないということは、あまり使われてないのかなぁ。

マニュアルをよく見ると、BASIC_WORDLISTのオプションはパフォーマンスに影響しそうで、奥深そう。でも、こんなとこめったに見ない(^ ^;

ブログ気持玉

クリックして気持ちを伝えよう!

ログインしてクリックすれば、自分のブログへのリンクが付きます。

→ログインへ

なるほど(納得、参考になった、ヘー)
驚いた
面白い
ナイス
ガッツ(がんばれ!)
かわいい

気持玉数 : 2

なるほど(納得、参考になった、ヘー)
ナイス

この記事へのコメント

この記事へのトラックバック