使用Oracle Text构建全文搜索应用程序

Oracle Text 是一种功能强大的搜索技术,它内置于 Oracle 数据库的所有版本(包括免费提供的快捷版 (XE))中。它所提供的开发 API 使软件开发人员能够轻松实现功能齐备的内容搜索应用程序。

Oracle Text 可用于搜索结构化和非结构化文档,是对 SQL 通配符匹配的补充。Oracle Text 支持使用基本的布尔运算符(AND、OR、NOT、NEAR 等)将多个搜索条目组合到一起,此外,它还具有更高级的功能,如 soundex 和模糊搜索,以及结果排序等。该技术支持数百种文件类型,包括 Microsoft Office 和 PDF。Oracle Text 适合多种与搜索相关的使用情况和存储结构。Text 的应用领域包括电子商务、文档和记录管理,以及问题跟踪等。可检索的文本可以结构化形式驻留在数据库中,也可以非结构化形式驻留在本地文件系统中或 Web 上。

Oracle Text 提供完整的基于 SQL 的搜索 API,该 API 包含自定义查询运算符、DDL 语法扩展、一组 PL/SQL 过程和数据库视图。通过 Text API,应用程序开发人员可完全控制索引、查询、安全、演示以及有时会需要的软件配置,在开发即需即用的非自定义软件时尤为如此。通过即需即用的软件产品,您希望使软件的配置尽可能简约,即使这意味着要在产品开发中多做一些前期工作也是如此。降低应用程序的复杂性通常会在产品生命周期的后期,尤其是在支持、维护和未来产品开发阶段中见到成效。

Oracle Text 还支持文档级授权,而文档级授权通常很难在统一的同时保持高性能。借助 Text,组合了关系数据与非结构化数据的混和查询也得到了很好的支持。对于授权,这意味着您可以将全文搜索和授权合并到一个查询中。独立结果集和获得最终结果所需的过滤阶段的数量可最大程度地缩减,从而简化了应用程序的开发。Oracle Text 使应用程序开发人员从繁琐的开发中解脱出来,可以集中精力进行性能优化。

Oracle Text 也是编程语言不可知的,并且也可以同样卓越的表现为 PHP 以及 Java 应用程序工作。

前一段时间,我需要提高企业内容管理 (ECM) 系统的搜索功能。我首先对 Oracle Text 的使用进行了评估。评估证明 Oracle Text 是一种构建应用程序搜索非常可行的技术:它具有高级搜索功能,支持大量不同的文件类型,可高度自定义,同时高度可伸缩。原有搜索技术的一个缺点是,您需要在数据库外部运行文件内容搜索,然后运行数据库元数据搜索,对结果进行授权,最后,合并独立的结果集。使用 Oracle Text,所有这些操作都可以在数据库中进行。ECM 系统已经使用 Oracle 数据库来存储元数据。因为此项技术已经推出,因此客户自然会选择使用,而且它也不会给客户增加任何成本。

在数据库中执行自由文本搜索查询的简单方法类似于:

SELECT * FROM issues
   WHERE LOWER(author) LIKE '%word1%' AND LOWER(author) LIKE '%word2%' ...

使用这种方法,每一列都需要与每个关键字单独进行匹配。在每一列中,可以任何顺序与关键字进行匹配。然而,关系数据库的设计使得它不会像上面那样有效地执行查询,而且使用这种方法会产生极其不可伸缩的应用程序。当然,您可以设计自己的索引和搜索解决方案,但是,那样您可能不会优化使用您的资源,在您已经为将搜索技术作为数据库的一部分付出了成本的情况下尤为如此。

本文讨论 Oracle Text 在虚拟的问题跟踪应用程序中的使用。在这个应用程序中,用户可以创建一些包含元数据和可选附加文件的问题。该应用程序利用 Oracle Text 实现元数据和可选附加文件内容的全文搜索功能。

此处给出的示例已经在 Linux 的 Oracle 数据库 XE 上进行了测试,这些示例应该同样也可在其他 Oracle 平台上运行良好。

索引进程与搜索

Oracle Text 为可检索的数据项建立索引之后,用户才能够通过搜索查找内容。编制索引是确保搜索性能的常用方法。Oracle Text 的索引进程是根据管道建模的,在这个管道中,从数据存储检索来的数据项经过一系列转换之后,其关键字会添加到索引中。该索引进程分为多个阶段,每个阶段都由一个单独的实体来处理,并可由应用程序开发人员来配置。

Oracle Text 具有适合不同用途的不同索引类型。对于大型文档的全文搜索,适合使用 CONTEXT 索引类型。该索引进程包括以下几个阶段:

  •   数据检索:只是将数据从数据存储(例如 Web 页面、数据库大型对象或本地文件系统)中取出,然后作为数据流传送到下一个阶段。
  •   过滤:过滤器负责将各种文件格式的数据转换为纯文本格式。索引管道中的其他组件只能处理纯文本数据,不能识别 Microsoft Word 或 Excel 等文件格式。
  •   分段:分段器添加关于原始数据项结构的元数据。
  •   词法分析:根据数据项的语言将字符流分为几个字词。
  •   索引:最后一个阶段将关键字添加到实际索引中。

索引构建完成后,应用程序即可通过普通的 SQL 查询执行最终用户输入的搜索。

安装 Oracle Text

在默认情况下,Oracle Text 随 Oracle 数据库 XE 一起安装。如何使用的是其他数据库版本,您需要自己安装 Oracle Text 功能。安装了此功能后,您只需创建一个普通的数据库用户,并赋予该用户 CTXAPP 角色。这样,用户即可执行特定的索引管理过程:

