【Oracle】 Oracle全文检索功能建立

来源:互联网 发布:网络事件营销 编辑:程序博客网 时间:2024/05/16 17:12

Oracle text(全文检索) 可以把任何文档和文件编入索引,从而是访问更快,更容易检索相关的信息

1.检查数据库是否具有全文检索功能(这是针对已经建成使用的数据库)

        查看用户中是否存在ctxsys用户,查询角色里是否存在ctxapp角色。以上两个中的1个不满足(不存在),则说明没有装过全文检索功能。

      使用contains函数的时候,若没有全文检索则会报错的。



1. 

--使用如下脚本。

SQL> connect SYS/password@tns_ as SYSDBASQL> spool text_install.txtSQL> @?/ctx/admin/catctx.sql CTXSYS SYSAUX TEMP NOLOCK


--脚本中各个参数含义:

CTXSYS - is the ctxsys user password
SYSAUX - is the default tablespace for ctxsys
TEMP - is the temporary tablespace for ctxsys
LOCK|NOLOCK - ctxsys user account will be locked or not

2. The next step is to install appropriatelanguage-specific default preferences.

--指定默认的安装语言

无此步骤,后续新建索引这里将报错 

如此错误DRG-10700: preference does not exist: CTXSYS.DEFAULT_WORDLIST

--如果使用US作为默认语言,执行drdefus.sql.

SQL> connect CTXSYS/password@tns_aliasSQL> @?/ctx/admin/defaults/drdefus.sqlSQL> spool off



3.建立中文语法分析器

 exec ctx_ddl.create_preference ('chinalexer', 'chinese_lexer');


4、建立全文索引

 

create index YU_TEST_INDEX on YU_TEST(name) indextype is CTXSYS.CONTEXT parameters('lexer chinalexer');

这句话的意思就是,在YU_TEST_INDEX表中的name字段上创建索引,索引类系那个为context类型,该索引用到的分析器为前面定义的my_lexer,该索引用到的过滤词组为前面定义得my_stoplist。

5、使用索引

select * from YU_TEST where contains(name,'重庆')>0; 

6.索引优化
前面已经能够进行检索了,现在就是对索引进行优化
当我们需要修改表中的数据是不会同步更新数据的,需要我们在程序中手动的更新,可以写一个oracle的触发器,当添加、删除、修改操作时,进行索引更新。也可以定时进行更新。
索引同步:
 
exec ctx_ddl.sync_index('yu_test_index')  

索引优化:
exec ctx_ddl.optimize_index('yu_test_index','full') 



0 0
原创粉丝点击