Oracle 全文索引 前言: Oracle 从 7.3 开始支持全文检索,即用户可以使用 Oracle 服务器的上下文(ConText)选项完成基于文本的查询。具体可以采用通配符查找、模糊匹配、相关分类、近似查找、条件加权和词意扩充等方法。在 Oracle8.0.x 中称为 ConText ;在 Oracle8i 中称为 interMedia Text ; Oracle9i 中称为 Oracle Text。 Oracle Text 是 9i 标准版和企业版的一部分。Oracle9i 将全文检索功能做为内置功能提供给用户,使得用户在创建数据库实例时自动安装全文检索。Oracle Text 的应用领域有很多: l 搜索文本 :需要快捷有效搜索文本数据的应用程序。 l 管理多种文档:允许搜索各种混和文档格式的应用程序,包括 ord,excel,lotus 等。 l 从多种数据源中检索文本:不仅来自 Oracle 数据库中的文本数据,而且可以来自Internet 和文件系统的文本数据。 l 搜索 XML 应用程序。 1、搜索文本 不使用Oracle text功能,也有很多方法可以在Oracle数据库中搜索文本.可以使用标准的 INSTR 函数和 LIKE 操作符实现. SELECT * FROM mytext WHERE INSTR (thetext, 'Oracle') > 0; SELECT * FROM mytext WHERE thetext LIKE '%Oracle%'; 有很多时候,使用 instr 和 like 是很理想的,特别是搜索仅跨越很小的表的时候。然而通过这些文本定位的方法将导致全表扫描,对资源来说消耗比较昂贵,而且实现的搜索功能也非常有限。 利用 Oracle Text,你可以回答如“在存在单词’Oracle’的行同时存在单词’Corporation’而且两单词间距不超过10 个单词的文本,查询含有单词’Oracle’或者单词’california’的文本,并且将结果按准确度进行排序,含有词根train 的文本”,以下的sql 代码实现了如上功能,我们且不管这些语法是如何使用的: DROP INDEX index mytext_idx; --丢弃索引 mytext_idx / CREATE INDEX mytext_idx ON mytext( thetext ) INDEXTYPE is CTXSYS.CONTEXT; --创建 CONTEXT 类型索引 mytext_idx / SELECT id FROM mytext WHERE contains (thetext, 'near((Oracle,Corporation),10)') > 0; --发出 contains 查询 / SELECT score (1), id FROM mytext WHERE contains (thetext, 'Oracle or california', 1) > 0 ORDER BY score (1) DESC / SELECT id FROM mytext WHERE contains (thetext, '$tr...