开发实例:JSP中实现全文检索
|
全文检索一直都是web方面的关键技术,如何在浩如烟海的信息中找到自己想要的信息是人们最关心的。鼎鼎大名的GOOGLE就是一个很成功的例子,网络上的人们大部分都用GOOGLE来查找自己需要的内容。全文检索主要有两个技术指标:快速和精确。前一段时间做了一个新闻系统,老板要加上全文检索的功能,想了很久才用一个不太高明的方法实现了。现在分享一下,希望是抛砖引玉吧,如果大家有更好的办法请跟在后边:) 先介绍一下我的新闻系统:数据库里存新闻的基本信息,如标题,发布人,发布时间,主体新闻的文件名。新闻主体是html格式的静态页(第一是要提高速度,减少数据库的压力。第二是数据库处理大字符串的时候会有问题。)。全文检索的思路是:先从数据库里把所有的新闻检索出来,把主体新闻找到,然后通过io操作把主体新闻读到一个字符串中。再去掉多余的东西,象html标记什么的,再用正则表达式对这个字符串查找,如果找到符合条件的信息,就记录这条新闻。最后返回所有的符合条件的新闻显示给用户。 下面这段代码是输入查询条件的代码,查询关键字用”+”隔开:search.jsp ? ? ? ? ? ? ? ? ? ? 下面的代码是全文检索主体javabean的代码:newsSearch.java ? package NEWS; ? import java.sql.*; ? import java.lang.*; ? import java.text.*; ? import java.util.*; ? import java.io.*; ? import java.util.regex.*; ? import DBstep.iDBManager2000;//数据库操作的bean ? public class newsSearch { ? ? private String filePath=null;//主体新闻存放的目录 ? ? private String keyWord=null;//查询关键字 ? ? private Vector news = new Vector();//存放符合条件的结果 ? ? public newsSearch() { } ? ? public void setFilePath(String s) { ? ??? this.filePath=s; ? ? } ? ? public void setKeyWord(String s) { ? ??? this.keyWord=s; ? ? } ? ? public Vector getResult() { ? ??? return news; ? ? } ? ? public void search() { ? ? //打开数据库 ? ResultSet result=null; ? ?? String mSql=null; ? ?? PreparedStatement prestmt=null; ? ?? DBstep.iDBManager2000 DbaObj=new DBstep.iDBManager2000(); ? ?? DbaObj.OpenConnection(); ? ?? try { ? ? //检索所有的新闻 ? ?? mSql="select * from t_news_detail? order by release_time desc"; ? ?? result=DbaObj.ExecuteQuery(mSql); ? ?? while(result.next()) ? ?? { ? ??? String id=result.getString("id"); ? ??? String title=result.getString("title"); ? ??? String release_time=result.getString("release_time"); ? ??? String news_type=result.getString("type"); ? ??? String content=result.getString("content"); ? ??? String man_add=result.getString("man_add"); ? ????? //按行读文件 ? ????? String trace=filePath+content+".html"; ? ????? FileReader? myFileReader=new FileReader(trace); ? ??? BufferedReader myBufferedReader=new BufferedReader(myFileReader); ? ??? String myString=null; ? ??? String resultString=new String(); ? ??? while((myString=myBufferedReader.readLine())!=null) ? ??? {? ? ???? resultString=resultString+myString; ? ???? } ? ????? //去掉多余字符 ? ?? HtmlEncode.HtmlEncode Html=new HtmlEncode.HtmlEncode();//这个bean去掉多余的字符,新闻是自己生成的文件,可以尽量多的删除多余字符 ? 123下一页
源代码网供稿. |
