使用ORACLE TEXT进行文本搜索

发布时间:2014-10-25 2:20:25
来源:分享查询网

文本不同于查询数据,因为有同义词、近义词和反义词。你可能希望搜索互相接近的词或搜索相关联的词。如果仅使用标准的关系操作符,要进行这些查询是非常困难的。通过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')>0CONTAINS函数有两个参数即列名和搜索串,它检查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')>02。多个单词精确匹配的搜索可以使用AND连接多个单词select title from book_review_context where contains(review_text,'property and harvests')>0还可以使用&但是在SQLPLUS里必须执行set define off否则&将被视作变量set define offselect 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')>0select 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')>0select 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')>0select 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')>03。短语精确匹配的搜索在进行短语搜索的时候应将整个短语作为搜索串的一部分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)>04。搜索互相接近的词select title from book_review_context where contains(review_text,'property near harvests')>0可以使用关键词NEAR也可以用;代替NEAR5。在搜索中使用通配符select title from book_review_context where contains(review_text,'worker%')>0select title from book_review_context where contains(review_text,'work___)>06。搜索具有相同词根的词select title from book_review_context where contains(review_text,'$worker')>07。模糊匹配搜索select title from book_review_context where contains(review_text,'?worker')>08。搜索发音相似的词select title from book_review_context where contains(review_text,'!worker')>09。使用ABOUT运算符在ORACLE TEXT中可以搜索文档的主题select review_text from book_review_context where contains(review_text,'about(mdgd)')>010。索引集为了建立一个名为reviews的索引集可使用CREATE_INDEX_SET过程execute ctx_ddl.create_index_set('reviews)可以通过add_index过程添加索引到索引集中了execute ctx_ddl.add_index('reviewers','reviewer');

返回顶部
查看电脑版