CREATE USER ot1 IDENTIFIED BY ot1;
   GRANT connect,resource, ctxapp TO ot1;

时间: 2024-10-02 12:23:28

使用Oracle Text构建全文搜索应用程序的相关文章

使用 Microsoft SQL Server 2000 的全文搜索功能构建 Web 搜索应用程序

server|web|程序|全文搜索 使用 Microsoft SQL Server 2000 的全文搜索功能构建 Web 搜索应用程序 Andrew B. CenciniMicrosoft Corporation 2002年12月 适用于:    Microsoft SQL Server 2000摘要:学习如何充分利用 SQL Server 2000 的全文搜索功能.本文包含有关实现最大吞吐率和最佳性能的几点提示和技巧. 目录简介 全文搜索功能简介 配置全文搜索功能 全文查询 排位和优化 其他

如何全文搜索oracle官方文档

[技巧]如何全文搜索oracle官方文档   一.1  BLOG文档结构图       一.2  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~: ① 如何在线和离线查看oracle官方文档,尤其对于没有外网的朋友来说离线搜索官方文档是重中之重(重点) ② 如何查看其它类似的html官方文档,如OGG的官方文档 ③ 如何制作chm帮助文件 ④ 如何精简官方文档   一.3  为什么来查看官方文档     对于学习oracl

PostgreSQL SQL 语言:全文搜索

本文档为PostgreSQL 9.6.0文档,本转载已得到原译者彭煜玮授权.1. 介绍 全文搜索(或者文本搜索)提供了确定满足一个查询的自然语言文档的能力,并可以选择将它们按照与查询的相关度排序.最常用的搜索类型是找到所有包含给定查询词的文档并按照它们与查询的相似性顺序返回它们.查询和相似性的概念非常灵活并且依赖于特定的应用.最简单的搜索认为查询是一组词而相似性是查询词在文档中的频度. 文本搜索操作符已经在数据库中存在很多年了.PostgreSQL对文本数据类型提供了~.~*.LIKE和ILIK

详细讲解PostgreSQL中的全文搜索的用法_数据库其它

开发Web应用时,你经常要加上搜索功能.甚至还不知能要搜什么,就在草图上画了一个放大镜. 搜索是项非常重要的功能,所以像elasticsearch和SOLR这样的基于lucene的工具变得很流行.它们都很棒.但使用这些大规模"杀伤性"的搜索武器前,你可能需要来点轻量级的,但又足够好的搜索工具. 所谓"足够好",我是指一个搜索引擎拥有下列的功能:     词根(Stemming)     排名/提升(Ranking / Boost)     支持多种语言     对拼

如何在Python的Flask框架中实现全文搜索?

  这篇文章主要介绍了在Python的Flask框架中实现全文搜索功能,这个基本的web功能实现起来非常简单,需要的朋友可以参考下 全文检索引擎入门 灰常不幸的是,关系型数据库对全文检索的支持没有被标准化.不同的数据库通过它们自己的方式来实现全文检索,而且SQLAlchemy在全文检索上也没有提供一个好的抽象. 我们现在使用SQLite作为我们的数据库,所以我们可以绕开SQLAlchemy而使用SQLite提供的工具来创建一个全文检索索引.但这么做不怎么好,因为如果有一天我们换用别的数据库,那么

教你怎样在MySQL中提高全文搜索效率

 很多互联网应用程序都提供了全文搜索功能,用户可以使用一个词或者词语片断作为查询项目来定位匹配的记录.在后台,这些程序使用在一个SELECT查询中的LIKE语句来执行这种查询,尽管这种方法可行,但对于全文查找而言,这是一种效率极端低下的方法,尤其在处理大量数据的时候. MySQL针对这一问题提供了一种基于内建的全文查找方式的解决方案.在此,开发者只需要简单地标记出需要全文查找的字段,然后使用特殊的MySQL方法在那些字段运行搜索,这不仅仅提高了性能和效率(因为MySQL对这些字段做了索引来优化搜

用vfp与sql server构建Client/Server应用程序(远程视图)(1)

本文是<用 Visual FoxPro 与 SQL Server 构建 Client/Server 应用程序>系列的一部分,照例"远程视图"应不是开篇章节,但我们发现:在我们为网站准备的文章中有太多的理论性的东西,为了缓解这一矛盾,我们决定把"远程视图"提上来先写. 当下最流行的 ADO 脱胎于 Visual FoxPro,在实际使用中两者各有特色,所以不要小看 Visual FoxPro 在远程数据处理上的能力,它绝对强大!读者可以参看本站的<M

对JavaScript的全文搜索实现相关度评分的功能的方法

  这篇文章主要介绍了对JavaScript的全文搜索实现相关度评分的功能的方法,采用了一个名为Okapi BM25的算法,文中亦有介绍,需要的朋友可以参考下 全文搜索,与机器学习领域其他大多数问题不同,是一个 Web 程序员在日常工作中经常遇到的问题.客户可能要求你在某个地方提供一个搜索框,然后你会写一个类似 WHERE title LIKE %:query% 的 SQL 语句实现搜索功能.一开始,这是没问题,直到有一天,客户找到你跟你说,"搜索出错啦!" 当然,实际上搜索并没有&q

Django 基于 Postgres 的全文搜索

本文讲的是Django 基于 Postgres 的全文搜索, 原文地址:Postgres Full-Text Search With Django 原文作者:Nathan Shafer 译文出自:掘金翻译计划 译者:stein 校对者:Zheaoli lovexiaov Django 基于 Postgres 的全文搜索 Django 在 1.10 版本已经增加了对 Postgres 内建全文检索的支持.当我们想要增加 django 的检索能力又不想去建立和维护其它服务时,相较于其它更重型的像 e