登陆注册
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();

}

同类推荐
  • 安全教育七年级(上)

    安全教育七年级(上)

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

    机械原理作业集

    机械原理课程是高等工科学校机械类专业普遍开设的一门重要的技术基础课程。通过本门课程的学习,不仅将为学习有关后续课程和掌握专业知识打好必要的基础,而且还为更好地掌握新的科学技术创造条件。由于本门课程教学时数普遍减少,课堂教学中没有多少时间来讲例题,学生普遍反映做作业困难较多,而且复习很吃力。为了帮助学生学好本门课程,并进行系统复习,我们编写了《机械原理》作业集。
  • 青少年应该知道的苏州评弹(阅读中华国粹)

    青少年应该知道的苏州评弹(阅读中华国粹)

    苏州评弹之滥觞,大概在明代的嘉靖年间。当时,以吴歌为基调的南曲开始流行。南曲在苏州开花结果,讲究声腔的一路进入贵族阶级,演化成昆曲;讲究叙事的一路进入平民阶级,成为评弹。
  • 历届新概念一等奖获得者作文精选(散文卷)

    历届新概念一等奖获得者作文精选(散文卷)

    新思维-所有作品都体现出了作者的创造性、发散性思维,作者们打破旧观念、旧规范的束缚,打破僵化保守,处在无拘无束的新思维中创作所得。新表达-作品的创作不受题材、体裁限制,作者使用属于自己的充满个性的语言,杜绝套话,杜绝千人一面,杜绝众口一词。真体验-真实、真切、真诚、真挚地关注、感受、体察生活,并将这一切,反映在作品中。
  • 感动心灵的母爱故事

    感动心灵的母爱故事

    本丛书能够真正启迪青少年朋友心灵,激励他们成长,内容涵盖思想品德、历史文化、天文地理等,以故事的形式拓展视野,增长知识,理解学习和生活的意义,使青少年阅读后受到情感熏陶,获得思想和心灵启迪。
热门推荐
  • 禁忌神王

    禁忌神王

    修炼之道,筑基诀奠定基础,罡气境初窥奥妙,洞天境攻守兼备,铸灵境九变化龙,不堕境翻江倒海,笑傲天下!少年寇凡,凭借一块神秘紫石,在众天骄之中逆天崛起,征战地国,杀伐天庭,一步一步的走进传说……少年笑曰:且看明日之域中,竟是何人之天下!
  • 未来世界之天城与地界

    未来世界之天城与地界

    多年之后,人类的活动已经严重破坏生态,自然界的报复来临,物种异变,灾难持续,世界现代文明毁于一旦,幸存的部分人类建造天城离开地界,将饱受旷古之灾的陆地被称为地界,同为人类,在天城安逸生活的人们与仍在地界痛苦挣扎已经异变的人类之间会碰撞出怎样的火花呢?带着仇恨与责任来到天城的男孩,渴望重造世界的少女......
  • 星辰战天

    星辰战天

    每个成功的人,都是在跌倒的过程中变的强大。以星辰之名,向天,向神宣战。
  • tfboys我愿伴你一生一世

    tfboys我愿伴你一生一世

    女主宁含宣和她的闺蜜许倩、柳梦莹暑假在重庆游玩时遇见了tfboys,作为好好学生从不追星的她们竟······凯——宣,不要走,我愿为了你,放弃我25岁的约定。。。源———倩,我们有缘,就一定会相遇,别走。。。玺——莹,如果我说我爱你,你会走吗?(作者是第一次写小说,不喜勿喷呐~如果说与其他小说有什么相似。。或者一样的地方,请不要说我抄袭。。谢谢。。另外作者笔名洛依,乱入作品了的就是。。依)
  • 一滴倾城,冰景凝之旅

    一滴倾城,冰景凝之旅

    她,冰景凝。前世杀神,一朝背叛穿越宁海之陆,成为易凰国丞相府,陆府的庶女。嫡姐陷害?以其人之道,还治其人之身。除族?切,不稀罕!上敢与皇威对峙,下敢“请”旨灭丞相府。厌倦平凡人生活,隐世避俗!无聊天命如此,留下千古英名!且看她如何翻身!
  • 都市完美护花狂龙

    都市完美护花狂龙

    他叫叶秋,一心想要过安稳日子,现实却非要逼良为娼,美女总裁投怀送抱,窈窕杀手任君采劼,校花也不甘落后,萌萌哒小萝莉大喊着,“大叔,不要跑!”
  • 聚能有机物之灾

    聚能有机物之灾

    罗锋为了躲避可怕的传染病,将自己冷冻300年。可是,只过了三十多年,僵尸破坏了他的冷冻装置。有幸,他在僵尸泛滥的世界活了下来,既而发现了僵尸泛滥的幕后主使,发现了聚能有机物计划……
  • 叱咤雨

    叱咤雨

    风雨江湖,傲世群雄,叱咤异世江湖,名震天下。
  • 劫天命

    劫天命

    苍穹之下,千幕之荒,在这片蛮荒之地,匮乏的资源,险恶的环境,无时不压榨着此地生灵们的潜力。谁人年少不轻狂?少年心怀执念,矢志踏出这穷山恶水的千幕荒,跳出那天命棋盘,攀爬那武道的通天之路!演绎玄奇瑰丽的传奇故事!
  • 列王的纷争:美女间谍

    列王的纷争:美女间谍

    现代,双亲惨死,她做的是人人听闻变色的入殓师一职;到了古代,命运的推手将她一步一步推向未知的未来;樱云会,狼子野心,意图吞国,养探使无数,花落文臣百官不说,竟将那触手伸到了强大的邻国;她问:“你若是真心爱我,我就随你去那覃国!你若骗我,我定将覆了你的国家!”一身宠爱身陷后宫,不料终敌不过闺蜜背叛,身心皆残的她一守冷宫数年终涅槃重生!他说:“他覃子睿许你的只是那后宫之首,我姜若岩能许你的是这大好河山!”明媚浅笑,白衣飘飘,多年后她带着一身报负伸展朝堂,姜国上下,女相之名口口相传。昔日同床,今日仇杀,如何才能在这乱世求得太平?是魂回现代还是香消玉殒?一代名后,一代女相,波澜壮阔的传奇一生!