`

使用ORACLE TEXT进行文本搜索

阅读更多

查询文本不同于查询数据,因为有同义词、近义词和反义词。你可能希望搜索互相接近的词或搜索相关联的词。如果仅使用标准的关系操作符,要进行这些查询是非常困难的。通过SQL进行扩充,使其包含文本索引,则ORACLE TEXT允许用户就文本提出非常复杂的问题。
文本索引主要有两种CONTEXT和CTXCAT

用如下方式建立索引
CREATE INDEX REVIEW_CONTEXT_INDEX ON BOOK_REVIEW_CONTEXT(REVIEW_TEXT) INDEXTYPE IS CTXSYS.CONTEXT;

CREATE INDEX REVIEW_CTXCAT_INDEX ON BOOK_REVIEW_CTXCAT(REVIEW_TEXT) INDEXTYPE IS CTXSYS.CTXCAT;

建立好索引后就可以进行文本查询
select title from book_review_context where contains(review_text,'property')>0
CONTAINS函数有两个参数即列名和搜索串,它检查review_text列的文本索引。如果在review_text列的文本索引中找到单词'property'则数据库返回的得分大于0,并返回匹配的TITLE值。

如果建立的是CTXCAT索引就用CATSEARCH函数
select title from book_review_ctxcat where catsearch(review_text,'property',null)>0;

可使用的文本查询表达式有以下几种:
1。单词的精确匹配搜索
select title from book_review_context where contains(review_text,'property')>0
2。多个单词精确匹配的搜索
可以使用AND连接多个单词
select title from book_review_context where contains(review_text,'property and harvests')>0
还可以使用&但是在SQLPLUS里必须执行set define off否则&将被视作变量
set define off
select title from book_review_context where contains(review_text,'property & harvests')>0
对于CTXCAT索引AND完全可以省略
select title from book_review_ctxcat where catsearch(review_text,'property harvests',null)>0;
除AND外还可以使用OR运算符在ORACLE TEXT中OR是一根竖线(|)
因此下面的两个查询是等同的
select title from book_review_context where contains(review_text,'property or harvests')>0

select title from book_review_context where contains(review_text,'property | harvests')>0
但是要注意CATSEARCH函数不支持OR只支持‘|’符号;
ACCUM(累加)提供了另一种组合搜索的方法。等价于逗号,所以下面的两个查询是等价的
select title from book_review_context where contains(review_text,'property accum harvests')>0
select title from book_review_context where contains(review_text,'property , harvests')>0
但是CATSEARCH函数调用支持ACCUM语法但不应该使用,因为CATSEARCH不计算用来与阀值进行比较的得分;
MINUS运算符从第一项搜索的得分中减去第二项搜索的得分等价于减号,所以下面的两个查询是等价的
select title from book_review_context where contains(review_text,'property minus harvests')>0
select title from book_review_context where contains(review_text,'property - harvests')>0
可以用圆括号来阐明搜索条件内的逻辑
select title from book_review_context where contains(review_text,'house or (workers and harvests')>0
3。短语精确匹配的搜索
在进行短语搜索的时候应将整个短语作为搜索串的一部分
select title from book_review_context where contains(review_text,'doctor visits')>0
若搜索的短语中包含ORACLE TEXT内的保留字,则必须使用花括号括住相应的保留字
select title from book_review_context where contains(review_text,'taengdmg {and} dfdng)>0
4。搜索互相接近的词
select title from book_review_context where contains(review_text,'property near harvests')>0
可以使用关键词NEAR也可以用;代替NEAR
5。在搜索中使用通配符
select title from book_review_context where contains(review_text,'worker%')>0
select title from book_review_context where contains(review_text,'work___)>0
6。搜索具有相同词根的词
select title from book_review_context where contains(review_text,'$worker')>0
7。模糊匹配搜索
select title from book_review_context where contains(review_text,'?worker')>0
8。搜索发音相似的词
select title from book_review_context where contains(review_text,'!worker')>0
9。使用ABOUT运算符
在ORACLE TEXT中可以搜索文档的主题
select review_text from book_review_context where contains(review_text,'about(mdgd)')>0
10。索引集
为了建立一个名为reviews的索引集可使用CREATE_INDEX_SET过程
execute ctx_ddl.create_index_set('reviews)
可以通过add_index过程添加索引到索引集中了
execute ctx_ddl.add_index('reviewers','reviewer');

分享到:
评论
1 楼 fishoflove 2009-09-17  

相关推荐

    oracle database 10g 完整参考手册part1

    第25章 使用Oracle Text进行文本搜索 第26章 使用外部表 第27章 使用回闪查询 第28章 回闪:表和数据库 第Ⅳ部分 Pl/SQL 第29章 PL/SQL简介 第30章 触发器 第31章 过程、函数与程序包 第32章 使用本地动态SQL和DBMS_...

    oracle database 11g 高清完整中文版part2

     第27章 使用oracle text 进行文本搜索  第28章 使用外部表  第29章 使用闪回查询  第30章 闪回:表和数据库  第31章 sql 重放 第ⅳ部分 pl/sql  第32章 pl/sql 简介  第33章 应用程序在线升级  第34章 ...

    oracle database 11g 完整参考手册中文高清完整版part3

     第27章 使用oracle text 进行文本搜索  第28章 使用外部表  第29章 使用闪回查询  第30章 闪回:表和数据库  第31章 sql 重放 第ⅳ部分 pl/sql  第32章 pl/sql 简介  第33章 应用程序在线升级  第34章 ...

    oracle database 11g完全参考手册 高清完整版part1 共3部分

     第27章 使用oracle text 进行文本搜索  第28章 使用外部表  第29章 使用闪回查询  第30章 闪回:表和数据库  第31章 sql 重放 第ⅳ部分 pl/sql  第32章 pl/sql 简介  第33章 应用程序在线升级  第34章 ...

    Oracle_Database_11g完全参考手册.part3/3

    第27章 使用Oracle Text进行文本搜索 第28章 使用外部表 第29章 使用闪回查询 第30章 闪问:表和数据 第31章 SQL重放 第Ⅳ部分 PL/SQL 第32章 PL/SQL简介 第33章 应用程序在线升级 第34章 应用程序在线升级 第35章...

    Oracle_Database_11g完全参考手册.part2/3

    第27章 使用Oracle Text进行文本搜索 第28章 使用外部表 第29章 使用闪回查询 第30章 闪问:表和数据 第31章 SQL重放 第Ⅳ部分 PL/SQL 第32章 PL/SQL简介 第33章 应用程序在线升级 第34章 应用程序在线升级 第35章...

    Oracle Text FAQ

    Oracle Text FAQ 文本处理及搜索

    Oracle9i的全文检索技术

    使用Oracle9i和Oracle Text,可以方便而有效地利用标准的SQL工具来构建基于文本的新的开发工具或对现有应用程序进行扩展。应用程序开发人员可以在任何使用文本的Oracle数据库应用程序中充分利用Oracle Text搜索,...

    oracle全文检索.pdf

    Oracle Text 使Oracle9i 具备了强大的文本检索能力和智能化的文本管理能力,Oracle Text 是Oracle9i 采用的新名称,在oracle8/8i 中被称为oracle intermedia text,oracle8 以前是 oracle context cartridge。Oracle...

    Oracle 9i的全文检索技术

    使用Oracle9i和Oracle Text,可以方便而有效地利用标准的SQL工具来构建基于文本的新的开发工具或对现有应用程序进行扩展。应用程序开发人员可以在任何使用文本的 Oracle数据库应用程序中充分利用Oracle Text搜索,...

    TextEditor-文本整理器

    不但提供了大量实用的整理工具,可满足各种不同的整理要求,使你从繁琐的修改工作中摆脱出来,而且提供的批量整理功能,可以使你在几分钟内整理上百篇文本,再不用为手上的大量不规范的文本发愁了。

    Oracle全文检索.rar

    Oracle Text 使Oracle9i 具备了强大的文本检索能力和智能化的文本管理能力,Oracle Text 是Oracle9i 采用的新名称,在oracle8/8i 中被称为oracle intermedia text,oracle8 以前是oracle context cartridge。Oracle ...

    Oracle文本函数简介

    Oracle文本函数使我们常用的函数,下面就为您介绍几种Oracle文本函数的用法,供您参考学习,希望可以让您对Oracle文本函数有更深的认识。 (1)UPPER、LOWER和INITCAP 这三个函数更改提供给它们的文体的大小写。 ...

    Oracle 如何创建和使用全文索引

    不使用Oracle text功能,也有很多方法可以在Oracle数据库中搜索文本.可以使用标准的INSTR函数和LIKE操作符实现。 SELECT *FROM mytext WHERE INSTR (thetext, 'Oracle') > 0; SELECT * FROM mytext WHERE thetext ...

    详解Oracle数据库中文全文索引

    Oracle数据库的全文检索技术已经非常完美,Oracle Text使Oracle9i具备了强大的文本检索能力和智能化的文本管理能力。Oracle Text是Oracle9i采用的新名称,在Oracle8/8i中它被称作Oracle interMedia Text,在Oracle8...

    Oracle 主要配置文件介绍

    保护数据考虑的 尤其在 CAMS 双机应用模式下 能够保证数据的一致性 具体的修改操作可参考 Linux与 Oracle 安装手册 初始化参数文件是一个包含实例配置参数的文本文件 这些参数被设置为特 定的值 用于...

    oracle9i中全文检索的创建与使用

    racle从7.3开始支持全文检索,即用户可以使用Oracle服务器的上下文(ConText)选项完成基于文本的查询。具体可以采用通配符查找、模糊匹配、相关分类、近似查找、条件加权和词意扩充等方法。在Oracle8.0.x中称为...

    Oracle建立二进制文件索引的方法

    Oracle text使用标准的sql语言索引、查找、分析存储在oracle数据库、文件或者网络里的文本及文档。 Oracle text能进行关于文档的语言分析,使用多种方法查找文档,包括关键字、上下文查询、逻辑操作、模式匹配、...

    最全的oracle常用命令大全.txt

    可以使用DEFINE命令设置系统变量EDITOR来改变文本编辑器的类型,在login.sql文件中定义如下一行 DEFINE_EDITOR=vi f、运行命令文件 SQL>START test SQL>@test 常用SQL*Plus语句 a、表的创建、修改、删除 创建表的...

    oracle 10g问题总结

     select text from all_source where owner=user and name='SF_SPLIT_STRING'  查看表字段  select cname from col where tname='ZW_YINGYEZ'  select column_name from user_tab_columns where table_name='...

Global site tag (gtag.js) - Google Analytics