質問: Oracle TextのCTXCAT索引検索をしようと色々試していますが、検索結果にデータが1件もひっかかりません。 サンプルでは「HOGE_TABLE」の「HOGE_KEY_WORD」列にCTXCAT索引を作成しました。 設定が足らないのか、SELECT文が問題なのか検討つかないため、教えて頂けないでしょうか。 設定内容は以下の通りです。 ORACLEのバージョン:11.2.0.1 64bit 【設定】 ・テーブル CREATE TABLE HOGE_TABLE( HOGE_ID VARCHAR(9), HOGE_NAME VARCHAR(30), HOGE_KEY_WORD VARCHAR(200) ); ・HOGE_TABLEのデータ INSERT INTO HOGE_TABLE VALUES ('00001', 'テスト名称1', 'テスト名称1てすとめいしょういち'); INSERT INTO HOGE_TABLE VALUES ('00002', 'テスト名称2', 'テスト名称2てすとめいしょうに'); INSERT INTO HOGE_TABLE VALUES ('00003', 'テスト名称3', 'テスト名称3てすとめいしょうさん'); COMMIT; ・索引セット execute CTX_DDL.CREATE_INDEX_SET('HOGE_ISET'); execute CTX_DDL.ADD_INDEX('HOGE_ISET','HOGE_NAME'); ・索引 CREATE INDEX HOGE_KEY_WORD_IDX ON HOGE_TABLE(HOGE_KEY_WORD) INDEXTYPE IS CTXSYS.CTXCAT PARAMETERS ('INDEX SET HOGE_ISET'); 【SELECT文】 HOGE_KEY_WORDに"てすと"というキーワードが含まれる行を検索するために、以下のSQLを実行しましたが、 検索結果が0件になります。 SELECT * FROM HOGE_TABLE WHERE CATSEARCH(HOGE_KEY_WORD, 'てすと', 'ORDER BY HOGE_NAME') > 0;
回答: 日本語検索をしたい場合、以下の設定が必要でした。 【設定】 ・プリファレンス execute ctx_ddl.create_preference('TEST_LEXER','JAPANESE_VGRAM_LEXER'); ・索引 CREATE INDEX HOGE_KEY_WORD_IDX ON HOGE_TABLE(HOGE_KEY_WORD) INDEXTYPE IS CTXSYS.CTXCAT PARAMETERS ('LEXER TEST_LEXER'); 【SELECT文】 SELECT * FROM HOGE_TABLE WHERE CATSEARCH(HOGE_KEY_WORD, 'てすと', NULL) > 0; あと補足ですが、以下のような場合はエラーになるようです。 ・検索キーワードが256byteを超える場合 ORA-29902:ODCllndexStart()ルーチンの実行中にエラーが発生しました。 0RA-20000:Oracle Text error: DRG-50943:行1(例1)で、問合せトークンが長すぎます ・検索キーワードが空文字の場合 ORA-29902:ODCllndexStart()ルーチンの実行中にエラーが発生しました。 0RA-20000:Oracle Text error: DRG-50943:行1(例1)にテキスト問合せの解析構文エラーが発生しました ・検索キーワードが日本語1文字の場合 ORA-29902:ODCllndexStart()ルーチンの実行中にエラーが発生しました。 0RA-20000:Oracle Text error: DRG-50943:このタイプの問合せでcatsearchを実行するには同一キー索引が必要です