6 显示满足查询条件的文档
通常,通过使用Oracle Text查询应用程序,用户可查看查询所返回的文档。用户从命中列表中选择一个文档,然后应用程序以某种形式显示该文档。通过Oracle Text,可以用不同的方式再现文档。例如,可以通过突出显示查询词来显示文档。突出显示的查询词可以是相关词查询中的词,也可以是英文 ABOUT 查询中的主题词。
以下是关于输出效果和用于每个输出效果的过程的信息:
突出显示的文档,纯文本格式版本(CTX_DOC.MARKUP)
突出显示的文档,HTML版本(CTX_DOC.MARKUP)
突出显示纯文本格式版本的偏移量信息(CTX_DOC.HIGHLIGHT)
突出显示HTML 版本的偏移量信息(CTX_DOC.HIGHLIGHT)
纯文本格式版本,无突出显示(CTX_DOC.FILTER)
HTML版本文档,无突出显示(CTX_DOC.FILTER)
7 索引维护
索引建好后,如果表中的数据发生变化,比如增加或修改了记录,怎么办?由于对表所发生的任何DML语句,都不会自动修改索引,因此,必须定时同步(sync)和优化(optimize)索引,以正确反映数据的变化。
在索引建好后,可以在该用户下查到Oracle自动产生了以下几个表:(假设索引名为myindex):
DR$myindex$I,DR$myindex$K,DR$myindex$R,DR$myindex$N
其中以I表最重要,可以查询一下该表:
select token_text, token_count from DR$ myindex $I where rownum<=20;
查询结果在此省略。可以看到,该表中保存的其实就是Oracle 分析你的文档后,生成的term记录在这里,包括term出现的位置、次数、hash值等。当文档的内容改变后,可以想见这个I表的内容也应该相应改变,才能保证Oracle在做全文检索时正确检索到内容(因为所谓全文检索,其实核心就是查询这个表)。那么如何维护该表的内容,不能每次数据改变都重新建立索引,这就要用到sync 和 optimize了。
同步(sync):将新的term 保存到I表;
优化(optimize):清除I表的垃圾,主要是将已经被删除的term从I表删除。
Oracle提供了一个所谓的ctx server来做这个同步和优化的工作,只需要在后台运行这个进程,它会监视数据的变化,及时进行同步。另外,也可以用以下的job来完成(该job要建在和表同一个用户下):
create or replace procedure sync is begin execute immediate 'alter index myindex rebuild online' || ' parameters ( ''sync'' )' ; execute immediate 'alter index myindex rebuild online' || ' parameters ( ''optimize full maxtime unlimited'' )' ; end sync; / Set ServerOutput on declare v_job number; begin Dbms_Job.Submit ( job => v_job, what => 'sync;', next_date => sysdate, /* default */ interval => 'sysdate + 1/720' /* = 1 day / ( 24 hrs * 30 min) = 2 mins */ ); Dbms_Job.Run ( v_job ); Dbms_Output.Put_Line ( 'Submitted as job # ' || to_char ( v_job ) ); end; / |
job的SYSDATE + (1/720)是指每隔2分钟同步一次。具体的时间间隔,可以根据自己的应用的需要而定。
8 小结
文本对于各种规模的公司、机构组织来说,都是包含众多丰富信息的最有效载体,Oracle Text的推出,标志着Oracle提供了一套崭新的技术,可以便捷安全的用于管理企业的文本信息。Oracle Text使应用程序开发者可以透明地将全文检索能力加入到基于SQL的应用程序中,Oracle Text也是其他Oracle产品的核心组件,比如Oracle9iAS Portal,Oracle eBusiness Suite,Oracle Ultra Search和Oracle Internet File System等。灵活运用Oracle Text提供的全文检索技术,就可以使自己的应用具备强大的全文检索能力。