oracle , sqlserver的全文索引给你举个例子:
SELECT id,score(1),score (2),score (1)score (2) total, text
FROM mytable
WHERE contains (text, 'biti', 1)0
OR contains (text, 'hello', 2)0
ORDER BY total DESC,score(1) ,score(2)desc;
看到这里的 score(1) score(2) 了么?
在contains里面指定1 语句中的score(1)就表示这个包含度的一个量值 。可以通过使用 score(1)来代替这个 contains (text, 'biti', 1)的包含度量值...
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','tablespacesIdx_ctxsy');
ctx_ddl.set_attribute('idx_c_store','I_INDEX_CLAUSE','tablespaceIdx_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 ,这说明在其他用户下已经建立了该索引 。
如何更好的使用Oracle全文索引 对多字段建立全文索引 很多时候需要从多个文本字段中查询满足条件的记录,这时就需要建立针对多个字段的全文索引,例如需要从pmhsubjects(专题表)的subjectname(专题名称)和briefintro(简介)上进行全文检索,则需要按以下步骤进行操作: ?? 建议多字段索引的preference 以ctxsys登录 , 并执行: 全文索引的维护 对于CTXSYS.CONTEXT索引,当应用程序对基表进行dml操作后,对基表的索引维护是必须的 。索引维护包括索引同步和索引优化 。在索引建好后,我们可以在该用户下查到oracle自动产生了以下几个表:(假设索引名为myindex): dr$myindex$I、DR$myindex$K、DR$myindex$R、
oracle 数据库 索引 全文索引create index创建的索引是为了提高查询速度,你用的contains是Oracle的信息检索功能,需要指定一个包含有效context索引的列, 如果select子句中有label的话,最后还需要一个比较操作符才能完成查询, 你可以找一些关于Oracle Text索引的资料看看
Oracle全文检索是什么意思?全文检索是一种将文件中所有文本与检索项匹配的文字资料检索方法 。全文检索系统是按照全文检索理论建立起来的用于提供全文检索服务的软件系统 。
判断检索效果的两个指标:
查全率=被检出相关信息量/相关信息总量(%)
查准率=被检出相关信息量/被检出信息总量(%)
Oracle全文检索配置方法:
1.检查数据库是否具有全文检索功能(这是针对已经建成使用的数据库)
查看用户中是否存在ctxsys用户oracle如何全文索引,查询角色里是否存在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
在执行这个脚本的时候,输入oracle如何全文索引了几个参数,第一个参数ctxsys为ctxsys用户的密码
第二个参数Idx_ctxsys为ctxsys用户要使用的表空间
第三个参数temp为ctxsys用户使用的临时表空间
第四个参数nolock为ctxsys用户处于解锁状态 。
4.创建完成后,要登录ctxsys用户
connect ctxsys/ctxsys
执行以下脚本:@?/ctx/admin/defaults/drdefus.sql(这是个很重要的脚本 , 后面创建索引会使用该脚本创建的信息)
5.创建全文索引语法分析器
先要明确使用全文索引的用户,oracle如何全文索引我要使用全文索引的是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','tablespacesIdx_ctxsy');
ctx_ddl.set_attribute('idx_c_store','I_INDEX_CLAUSE','tablespaceIdx_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 ,这说明在其他用户下已经建立了该索引 。
如何实现涉及多个表的多个字段的全文检索功能(oracle)?oracle可以支持多个字段上的全文索引,但如果还涉及到多张表的话 , 就只能在每张表上建一个全文索引 。但这样的话,查询时很不方便 。而且如果涉及到的表或者字段发生变化,需要重新建全文索引,可扩展性不佳 。
另一个思路是专门建立一张中间表 , 其中包括以下字段:表名 , 字段名 , 字段值 , 对象ID 。在字段值这个字段上建立全文索引 。然后定时的将原来四张表中须检索的字段同步到此中间表(可考虑用物化视图) 。查询时 , 直接对此中间表进行查询即可 。
举个例子:假设原表是文章表,其中有如下一条数据:
ID
标题
内容
作者
1
德川家康为什么能统一日本?
请教一下,为什么最后是德川家康统一日本呢?
德川家康粉
现在需要检索在标题,内容或作者字段中存在“德川家康”的数据 。
首先,需要将原数据同步到中间表,变成以下三条数据:
表名
字段名
字段值
对象ID
文章表
标题
德川家康为什么能统一日本?
1
文章表
内容
请教一下,为什么最后是德川家康统一日本呢?
1
文章表
作者
德川家康粉
1
通过在字段值这个字段上全文检索“德川家康”,可以筛选出以上三条数据 。这三条数据都指向文章表中的ID=1的文章 。从文章表里取出这条数据,检索就成功结束了 。
此方法的优点:一是检索的速度比较快;二是可以兼容指定表或指定字段的检索;三是需要检索的表或字段可以动态删减,可扩展性好 。
主要的缺点一是需要一张中间表,并定时同步,消耗额外的服务器资源,二是同步的过程会造成延时,即新修改但尚未同步的数据会暂时检索不到 。
【oracle如何全文索引 oracle 索引语句】oracle如何全文索引的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于oracle 索引语句、oracle如何全文索引的信息别忘了在本站进行查找喔 。
推荐阅读
- html调用js不显示不出来,html引入js文件没有用
- saphr薪资表,员工薪资结构表
- act动作低配置游戏,act游戏用什么玩
- 单机游戏可以用什么cpu,玩单机选什么cpu
- mysql怎么添加类别表 mysql表里怎么添加数据
- 小众产品如何做品牌推广,小众品牌怎么推广
- html5在线玩的情侣小游戏,html5在线玩的情侣小游戏有哪些
- 做网络游戏要多少钱,做网络游戏要多少钱一个月
- 数组怎么写入数据库PHP php数组怎么导入图片