德甲

在UNIX服务器上设置Oracle8i全

2019-06-19 20:57:51来源:励志吧0次阅读

  如果不做任何设置,Oracle 缺省使用basic_lexer这个分析器。要指定使用哪一个lexer, 可以这样操作: 第一、在ctxsys用户下建立一个preference:begin ctx_eate_preference('my_lexer','chinese_vgram_lexer')。 第二、在建立intermedia索引时,指明所用的lexer: create index myindex on mytable(mycolumn) indextype is ntext parameters('lexer my_lexer');

  这样建立的全文检索索引,就会使用chinese_vgram_lexer作为分析器。

  4.使用job定时同步和优化: 在intermedia索引建好后,如果表中的数据发生变化,比如增加或修改了记录,怎么办?由于对表所发生的任何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$I_RSK1$I where rownum=20; 这里就不列出查询接过了。可以看到,该表中保存的其实就是Oracle 分析你的文档后,生成的term记录在这里,包括term出现的位置、次数、hash值等。当文档的内容改变后,可以想见这个I表的内容也应该相应改变,才能保证Oracle在做全文检索时正确检索到内容(因为所谓全文检索,其实核心就是查询这个表)。那么如何维护该表的内容呢?总不能每次数据改变都重新建立索引吧!这就用到sync 和 optimize了。 1、同步(sync):将新的term 保存到I表; 2、优化(optimize):清除I表的垃圾,主要是将已经被删除的term从I表删除。

  Oracle提供了一个所谓的ctx server来做这个同步和优化的工作,只需要在后台运行这个进程,它会监视数据的变化,及时进行同步。但笔者使用ctxserver碰到了许多问题,Oracle 北京的support也建议不使用,而是用以下的两个job来完成(该job要建在和表同一个用户下): -- sync:VARIABLE jobno number;BEGINDBMS_BMIT(:jobno,'ctx_nc_index(''myindex'');',SYSDATE, 'SYSDATE + (1/24/4)');commit;END;-- optimizerVARIABLE jobno number;BEGINDBMS_BMIT(:jobno,'ctx_timize_index(''myindex'',''FULL'');',SYSDATE, 'SYSDATE + 1');commit;END;

  其中, 第一个job的SYSDATE + (1/24/4)是指每隔15分钟同步一次,第二个job的SYSDATE + 1是每隔1天做一次全优化。具体的时间间隔,你可以根据自己的应用的需要而定。至此,你的全文检索功能已设置完成。

长期熬夜小便发黄怎么办
儿童小便出现异味怎么办
老年尿急怎么治疗
分享到: