要设计Oracle Text应用程序,首先确定期望运行的查询类型。 知道类型后,就可以为任务选择最合适的索引。
Oracle Text用于以下类别的应用程序:
- Document Collection Applications
- Catalog information Applications
- Document Classification Applications
- XML Search Applications
1.文档集合应用程序
1.1关于
文档集合应用集合
该集合通常是静态的,并且在初始索引运行之后,内容没有明显变化。 文档可以是任何大小和格式,例如HTML,PDF或Microsoft Word。 这些文档存储在文档表中。 通过首先为文档集合建立索引来启用搜索。
对于这种类型的应用程序,应该检索与查询最相关的文档。 文档必须在结果列表中排在高位。
1.2文本查询应用程序流程图
文档集合上的典型文本查询应用程序使用户可以输入查询。 该应用程序输入CONTAINS查询,并返回满足查询条件的文档列表(称为命中列表)。 结果通常按相关性排名。 该应用程序使用户可以查看命中列表中的一个或多个文档。
2.目录信息应用程序
目录信息由库存类型信息组成,例如在线书店或拍卖网站。
2.1关于目录信息应用程序
CTXCAT索引可以最好地服务Catalog应用程序。 在SELECT语句的WHERE子句中使用CATSEARCH运算符查询此索引。
2.2目录查询应用程序流程图
目录应用程序使用户可以搜索目录中的特定项目。 例如,在线商店应用程序使用户可以搜索和购买库存中的物品。 通常,用户查询由一个文本组件组成,该组件在文本描述以及一些其他订购条件(例如价格或日期)中进行搜索。
下图说明了在线电子商店的目录查询应用程序的流程图:
- 1)用户输入一个查询,该查询由文本组件(例如CD播放器)和结构化组件(例如按价格订购)组成。
- 2)该应用程序执行CATSEARCH查询。
- 3)该应用程序显示相应的排序结果。
- 4)用户浏览结果。
- 5)用户输入另一个查询或执行操作,例如购买商品。
3.文档分类应用程序
4.XML搜索应用程序
XML搜索应用程序对XML文档执行搜索。 常规文档搜索通常会搜索一组文档,以返回满足文本谓词的文档。 XML搜索通常使用XML文档的结构来限制搜索。 通常,仅返回满足搜索条件的文档部分。 例如,用户可能只需要注释字段包含电力的采购订单,而不是查找包含单词"电力"的所有采购订单。
4.1具有XML搜索应用程序的CONTAINS运算符
注意:如果手动卸载Oracle Text,则删除DBMS_XDBT软件包。 如果手动安装Oracle Text,则创建DBMS_XDBT软件包。从Oracle Database 12c开始,当安装新的Oracle数据库软件或进行升级时,将自动安装Oracle XML数据库(XML DB)。
4.2将Oracle文本功能与Oracle XML DB(XML Search Index)相结合
当请想要对应用程序进行全文检索时,结合使用Oracle Text和Oracle XML DB的功能来创建XML搜索索引。 在这种情况下,通过输入诸如"查找包含单词Pentium的所有节点"之类的查询来利用XML结构。 Oracle Database 12c通过添加对XQuery全文扩展的支持,扩展了Oracle对W3C XQuery规范的支持。 通过此支持,可以对存储在数据库中的XML内容执行支持XML的全文搜索。
4.2.1使用xml_enable方法获取XML Search Index
XML Search Index是启用XML的Oracle文本索引(CTXSYS.CONTEXT)。 该索引类型在一个统一索引中支持信息检索搜索和结构化搜索。XML Search Index还在Oracle文本表中内部存储了二进制持久文档对象模型(PDOM),因此可以在二进制PDOM上对XML操作进行功能评估。 XMLTYPE数据存储支持此XML搜索索引。 在存在这样的XML搜索索引的情况下,XMLEXISTS被无缝地重写为CONTAINS查询。
创建XML Search Index时,将在Oracle Text内部表中实现XML文档的Binary PDOM。 来自Oracle Text索引的后期评估被重定向为与存储在此内部表中的PDOM背道而驰。
创建XML Search Index:
exec CTX_DDL.CREATE_SECTION_GROUP('secgroup','PATH_SECTION_GROUP'); exec CTX_DDL.SET_SEC_GRP_ATTR('secgroup','xml_enable','t'); CREATE INDEX po_ctx_idx on T(X) indextype is ctxsys.context parameters ('section group SECGROUP');
4.2.2使用Text-on-XML方法
使用Oracle Text,可以在包含XML数据的列上创建CONTEXT索引。 列类型可以是XMLType或任何受支持的类型,只要对XML数据使用正确的索引首选项。
例如,设置的CONTEXT索引以使用XML文档创建章节。 考虑以下定义purchase order的XML文档:
<?xml version="1.0"?> <PURCHASEORDER pono="1"> <PNAME>Po_1</PNAME> <CUSTNAME>John</CUSTNAME> <SHIPADDR> <STREET>1033 Main Street</STREET> <CITY>Sunnyvalue</CITY> <STATE>CA</STATE> </SHIPADDR> <ITEMS> <ITEM> <ITEM_NAME> Dell Computer </ITEM_NAME> <DESC> Pentium 2.0 Ghz 500MB RAM </DESC> </ITEM> <ITEM> <ITEM_NAME> norelco R100 </ITEM_NAME> <DESC>Electric Razor </DESC> </ITEM> </ITEMS> </PURCHASEORDER>
--要在ITEM描述部分中查询所有包含Pentium的purchase order,请使用WITHIN运算符: SELECT id from po_tab where CONTAINS( doc, 'Pentium WITHIN DESC') > 0; --使用INPATH运算符可以使用XPATH表达式指定更复杂的条件: SELECT id from po_tab where CONTAINS(doc, 'Pentium INPATH (/PURCHASEORDER/ITEMS/ITEM/DESC') > 0;
4.2.3索引JSON数据
JavaScript Object Notation(JSON)是一种独立于语言的数据格式,用于序列化结构化数据并通过网络(通常在服务器和Web应用程序之间)交换该数据。 JSON提供了一种基于文本的方式来表示JavaScript对象文字,数组和标量数据。
create table t1 (txn_date date, po CLOB, constraint c1 check (po is json)); create search index idx on t1(po) for JSON parameters('DATAGUIDE ON sync (on commit)');
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。