登陆注册
19122000000023

第23章 Oracle的全文搜索(3)

insert into tianen values(2,"计算机公司",′1977年6月,Larry Ellison与Bob Miner和Ed Oates在硅谷共同创办了一家名为软件开发实验室(SoftwareDevelopment Laboratories,SDL)的计算机公司(Oracle公司的前身)。那个时候,32岁的Larry Ellison,这个读了三家大学都没能毕业的辍学学生,还只是一个普通的软件工程师。公司创立之初,Miner是总裁,Oates为副总裁,而Ellison,因为一个合同的事情,还在另一家公司上班。");

insert into tianen values(3,′Bruce Scott","没多久,第一位员工Bruce Scott(用过Oracle数据库软件的人都知道有个Scott用户的吧?没错,就是这个Scott,至于Scott用户的密码Tiger,那是Scott养的猫的名字)加盟进来,在Miner和Oates有些厌倦了那种合同式的开发工作后,他们决定开发通用软件,不过他们还不知道自己能开发出来什么样的产品。");

insert into test values(4,"Ellison和Miner预见",′在Miner和Oates有些厌倦了那种合同式的开发工作后,他们决定开发通用软件,不过他们还不知道自己能开发出来什么样的产品。Oates最先看到了埃德加·考特的那篇着名的论文连同其他几篇相关的文章并推荐Ellison和Miner也阅读一下。Ellison和Miner预见到数据库软件的巨大潜力,于是,SDL开始策划构建可商用的关系型数据库管理系统(RDBMS)。");

insert into tianen values(5,"关系软件有限公司","Oracle(字典里的解释有“神谕,预言”之意)是一切智慧的源泉。1979年,SDL更名为关系软件有限公司(Relational Software,Inc.,RSI)");

insert into tianen values(6,"美国中央情报局",′虽然软件不是很好,但客户还是有的。美国中央情报局迫不及待地想买一套这样的软件来满足他们的需求。但在咨询了IBM公司之后发现IBM没有可以商用的产品,他们联系了RSI。于是RSI有了第一个客户。");

commit;

然后,启动Enterprise ManagerConsole,选择“独立启动”。

在弹出的“数据库连接信息”对话框中输入用户信息进行登录。

在Oracle Enterprise MangnerConsole中,在“方案”节点的子节点“索引”处单击右键,从弹出的快捷菜单中选择“创建”。

弹出“创建索引”对话框,在其中填入“索引名称”等相关信息。单击“创建”按钮,即可完成索引的创建。

系统将会弹出“创建索引成功”的对话框。

在索引名称列表中单击任何一个索引,通过右键菜单可以管理其全部内容。例如,右键单击“TIANEN ISET”,在弹出的快捷菜单中选择“查看编辑详细资料”。打开“编辑索引”对话框。

5.2.5CTXCAT索引

由于Internet商务的出现及其对高性能的要求,对一个表中多个列创建组合索引已十分普遍,此时所有列通常都出现在一个查询中。例如,Internet拍卖站点的用户可能希望查看在特定日期(比如今天)结束的拍卖活动中,某一类别(比如Pokemon项)的所有出价。将出价金额、类别和结束日期列组合在一起的索引,可使此查询得到最佳处理。例如,可创建包含这些列的索引集,索引集可用于创建CTXCAT类型的Oracle Text索引,此索引可用于查询。

可以使用CTXCAT类型(发行版9i新增的)的Oracle Text索引来将文本列和一个或多个其他列编入索引。(在发行版9i之前,唯一的Oracle Text索引类型是CONTEXT,它只将文本列编入索引。)要创建CTXCAT索引,必须先创建索引集,并基于索引集创建CTXCAT索引。本书不做具体介绍,详情请参看Oracle产品文档。

5.3Oracle全文搜索的应用

Oracle一直致力于全文检索技术的研究,当Oracle9i Rlease2发布之时,Oracle数据库的全文检索技术已经非常完美,Oracle Text使Oracle9i具备了强大的文本检索能力和智能化的文本管理能力。

现在,有了前面学习的关于Oracle全文检索的知识,我们可以做两个简单的应用。下面这两个例子使用前面建立的test数据表,一个是桌面应用,一个是Web应用。使用的技术分别为:Oracle9i+Java Swing,Oracle9i+JSP2.4。

5.3.1Oracle全文检索桌面应用

本应用允许用户输入关键词,然后单击“搜索”按钮,执行全文搜索,显示搜索结果。

案例名称:Oracle全文检索桌面应用

程序名称TianenSearcher.java

import java.util.*;

import java.io.*;

import javax.swing.*;

import java.awt.*;

import java.awt.event.*;

import java.sql.*;

public class TianenSearcher

{

//搜索关键词

static JTextField jtf=null;

//搜索按钮

static JButton jb=null;

//文本区域

static JTextArea jta;

private static void createAndShowGUI()

{

…JFrame.setDefaultLookAndFeelDecorated(true);

JFrame frame=new JFrame("Searcher!yutianen@163.com");

frame.setDefaultCloseOperation(JFrame.EXIT ONCLOSE);

Container con=frame.getContentPane();

con.setLayout(newBorderLayout());

JPanel jpup=new JPanel();

jpup.setLayout(new GridLayout(1,2));

jtf=new JTextField(30);

jb=new JButton("搜索");

jb.addActionListener

newActionListener()

{

public void actionPerformed(ActionEvent e)

{

String s=jtf.getText().trim();

jta.setText(search(s));

}

}

);

jpup.add(jtf);

jpup.add(jb);

jta=new JTextArea(10,60);

jta.setLineWrap(true);

JScrollPane jsp=new JScrollPane(jta);

con.add(jpup,BorderLayout.NORTH);

con.add(jsp,BorderLayout.CENTER);

frame.setSize(200,100);

frame.pack();

frame.setVisible(true);

}public static void main(String[] args)

{

SwingUtilities.invokeLater

new Runnable()

{

public void run()

{

createAndShowGUI();

}

}

);

}

private static String search(String s)

{

…Connection conn=null;

Statement stmt=null;

ResultSet rs=null;

StringBuffer res=new StringBuffer("");

try

{

Class.forName("oracle.jdbc.driver.OracleDriver");

}

catch(ClassNotFoundException ce)

{

System.out.println(ce.getMessage());

}

try

{

//获得Connection对象

String url="jdbc:oracle:thin:@ localhost:1521:yuanyuan";

conn=DriverManager.getConnection(url,"scott","tiger");

stmt=conn.createStatement();

String sql="select*from test where contains(body,′"+s+"")>0";

rs=stmt.executeQuery(sql);

while(rs.next())

{

res.append(rs.getString("title")+"

"+rs.getString("body")+"

————");

}

}

catch(SQLException e)

{

System.out.println(e.getMessage());

}

finally

{

if(rs!=null)

{

try

{

rs.close();

}

catch(SQLException ee)

{

System.out.println(ee.getMessage());

}

}

if(stmt!=null)

{

try

{

stmt.close();

}

catch(SQLException ee)

{

System.out.println(ee.getMessage());

}

}

if(conn!=null)

{

try

{

conn.close();

}

catch(SQLException ee)

{

System.out.println(ee.getMessage());

}

}

}

return res.toString();

}

}

5.3.2Oracle全文检索Web应用

本应用的实现原理与桌面应用相同,具体程序代码如下所示。

案例名称:Oracle全文检索Web应用

程序名称:test.jsp

<%@ page contentType="text/html;charset=gbk"%>

<%@ page import="java.sql.*"%>

<html>

<body>

<%

try

{

Class.forName("oracle.jdbc.driver.OracleDriver");

}

catch(ClassNotFoundException e)

{

out.print(e.getMessage());

}

Connection conn=null;

Statement stmt=null;

ResultSet rs=null;

try

{

…String url="jdbc:oracle:thin:@ localhost:1521:yuanyuan";

String user="scott";

String password="tiger";

conn=DriverManager.getConnection(url,user,password);

stmt=conn.createStatement();

String sql="select*from test where contains(body,""scott"or"oracle"")>0";

rs=stmt.executeQuery(sql);

while(rs.next())

{

String a=rs.getString("id");

String b=rs.getString("title");

String c=rs.getString("body");

out.print(a+"<br>"+b+"<br>"+c+"<hr>");

}

}

catch(SQLException ee)

{

out.print(ee.getMessage());

}

finally

{

if(rs!=null)

{

try

{

rs.close();

}

catch(SQLException ex)

{

out.print(ex.getMessage());

}

}

if(stmt!=null)

{

try

{

stmt.close();

}

catch(SQLException ex)

{

out.print(ex.getMessage());

}

}

if(conn!=null)

{

try

{

conn.close();

}

同类推荐
  • 中国当代音乐(1949-1989)

    中国当代音乐(1949-1989)

    了解这本著作既总结了当代中国丰富的音乐成就,也总结了深刻的历史教训,是学习当代中国音乐史的很好的教材。读者对象包括:全国各音乐院校、师范院校音乐专业的师生以及广大音乐爱好者。
  • 安全教育高一(下)

    安全教育高一(下)

    《安全教育》系列编写的是孩子安全教育的图书。本书主要讲述的是自我保护能力是孩子们快乐健康成长的必备能力。只有学会自我保护,远离危险,我们的孩子才能拥有幸福,享受美好的生活。
  • 中学文学读本(六)

    中学文学读本(六)

    《中学文学读本6》内包含着语文知识的教育,两者并不矛盾。而且优秀文学作品是学习民族语文的最好教材。前不久,瑞典著名汉学家、诺贝尔文学奖的评委马悦然先生来复旦大学演讲和开座谈会时,一位从事对外汉语教学的老师向他提问:在教外国人汉语的教材里,是否应该放人优秀的汉语文学作品,马悦然先生迫不及待地高声回答:越早越好!越早越好!马悦然先生长期从事汉语教学,他这么回答实在是出于经验之谈。因此,对于中学的语文教学来说,文学审美能力的培养以至于整个人文教育,都应该是如马先生所说的:越早越好!越早越好!
  • 学生球类运动学习手册——教你踢足球

    学生球类运动学习手册——教你踢足球

    21世纪,人类进入了新经济时代。综合国力竞争的实质是民族素质的竞争,是人才的竞争,是教育的竞争。在这样的背景下,加强素质教育,尤其是进行身体素质教育就显得更为重要。球类运动是世界上开展的最广泛的运动项目之一,也是广大体育爱好者乐于观赏和参与的体育运动。经常进行此类运动,不仅可以增强人们的体质,提升身体的协调性,而且还能增强我们的自信心以及培养团队精神。
  • 把学习当做游戏

    把学习当做游戏

    本书包括锻炼读者观察力、注意力、记忆力、思维力、想象力等,对提高读者处理问题的水平和信心有极强的实践性和指导性。
热门推荐
  • 兔子,别跑

    兔子,别跑

    如果你半夜做了春梦,醒来还真发现一个赤身裸体的少年在你家,你会怎么办?身为女汉子的疏冉凉当然会斩钉截铁地回答:“打!”没想到这一打,竟把那么萌的萌宠打了个“半身不遂”,昨天在自家草坪上捡的那只道奇垂耳兔,还是这萌物的妹妹!天呐,上辈子我是不是炸了地球?看着它们晶莹透彻的蓝眼睛射出人畜无害又无辜的眼神,她真想撂下一句“再见”便奔赴黄泉。更没想到这一打,竟把她扯进了一个关于道奇垂耳兔家族的漩涡,她的人生从此便随这漩涡,偏向未知的方向……当呆萌女汉子遇上治愈系萌宠,萌系欢脱之旅启程……
  • 答问

    答问

    本书为公版书,为不受著作权法限制的作家、艺术家及其它人士发布的作品,供广大读者阅读交流。
  • 会点功夫有什么了不起

    会点功夫有什么了不起

    如果您想要看的是:1.英俊小生邪邪一笑迷倒萬千少女大搞水晶宮2.音樂奇才剽竊神曲前輩馬上稱兄道弟還爭相邀歌3.舞蹈鬼才一出堪比米高再世各種橫掃樂壇紅遍全球4.國術天才今天暗勁明天化勁拳打空手腳踢跆拳那麼請點左上方的後退鍵或者右上方的紅叉,本書沒有也不會有您老想要看的東西,我要寫的只是一個吊絲在命運給了他一次機會以後,如何努力的一步步站到他的女神旁邊的故事。PS:作者我是個放洋留學的香港人,文筆用詞方面的東東還請各路英雄手下留情多多指教。PS2:作者對政治完全不關心,但也請不要在這邊對小生我進行國民教育。
  • 穿越之盛世山庄

    穿越之盛世山庄

    一场情伤穿越到了不知名朝代的乡下农人家,虽然贫穷好在父慈母爱,整理心情带着全家奔小康。。。。。。
  • 触事

    触事

    从什么时候开始的,欣子开始了触事?开始了不懂事的触事。欣子不是乖乖巧巧的孩纸吗?怎么了!欣子,你怎么唱反调呢?欣子,放下触事,不要继续啊!欣子,你是期望,你是人生中的天使呀!还在干嘛。挫折本就是人生中所最常识的,欣子不要因为这个而丧失了你的所有理智与情感。欣子。你本就是幸运的,放下吧……
  • 星晨月下:天才王妃

    星晨月下:天才王妃

    叫我傻子?打得你爹娘不认;本小姐乃是二十一世纪金牌杀手,人称铁血皇后,叫我废物?抽烂你的嘴!
  • 高效能人士·123个好习惯

    高效能人士·123个好习惯

    本书汇集了我们日常生活和工作中许多不起眼却很重要的小习惯。这些小习惯有这样几个特征:一是不容易被注意到;二是作用不容忽视;三是很容易做到。养成了这些小习惯,可以使我们充分利用自己的点滴时间,提高效率;使我们积少成多,学到更多有用的知识;使我们生活更富裕,身体更健康,心态更轻松……
  • 控球

    控球

    一只篮球,十人游戏,我来控球,主宰全场!
  • 首席霸爱:挑上抵债未婚妻

    首席霸爱:挑上抵债未婚妻

    被称为‘花少’苏子墨本以为再无真心,却在意外之中跟于晓荿结下了不解之缘。于晓荿为了给年少时的好姐妹解恨报复,一次又一次的缠着苏子墨的花边新闻,却在意外中弄坏了苏子墨的豪车。为赔偿豪车损失,立下契约,以一年为限。两人相处之间,于晓荿萌生爱情的幼苗,却因无法跨过心里那道坎而逃避心情。苏子墨再次爱上她,不惜放弃所有,不惜生死也要和她在一起。
  • 天元至上

    天元至上

    天元大陆人类可以与魔兽灵兽精灵签订了契约从而帮助魔兽等进化使自己也可以更加强大