WEB开发网
开发学院数据库Oracle 如何更好的利用Oracle全文检索 阅读

如何更好的利用Oracle全文检索

 2009-03-20 13:10:33 来源:WEB开发网   
核心提示: 全文索引的维护对于CTXSYS.CONTEXT索引,当应用程序对基表进行DML操作后,如何更好的利用Oracle全文检索(4),对基表的索引维护是必须的,索引维护包括索引同步和索引优化,当基表中的被索引文档发生insert、update、delete操作的时候,基表的改变并不能马上影响到索

全文索引的维护

对于CTXSYS.CONTEXT索引,当应用程序对基表进行DML操作后,对基表的索引维护是必须的。索引维护包括索引同步和索引优化。

在索引建好后,我们可以在该用户下查到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(优化)了。

同步(sync): 将新的term 保存到I表;

优化(optimize): 清除I表的垃圾,主要是将已经被删除的term从I表删除。

当基表中的被索引文档发生insert、update、delete操作的时候,基表的改变并不能马上影响到索引上直到同步索引。可以查询视图CTX_USER_PENDING查看相应的改动。例如: 

SELECT pnd_index_name, pnd_rowid,
TO_CHAR (pnd_timestamp, 'dd-mon-yyyy hh24:mi:ss') timestamp
FROM ctx_user_pending;

该语句的输出类似如下:

PND_INDEX_NAME                 PND_ROWID          TIMESTAMP
------------------------------ ------------------ --------------------
MYINDEX                        AAADXnAABAAAS3SAAC 06-oct-1999 15:56:50

上一页  1 2 3 4 5  下一页

Tags:如何 更好 利用

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接