ORACLE TEXT全文検索
ORACLEバージョン10.0.2
データベース関連情報の表示select*from nls_database_parameters
1、簡単な応用
1.1全文検索を使用する場合、現在のORACLEユーザーはCTXAPPの役割を持つ必要がある
作成したユーザーを使用してログイン
SQL> conn textsearch
パスワード入力:******
接続されています.
1.2全文検索を行うデータテーブルを作成し、データを準備する
1.3要約フィールドに索引を作成する
関連する4つのテーブルが作成されます
DR$DEMO_ABSTRACT$I(分詞後のTOKEN表)DR$DEMO_ABSTRACT$K\DR$DEMO_ABSTRACT$N\DR$DEMO_ABSTRACT$R
インデックス作成中にエラーが発生したかどうかを確認
1.4クエリーのテスト
1.5インデックス・スクリプトの表示
select ctx_report.create_index_script('file_index') from dual;
2.外部ファイルの全文検索
ORACLE TEXTはファイルシステムの中のファイルを検索することができて、大部分のファイルフォーマット(例えば:OFFICE、PDFなど)をサポートして、異なるフォーマットORACLE TEXTは異なるを選択します
FILTERは、単一のテキスト型COLUMNにインデックスを作成するように、バイナリファイルの純粋なテキストを抽出し、仮想DOCUMENTを生成します.これらはすべてORACLE TEXT自身が完成した.
上の表textdemoのデータを使用してpathにインデックスを作成します
2.1クエリー
2.2インデックスのサイズ情報の表示
select ctx_report.index_size('demo_path') from dual
2.3同期インデックス
インデックス異常はCTX_からUSER_INDEX_ERRORSビュートレース.
データベースは、インデックス列の変更に基づいてドキュメントの変更を追跡し、ORACLE TEXTに特定のドキュメントのインデックスの再作成を強制する場合は、対応する行のインデックスフィールドを更新します.
update textdemo set path=path where id = 4;
インデックスの同期時にID=4ファイルのキーワードが更新されます.
3カスタムストレージ・プロシージャの使用
USER_DATASTORE:インデックスを合成するときにユーザーが指定したストレージ・プロシージャを使用する
ATTRIBTES:
Procedure:インデックステキストを合成するストレージ・プロシージャを示します.最初のパラメータはROWIDでなければなりません.ストレージ・プロシージャが変更された後、インデックスを再構築する必要があります.
インデックスは、指定されたフィールドでのみ変更または追加され、同期インデックスが機能します.
output_type:ストアド・プロシージャの2番目のパラメータを指定するデータ型(CLOB,CLOB_LOC,BLOB_LOC,VARCHR 2)のデフォルトはCLOB,
CLOB_として指定した場合LOC,BLOB_LOCでは、PROCEDUREが2番目のIN/OUTパラメータにlocatorをコピーするため、一時的なCLOBまたはBLOBが明るくなる必要はないことを示します.
/*
カスタムストレージ・プロシージャの作成
*/
create or replace procedure myproc(rid in rowid,tlob in out clob nocopy)
is
begin
for c1 in (select author,title,text from articles where rowid = rid)
loop
dbms_lob.writeappend(tlob,length(c1.title),c1.title);
dbms_lob.writeappend(tlob,length(c1.author),c1.author);
dbms_lob.writeappend(tlob,length(c1.text),c1.text);
end loop;
end;
/*
データの保存形式を特定し、カスタムストレージ・プロシージャを使用する
*/
begin
ctx_ddl.create_preference('myud','user_datastore');
ctx_ddl.set_attribute('myud','procedure','myproc');
ctx_ddl.set_attribute('myud','output_type','clob');
end;
インデックスを作成する場合、PARAMETERS('DATASTORE MYUD')を変更する以外は変更する必要はありません.
データベース関連情報の表示select*from nls_database_parameters
1、簡単な応用
1.1全文検索を使用する場合、現在のORACLEユーザーはCTXAPPの役割を持つ必要がある
--
--create user textsearch identified by textsearch;
/**
, CTXAPP ,
PROCEDURE
*/
grant connect,resource,ctxapp to textsearch;
/
作成したユーザーを使用してログイン
SQL> conn textsearch
パスワード入力:******
接続されています.
1.2全文検索を行うデータテーブルを作成し、データを準備する
--drop table textdemo;
create table textdemo(
id number not null primary key,
book_author varchar2(20),--
publish_time date,--
title varchar2(400),--
book_abstract varchar2(2000),--
path varchar2(200)--
);
commit;
insert into textdemo values(1,' ',to_date('2008-10-07','yyyy-mm-dd'),' ',' 19 , , 18 90 , , , , , , 、 ','E:\textsearch\moveingcastle.doc');
insert into textdemo values(2,' · ',to_date('2008-10-07','yyyy-mm-dd'),' ',' · 6 , 3 。 、 。 , , 。','E:\textsearch\catch.pdf');
insert into textdemo values(3,' ',to_date('2008-10-07','yyyy-mm-dd'),' ',' 《 》 , 。 , fans , , , , 。','E:\textsearch\dream.txt');
commit;
1.3要約フィールドに索引を作成する
/*
* ,
*/
--drop index demo_abstract;
create index demo_abstract on textdemo(book_abstract)
indextype is ctxsys.context
--parameters('datastore ctxsys.default_datastore filter ctxsys.auto_filter ')
;
commit;
; 関連する4つのテーブルが作成されます
DR$DEMO_ABSTRACT$I(分詞後のTOKEN表)DR$DEMO_ABSTRACT$K\DR$DEMO_ABSTRACT$N\DR$DEMO_ABSTRACT$R
インデックス作成中にエラーが発生したかどうかを確認
SELECT * FROM ctx_USER_index_errors
1.4クエリーのテスト
select score(20),t.* from textdemo t where contains(book_abstract,' or ',20)>0;
select score(20),t.* from textdemo t where contains(book_abstract,' or ',20)>0 and t.title like ' %';
1.5インデックス・スクリプトの表示
select ctx_report.create_index_script('file_index') from dual;
2.外部ファイルの全文検索
ORACLE TEXTはファイルシステムの中のファイルを検索することができて、大部分のファイルフォーマット(例えば:OFFICE、PDFなど)をサポートして、異なるフォーマットORACLE TEXTは異なるを選択します
FILTERは、単一のテキスト型COLUMNにインデックスを作成するように、バイナリファイルの純粋なテキストを抽出し、仮想DOCUMENTを生成します.これらはすべてORACLE TEXT自身が完成した.
上の表textdemoのデータを使用してpathにインデックスを作成します
begin
--ctx_ddl.drop_preference('my_filter');
ctx_ddl.create_preference('my_filter','auto_filter');
end;
/
begin
--ctx_ddl.drop_preference('my_store');
ctx_ddl.create_preference('my_store','file_datastore');
/*
-- ,
, ,
, ,
WINDOWS ";" ,UNIX ":",
: ,
.
ctx_ddl.set_attribute('mystore','path','E:\demo;E:\textsearch');
*/
--ctx_ddl.set_attribute('mystore','path','E:\demo');
end;
/
begin
--ctx_ddl.drop_preference('my_lexer');
ctx_ddl.create_preference('my_lexer','chinese_lexer');
end;
/
--drop index demo_path;
create index demo_path on textdemo(path)
indextype is ctxsys.context
parameters('
datastore my_store
filter my_filter
lexer my_lexer
');
commit;
2.1クエリー
select score(20),t.* from textdemo t where contains(path,' and ',20)>0
-- book_abstract
select score(5),score(20),t.* from textdemo t where contains(book_abstract,' ',5)>0 AND contains(path,' and ',20)>0
2.2インデックスのサイズ情報の表示
select ctx_report.index_size('demo_path') from dual
2.3同期インデックス
インデックス異常はCTX_からUSER_INDEX_ERRORSビュートレース.
データベースは、インデックス列の変更に基づいてドキュメントの変更を追跡し、ORACLE TEXTに特定のドキュメントのインデックスの再作成を強制する場合は、対応する行のインデックスフィールドを更新します.
update textdemo set path=path where id = 4;
インデックスの同期時にID=4ファイルのキーワードが更新されます.
--update textdemo set path='E:\textsearch\dream.txt' where id=3;
update textdemo set path='E:\textsearch\catch.pdf' where id=2;
--update textdemo set path='E:\textsearch\movingcastle.doc' where id=1;
commit;
begin
/*
,
*/
ctx_ddl.sync_index('demo_path','20M') ;
end;
3カスタムストレージ・プロシージャの使用
USER_DATASTORE:インデックスを合成するときにユーザーが指定したストレージ・プロシージャを使用する
ATTRIBTES:
Procedure:インデックステキストを合成するストレージ・プロシージャを示します.最初のパラメータはROWIDでなければなりません.ストレージ・プロシージャが変更された後、インデックスを再構築する必要があります.
インデックスは、指定されたフィールドでのみ変更または追加され、同期インデックスが機能します.
output_type:ストアド・プロシージャの2番目のパラメータを指定するデータ型(CLOB,CLOB_LOC,BLOB_LOC,VARCHR 2)のデフォルトはCLOB,
CLOB_として指定した場合LOC,BLOB_LOCでは、PROCEDUREが2番目のIN/OUTパラメータにlocatorをコピーするため、一時的なCLOBまたはBLOBが明るくなる必要はないことを示します.
/*
カスタムストレージ・プロシージャの作成
*/
create or replace procedure myproc(rid in rowid,tlob in out clob nocopy)
is
begin
for c1 in (select author,title,text from articles where rowid = rid)
loop
dbms_lob.writeappend(tlob,length(c1.title),c1.title);
dbms_lob.writeappend(tlob,length(c1.author),c1.author);
dbms_lob.writeappend(tlob,length(c1.text),c1.text);
end loop;
end;
/*
データの保存形式を特定し、カスタムストレージ・プロシージャを使用する
*/
begin
ctx_ddl.create_preference('myud','user_datastore');
ctx_ddl.set_attribute('myud','procedure','myproc');
ctx_ddl.set_attribute('myud','output_type','clob');
end;
インデックスを作成する場合、PARAMETERS('DATASTORE MYUD')を変更する以外は変更する必要はありません.