以下是创建全文索引的方法(网上有文章提到使用图形化界面,我用图形化界面创建全文索引,创建了一个晚上,第二天起床居然还没完。但用SQL命令15分钟左右就搞定):
对cmng_custominfo 表中的address字段做全文检索:
1,在oracle9201中需要创建一个分词的东西:
BEGIN
ctx_ddl.create_preference ('SMS_ADDRESS_LEXER', 'CHINESE_LEXER');
--ctx_ddl.create_preference ('my_lexer', 'chinese_vgram_lexer'); 不用
end;
2,创建全文检索:
CREATE INDEX INX_CUSTOMINFO_ADDR_DOCS ON cmng_custominfo(address) INDEXTYPE IS CTXSYS.CONTEXT PARAMETERS ('LEXER SMS_ADDRESS_LEXER');
3,查询时候,使用:
select * from cmng_custominfo where contains (address, '金色新城')>1;
4,需要定期进行同步和优化:
同步:根据新增记录的文本内容更新全文搜索的索引。
begin
ctx_ddl.sync_index('INX_CUSTOMINFO_ADDR_DOCS');
end;
优化:根据被删除记录清除全文搜索索引中的垃圾
begin
ctx_ddl.optimize_index('INX_CUSTOMINFO_ADDR_DOCS', 'FAST');
end;
-------------------------------------------------------------------------
5,采用job做步骤4中的工作:
1)该功能需要利用oracle的JOB功能来完成
因为oracle9I默认不启用JOB功能,所以首先需要增加ORACLE数据库实例的JOB配置参数:
job_queue_processes=5
重新启动oracle数据库服务和listener服务。
2)同步 和 优化
--同步 sync:
variable jobno number;
BEGIN
DBMS_JOB.SUBMIT(:jobno,'ctx_ddl.sync_index(''INX_CUSTOMINFO_ADDR_DOCS'');', SYSDATE, 'SYSDATE + (1/24/4)');
commit;
END;
--优化
variable jobno number;
begin
DBMS_JOB.SUBMIT(:jobno,'ctx_ddl.optimize_index(''INX_CUSTOMINFO_ADDR_DOCS'',''FULL'');', SYSDATE, 'SYSDATE + 1');
commit;
END;
其中, 第一个job的SYSDATE + (1/24/4)是指每隔15分钟同步一次,第二个job的SYSDATE + 1是每隔1天做一次全优化。具体的时间间隔,可以根据应用的需要而定
6,索引重建
重建索引会删除原来的索引,重新生成索引,需要较长的时间。
重建索引语法如下:
ALTER INDEX INX_CUSTOMINFO_ADDR_DOCS REBUILD;
据网上一些用家的体会,oracle重建索引的速度也是比较快的,有一用家这样描述:
Oracle 的全文检索建立和维护索引要比ms sql server都要快得多,笔者的65万记录的一个表建立索引只需要20分钟,同步一次只需要1分钟。
因此,也可以考虑用job的办法定期重建索引。
例如:
0.用sys进去 把ctxsys密码修改
1.赋权
在ctxsys用户下把ctx_ddl的执行权限赋于要使用全文索引的用户,例:
grant execute on ctx_ddl to csdba;
2.创建分词器:
BEGIN
ctx_ddl.create_preference ('my_lexer', 'CHINESE_LEXER');
end;
换csdba登录
3.创建全文检索:
CREATE INDEX it_Remark_index ON itskills(Remark) INDEXTYPE IS CTXSYS.CONTEXT PARAMETERS ('LEXER my_lexer')
4.修改SQL
5.同步
begin
ctx_ddl.sync_index('it_Remark_index');
end;
6.优化
begin
ctx_ddl.optimize_index('it_Remark_index', 'FAST');
end;
7.错误解决
(1)ORA-29855: 执行 ODCIINDEXCREATE 例行程序时出错
ORA-20000: Oracle Text
错误:
DRG-10509: 无效的文本列: ID
ORA-06512:
在 "CTXSYS.DRUE", line 160
ORA-06512:
在 "CTXSYS.TEXTINDEXMETHODS", line 364
查看错误堆栈的程序源?
原因:Oracle只支持在varchar,varchar2,clob,long类型上建全文索引
(2)
8.删除
//删除索引
drop index it_Remark_index 删除索引
//如果遇到某个索引无法删除请在删除索引后加force
如: drop index it_Remark_index force 强制删除索引
//删除分词器
BEGIN
ctx_ddl.drop_preference('my_lexer');
end;
分享到:
相关推荐
使用全文搜索查询数据 在数据库中快速搜索数据,使用索引可以提高搜索速度,...在SQL Server 中提供了一种名为全文索引的技术,可以大大提高从长字符串里搜索数 据的速度,在本章里,将会对全文索引进行详细的介绍。
java全文搜索引擎 Lucene不是一个完整的全文索引应用,而是是一个用Java写的全文索引引擎工具包,它可以方便
WebSolrDemo,全文检索,全文索引的使用以及工具类,都在代码中
SQL2000 全文索引完全图解
一般现在的搜索引擎分为两部分,一部分是是分词,另外一部分是建立全文索引,全文索引就是基于分词结果给没一个词都建立一个索引,我这里基于hash索引简单实现了一下全文索引
sql全文索引 sphinxsql
SQL Server 2005 全文索引,有图解。
mysql全文索引解决方案的最佳选择,coreseek是针对中文分词专门开发结合sphinx全文索引的数据库第三方工具。
该文档详述如何创建全文索引优化模糊查询,使用全文索引的填充因子避免漏查多查
Oracle_全文索引,
全文索引示例(net,winfrom,src),image字段的操作
oracle 全文检索 oracle全文索引 多列字段检索,匹配多列字段搜索功能。
SQL Server的全文索引及优化.pdf
全文索引教程,初学者可以快速建立全文索引
ORacle 全文索引
Oracle的词法分析器针对 ZHS16GBK字符集的词法分析尚不够智能,只能机械地以字为单元进行匹配。对于utf8字符集的数据库有一个...本文将为大家介绍如何进行oracle全文索引设置的文档发给大家,适用于8i、9i各平台版本。
indexer4j - Java的简单全文索引和检索库