Oracle Text の全文検索機能を容易にするために、1 つの列で ctxsys.context 索引を使用しています。しかし、',' または '.' で区切られた数値をインデックス化するときに問題が発生します。
次のようなインデックスを作成しました。
create index my_index on my_table(my_column)
indextype is ctxsys.context parameters ('SYNC (ON COMMIT)');
次に、4 つのテキスト ドキュメントを挿入します。
insert into my_table (id, doc) values (1, 'FOO 300 BAR');
insert into my_table (id, doc) values (2, 'FOO 300 BAR 1,000.00');
insert into my_table (id, doc) values (3, 'FOO1FOO');
insert into my_table (id, doc) values (4, '1 FOO');
ここで、contains 演算子を使用して、「FOO 300 BAR」、「1,000.00」、および両方の組み合わせを検索したいと思います。
select score(1), id from my_table where contains(doc, 'FOO 300 BAR', 1) > 0;
select score(1), id from my_table where contains(doc, '1,000.00', 1) > 0;
select score(1), id from my_table where contains(doc, 'FOO 300 BAR 1,000.00', 1) > 0;
最初のものは期待どおりに機能し、結果として id 1 と 2 の両方を取得します。1,000.00 を使用しようとすると、結果として 0 行が得られます。
ドキュメントから読んだように、デフォルトとして BASIC_LEXER を使用しています。また、レクサーでセパレーターを明示的に指定して、それをインデックスに適用しようとしました。
begin
ctx_ddl.create_preference('my_lex', 'BASIC_LEXER');
ctx_ddl.set_attribute('my_lex', 'numjoin', '.');
ctx_ddl.set_attribute('my_lex', 'numgroup', ',');
end;
create index my_index on my_table(doc)
indextype is ctxsys.context parameters ('SYNC (ON COMMIT) LEXER my_lex');
しかし、私は以前と同じ行動を経験しました。
Oracle Textがセパレータ付きの数字をどのように処理するか、および区切られた数字が単一の単語として扱われるように索引を構成する方法を説明してもらえますか?
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production を使用しています