用Lucene检索数据库

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

用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.编写对索引库的搜索程序(看lucene文档),通过对lucene的索引库的查找,你可以快速找到对应记录的ID

4.通过ID到数据库中查找相关记录

用Lucene索引数据库

Lucene,作为一种全文搜索的辅助工具,为我们进行条件搜索,无论是像Google,Baidu 之类的搜索引擎,还是论坛中的搜索功能,还是其它C/S架构的搜索,都带来了极大的便利和比较高的效率。本文主要是利用Lucene对MS Sql Server 2000进行建立索引,然后进行全文索引。至于数据库的内容,可以是网页的内容,还是其它的。本文中数据库的内容是图书馆管理系统中的某个作者表-Authors表。

因为考虑到篇幅的问题,所以该文不会讲的很详细,也不可能讲的很深。

本文以这样的结构进行:

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.为数据库建立索引

首先建立一个类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);

}

return null;

}

然后,为数据库建立索引。

首先要定义一个IndexWriter(),它是将索引写进Lucene自己的数据库中,它存放的位置是有你自己定义的。在定义IndexWriter 是需要指定它的分析器。Lucene自

己自带有几个分析器,例如:StandarAnalyzer(),SimpleAnalyzer(), StopAnalyzer()等。它作用是对文本进行分析,判断如何进行切词。

接着,要定义一个Document。Document相当于二维表中一行数据一样。Document 里包含的是Field字段,Field相当于数据库中一列,也就是一个属性,一个字段。

最后应该对IndexWriter进行优化,方法很简单,就是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(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 Analyzer getAnalyzer(){

return new StandardAnalyzer();

}

3.为数据库建立查询功能

相关文档
最新文档