信息来源: IT168
在Oracle8.0.x 中称为ConText ;在Oracle8i 中称为interMedia Text ;Oracle9i 中称为Oracle Text。
Oracle Text 的应用领域有很多:
搜索文本:需要快捷有效搜索文本数据的应用程序
管理多种文档:允许搜索各种混和文档格式的应用程序,包括ord,excel,lotus 等
从多种数据源中检索文本:不仅来自Oracle 数据库中的文本数据,而且可以来自Internet和文件系统的文本数据
搜索XML 应用程序
2、搜索文本
不使用Oracle text 功能,也有很多方法可以在Oracle 数据库中搜索文本.可以使用标准的INSTR 函数和LIKE 操作符实现.
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
connect scott/tiger
insertinto dept (deptno,dname,loc) values ('50','公安软件事业部','四楼');
insertinto dept (deptno,dname,loc) values ('60','社保软件事业部','三楼');
insertinto dept (deptno,dname,loc) values ('70','人事部','二楼');
insertinto dept (deptno,dname,loc) values ('80','系统集成部','一楼');
commit;






-----------------------常用办法---------------------------------------
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
SELECT*FROM dept WHERE INSTR (dname, '软件') >0;
SELECT*FROM dept WHERE dname LIKE'%软件%';


-----------------------全文检索办法------------------------------------
-----------------------简单介绍-------------------------------------------
1、Oracle Text 索引将文本打碎分成很多的记号(token).
例如文本‘I Love www.itpub.net’将会被分成I ,LOVE,WWW,ITPUB,NET 这样的记号(token)。
例如文本‘I Love www.itpub.net’将会被分成I ,LOVE,WWW,ITPUB,NET 这样的记号(token)。
2、在索引建好后,我们可以在该用户下查到Oracle 自动产生了以下几个表:
(假设索引名为myindex):DR$myindex$I、DR$myindex$K、DR$myindex$R、DR$myindex$N 其中以I表最重要
(假设索引名为myindex):DR$myindex$I、DR$myindex$K、DR$myindex$R、DR$myindex$N 其中以I表最重要
3、建立索引的语法
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
CREATEINDEX[schema.]indexon[schema.]table(column) INDEXTYPE
IS ctxsys.context [ONLINE]
LOCAL [(PARTITION [partition][PARAMETERS('paramstring')]
[, PARTITION [partition][PARAMETERS('paramstring')]])]
[PARAMETERS(paramstring)][PARALLEL n][UNUSABLE];





4、如果想在两列(多列)中查找某个单词是否存在这两个列之一。
方法一:在不同的列上建索引
方法二:定制
连接ctxsys,只有ctxsys才能建立MULTI_COLUMN_DATASTORE
方法一:在不同的列上建索引
方法二:定制
连接ctxsys,只有ctxsys才能建立MULTI_COLUMN_DATASTORE
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
EXEC ctx_ddl.create_preference('mymds', 'MULTI_COLUMN_DATASTORE');
EXEC ctx_ddl.set_attribute('mymds', 'columns', 'dname, loc');


连接scott
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
CREATEINDEX SCOTT.IND_DEPT_DNAME
ON SCOTT.DEPT(DNAME) INDEXTYPE IS CTXSYS.CONTEXT
PARAMETERS (' DATASTORE CTXSYS.MYMDS LEXER SCOTT.MY_LEXER');
SELECT*
FROM dept
WHEREcontains(dname,'人事 or 四楼')>0;






5、指定存储参数
学习使用ORACLE TEXT MANAGER;
学习使用ORACLE TEXT MANAGER;
6、设置词法分析器
学习使用ORACLE TEXT MANAGER;
学习使用ORACLE TEXT MANAGER;
7、索引维护
对于CTXSYS.CONTEXT 索引,当应用程序对基表进行DML 操作后,对基表的索引维护是必须的。索引维护包括索引同步和索引优化。
当基表中的被索引文档发生insert、update、delete 操作的时候,基表的改变并不能马上影响到索引上直到同步索引。
7.1 同步和优化方法: 可以使用Oracle 提供的ctx_ddl 包同步和优化索引。
同步语法:
对于CTXSYS.CONTEXT 索引,当应用程序对基表进行DML 操作后,对基表的索引维护是必须的。索引维护包括索引同步和索引优化。
当基表中的被索引文档发生insert、update、delete 操作的时候,基表的改变并不能马上影响到索引上直到同步索引。
7.1 同步和优化方法: 可以使用Oracle 提供的ctx_ddl 包同步和优化索引。
同步语法:
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
ctx_ddl.sync_index(
idx_name INVARCHAR2DEFAULTNULL
memory INVARCHAR2DEFAULTNULL,
part_name INVARCHAR2DEFAULTNULL
parallel_degree INNUMBERDEFAULT1);





idx_name 索引名称
memory 指定同步索引需要的内存。默认是系统参数DEFAULT_INDEX_MEMORY 。指定一个大的内存时候可以加快索引效率和查询速度,且索引有较少的碎片
part_name 同步哪个分区索引。
parallel_degree 并行同步索引。设置并行度。
同步例子:
memory 指定同步索引需要的内存。默认是系统参数DEFAULT_INDEX_MEMORY 。指定一个大的内存时候可以加快索引效率和查询速度,且索引有较少的碎片
part_name 同步哪个分区索引。
parallel_degree 并行同步索引。设置并行度。
同步例子:
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
insertinto dept (deptno,dname,loc) values ('71','销售部','二楼');

使用2M 内存同步索引myindex:
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
BEGIN
ctx_ddl.sync_index ('ind_dept_dname', '2M');
END;



优化例子:
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
BEGIN
ctx_ddl.optimize_index ('ind_dept_dname', 'full');
END;



7.2 使用job 定时同步和优化
用以下的两个job 来完成(该job 要建在和表同一个用户下) :
-- 同步:
用以下的两个job 来完成(该job 要建在和表同一个用户下) :
-- 同步:
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
VARIABLE jobno number;
BEGIN
DBMS_JOB.SUBMIT(:jobno,'ctx_ddl.sync_index(''ind_dept_dname'');',SYSDATE, 'SYSDATE + (1/24/4)');
commit;
END;





-- 优化:
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
VARIABLE jobno number;
BEGIN
DBMS_JOB.SUBMIT(:jobno,'ctx_ddl.optimize_index(''ind_dept_dname'',''FULL'');',SYSDATE, 'SYSDATE + 1');
commit;
END;





其中, 第一个job 的SYSDATE + (1/24/4)是指每隔15分钟同步一次,
第二个job 的SYSDATE+ 1 是每隔1 天做一次全优化。具体的时间间隔,你可以根据自己的应用的需要而定。
第二个job 的SYSDATE+ 1 是每隔1 天做一次全优化。具体的时间间隔,你可以根据自己的应用的需要而定。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22198259/viewspace-669950/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/22198259/viewspace-669950/