版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、用lucene检索数据库1.写一段传统的jdbc程序,讲每条的用户信息从数据库读取出来2.针对每条用户记录,建立一个lucene document document doc = new document();并根据你的需要,将用户信息的各个字段对应luncene document中的field 进行添加,如: doc.add(new field(name,username,field.store.yes,field.index.un_tokenized);然后将该条doc加入到索引中, 如: lucenewriter.adddocument(doc);这样就建立了lucene的索引库3.编写对
2、索引库的搜索程序(看lucene文档),通过对lucene的索引库的查找,你可以快速找到对应记录的id4.通过id到数据库中查找相关记录 用lucene索引数据库lucene,作为一种全文搜索的辅助工具,为我们进行条件搜索,无论是像google,baidu之类的搜索引擎,还是论坛中的搜索功能,还是其它 c/s架构的搜索,都带来了极大的便利和比较高的效率。本文主要是利用lucene对ms sql server 2000进行建立索引,然后进行全文索引。至于数据库的内容,可以是网页的内容,还是其它的。本文中数据库的内容是图书馆管理系统中的某个作者表 authors表。 因为考虑到篇幅的问题,所以该文
3、不会讲的很详细,也不可能讲的很深。本文以这样的结构进行:1.介绍数据库中authors表的结构2.为数据库建立索引3.为数据库建立查询功能4.在web界面下进行查询并显示结果1介绍数据库中authors表的结构字段名称 字段类型 字段含义au_id varchar(11) 作者号au_name varchar(60) 作者名phone char(12) 电话号码address varchar(40) 地址city varchar(20) 城市state char(2) 省份zip char(5) 邮编contract bit(1) 外键(关系不大)表中的部分内容:2为数据库建立索引首先建立一个
4、类testlucene.java。这个类就是对数据库进行建立索引,编写查询条件等。当然,最开始就是建立数据库连接。连接代码这里就省略了。_接着,新建一个方法getresutl(string),它返回的是数据库表authors的内容。具体代码如下: public resultset getresult(string sql) try statement stmt = conn.createstatement(); resultset rs = stmt.executequery(sql); return rs; catch(sqlexception e) system.out.println(e
5、); return null; 然后,为数据库建立索引。首先要定义一个indexwriter(),它是将索引写进lucene自己的数据库中,它存放的位置是有你自己定义的。在定义 indexwriter 是需要指定它的分析器。lucene自己自带有几个分析器,例如:standaranalyzer(),simpleanalyzer(), stopanalyzer()等。它作用是对文本进行分析,判断如何进行切词。接着,要定义一个document。document相当于二维表中一行数据一样。document里包含的是field字段,field相当于数据库中一列,也就是一个属性,一个字段。最后应该对in
6、dexwriter进行优化,方法很简单,就是writer.optimize().具体代码如下: public void index(resultset rs) try indexwriter writer = new indexwriter(d:/index/, getanalyzer(), true); while(rs.next() document doc=new document(); doc.add(field.keyword(id,rs.getstring(au_id); doc.add(field.text(name,rs.getstring(au_name); doc.add(
7、field.unindexed(address,rs.getstring(address); doc.add(field.unindexed(phone,rs.getstring(phone); doc.add(field.text(city,rs.getstring(city); writer.adddocument(doc); writer.optimize(); writer.close(); catch(ioexception e) system.out.println(e); catch(sqlexception e) system.out.println(e); public an
8、alyzer getanalyzer() return new standardanalyzer(); 3为数据库建立查询功能在类testlucene中建立一个新的方法searcher(string),它返回的是一个搜索的结构集,相当于数据库中的resultset一样。它代的参数是你要查询的内容。这里,我把要查询的字段写死了。你可以在添加一个参数表示要查询的字段。这里主要有两个对象indexsearcher和query。indexsearcher是找到索引数据库,query是处理搜索,它包含了三个参数:查询内容,查询字段,分析器。具体代码如下: public hits seacher(stri
9、ng querystring) hits hits=null; try indexsearcher is = new indexsearcher(d:/index/); query query=queryparser.parse(querystring,city,getanalyzer(); hits=is.search(query); catch(exception e) system.out.print(e); return hits; 4在web界面下进行查询并显示结果这里建立一个jsp页面testlucene.jsp进行搜索。在testlucene.jsp页面中首先引入类 然后定义一个
10、lucenetest对象,获取查询结果集: lucenttest lucent=new lucenttest(); hits hits=lucent.seacher(request.getparameter(querystring);定义一个form,建立一个查询环境: 显示查询结果: 作者号 作者名 地址 电话号码 % for(int i=0;i 用lucene-1.3-final为网站数据库建立索引下是看了lnboy写的用lucene建立大富翁论坛的全文检索后写的测试代码。 为数据库cwb.mdb建立全文索引的indexdb.jsp 用于显示查询结果的aftsearch.jsp % str
11、ingkeyword=request.getparameter(keyword); keyword=newstring(keyword.getbytes(iso8859_1); out.println(keyword); try stringaa=getservletcontext().getrealpath(/)+index; searchersearcher=newindexsearcher(aa); queryquery=queryparser.parse(keyword,article_name,newstandardanalyzer(); out.println(正在查找:+quer
12、y.tostring(article_name)+); hitshits=searcher.search(query); system.out.println(hits.length()+totalmatchingdocuments); java.text.numberformatformat=java.text.numberformat.getnumberinstance(); for(inti=0;ihits.length();i+) /开始输出查询结果 documentdoc=hits.doc(i); out.println(doc.get(article_id); out.printl
13、n(准确度为:+format.format(hits.score(i)*100.0)+%); out.println(doc.get(article_name)+); /out.println(doc.get(article_intro); catch(exceptione) out.println(出错了+e.getclass()+n错误信息为:+e.getmessage(); % 辅助类: packagelucene; importorg.apache.lucene.document.document; importorg.apache.lucene.document.field; imp
14、ortorg.apache.lucene.document.datefield; publicclassmydocument publicstaticdocumentdocument(stringarticle_id,stringarticle_name,stringarticle_intro) documentdoc=newdocument(); doc.add(field.keyword(article_id,article_id); doc.add(field.text(article_name,article_name); doc.add(field.text(article_intr
15、o,article_intro); returndoc; publicmydocument() 用lucene为数据库搜索建立增量索引用lucene建立索引不可能每次都重新开始建立,而是按照新增加的记录,一次次的递增建立索引的indexwriter类,有三个参数indexwriterwriter=newindexwriter(path,newstandardanalyzer(),isempty);其中第三个参数是bool型的,指定它可以确定是增量索引,还是重建索引.对于从数据库中读取的记录,譬如要为文章建立索引,我们可以记录文章的id号,然后下次再次建立索引的时候读取存下的id号,从此id后往
16、下继续增加索引,逻辑如下.建立增量索引,主要代码如下publicvoidcreateindex(stringpath)statementmystatement=null;stringarticleid=0;/读取文件,获得文章id号码,这里只存最后一篇索引的文章idtryfilereaderfr=newfilereader(*.txt);bufferedreaderbr=newbufferedreader(fr);articleid=br.readline();if(articleid=null|articleid=)articleid=0;br.close();fr.close();catc
17、h(ioexceptione)system.out.println(error343!);e.printstacktrace();try/sql语句,根据id读取下面的内容stringsqltext=*+articleid;mystatement=conn.createstatement();resultsetrs=mystatement.executequery(sqltext);/写索引while(rs.next()documentdoc=newdocument();doc.add(field.keyword(*,dateadded);doc.add(field.keyword(*,art
18、icleid);doc.add(field.text(*,url);doc.add(field.text(*,content);doc.add(field.text(*,title);trywriter.adddocument(doc);catch(ioexceptione)e.printstacktrace();/将我索引的最后一篇文章的id写入文件tryfilewriterfw=newfilewriter(*.txt);printwriterout=newprintwriter(fw);out.close();fw.close();catch(ioexceptione)e.printstacktrace();ind.close();system.out.println(ok.end);catch(sqlexceptione)e.printstacktrace();finally/数据库关闭操作然后控制是都建立增量索引的时候根据能否都到id值
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 城市排水桩基施工合同
- 学校周边广告牌租赁合同范本
- 金融服务与经济发展基金管理办法
- 清洁能源贸易公司招聘合同
- 员工自动离职处理规范
- 制造业诚信准则:会考承诺书
- 兽医药品研发技术支持协议
- 钢铁工程外架施工协议
- 八年级道德与法治开学摸底考试卷(湖南专用)(解析版)
- 离婚协议书中保险规划调整
- 四年级美术上册课件-14.漂亮的房间4-苏少版(共17张PPT)
- 环境规划与管理全套课件完整版电子教案最新板
- 整形外科诊疗规范
- 总账会计岗位职责招聘
- GB∕T 17268-2020 工业用非重复充装焊接钢瓶
- 苏教版二年级数学上册《认识线段》课件(市级赛课一等奖)
- 幼儿园:中班美术活动《柿柿如意》
- 输电线路初步设计评审要点课件
- (完整word版)小餐饮经营食品安全管理制度
- 产后尿潴留的护理个案课件
- 装配式混凝土结构部件吊装监理细则
评论
0/150
提交评论