oracle数据库实现全文检索

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle数据库实现全文检索相关的知识,希望对你有一定的参考价值。

像这样网站的全文搜索是怎么实现的,新手,越详细越好,谢谢!

Oracle全文检索配置方法:

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

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

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

2.若没有,则需要手动建立,先建立全文检索要使用的空间

sqlplus / as sysdba  --进入控制台

create tablespace Idx_ctxsys datafile \'/oradata/sg186fx/ctxsys01.dbf size 10240M autoextend on next 32M maxsize 20480M;--创建全文检索使用的表空间

3.创建全文检索使用的用户和角色及相应的包,则需要执行oracle自带的一个脚本:cd $ORACLE_HOME/ctx/admin/catctx.sql

还是在sqlplus中执行:

@?/ctx/admin/catctx.sql ctxsys Idx_ctxsys temp nolock

在执行这个脚本的时候,输入了几个参数,第一个参数ctxsys为ctxsys用户的密码

第二个参数Idx_ctxsys为ctxsys用户要使用的表空间

第三个参数temp为ctxsys用户使用的临时表空间

第四个参数nolock为ctxsys用户处于解锁状态。

4.创建完成后,要登录ctxsys用户

connect ctxsys/ctxsys

执行以下脚本:@?/ctx/admin/defaults/drdefus.sql(这是个很重要的脚本,后面创建索引会使用该脚本创建的信息)

5.创建全文索引语法分析器

先要明确使用全文索引的用户,我要使用全文索引的是sgpm用户

因此

grant execute on ctxsys.ctx_ddl to sgpm with grant option;

connect sgpm/sgpm

设置语法分析器:

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

设置词法属性:

exec ctx_ddl.drop_preference(\'idx_c_store\');begin
ctx_ddl.create_preference(\'idx_c_store\',\'BASIC_STORAGE\');
ctx_ddl.set_attribut(\'idx_c_store\',\'I_TABLE_CLAUSE\',\'tablespaces  Idx_ctxsy\');
ctx_ddl.set_attribute(\'idx_c_store\',\'I_INDEX_CLAUSE\',\'tablespace  Idx_ctxsy compress 2\');
end;
/

6.创建索引

create index sgpm.idx_c_cons_name on sgpm.c_cons(cons_name) indextype is ctxsys.context parameters(\'lexer chinalexer storage idx_c_store\');

7.同步索引

variable jobno number;
begin
dbms_job.submit(:jobno,\'pkg_sp_tools.p_cont_sys_index();\',sysdate,\'trunc(sysdate)+19/24+1\');  --执行的是个性化方法。
end;
/

普通的就是用: 

exec ctx_ddl.sync_index(\'idx_c_cons_name\');

到此,全文检索创建成功,contains函数就可以正常使用了。

注意:创建的过程中会出现ORA-29879:cannot create multiple domain index on a column listusing same indextype ,这说明在其他用户下已经建立了该索引。

参考技术A 这个一般是用java做的,90%是用的lucene的搜索引擎技术为主的垂直搜索引擎。比如著名的百度
google等等,门户搜索引擎网站都是用的这个技术。你说的数据库和这个相比在压力以及搜索速度上有一定的差距,数据库毕竟是一款软件,承载量以及大数据的添查删改都是要有搜索时间的,十分讲究存储结构。但是lucene却并没有这样的问题,它的数据是基于网络爬虫来搜索数据的,而不是存储数据在一个数据库中。这其中又涉及到seo优化,优先级排序算法等另一方面的引擎知识了。所以总的来说,lucene在全文检索比数据库的搜索能力强上很多,专业的事情让专业的来做,数据库还是去用作生产的实时数据库和数据仓库来进行报表和决策分析吧!
参考技术B 那个一般是使用开源的检索组件,当然Oracle的全文检索也是可以的,这个网上太多啦,你搜搜看

以上是关于oracle数据库实现全文检索的主要内容,如果未能解决你的问题,请参考以下文章

oracle有没有方法把数据库表中的字段的所有数据中的某个字母或数字修改或替换

Oracle 检索数据(查询数据select语句)

oracle 数据库 索引 全文索引

Oracle全文检索是啥意思?

刚安装好oracle 在创建数据库时提示 ora-12638身份证明检索失败

Oracle9i的全文检索技术