您好,欢迎访问一九零五行业门户网

Lucene 索引数据库

本文比较清晰的介绍了怎样将数据从db转到lucene索引文件。同样可以参照车东的博客: http://www.chedong.com/tech/weblucene.html 这篇。 lucene,作为一种全文搜索的辅助工具,为我们进行条件搜索,无论是像google,baidu之类的搜索引擎,还是论坛中的搜索功
本文比较清晰的介绍了怎样将数据从db转到lucene索引文件。同样可以参照车东的博客:
http://www.chedong.com/tech/weblucene.html
这篇。
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.为数据库建立查询功能
在类testlucene中建立一个新的方法searcher(string),它返回的是一个搜索的结构集,相当于数据库中的resultset一样。它代的参数是你要查询的内容。这里,我把要查询的字段写死了。你可以在添加一个参数表示要查询的字段。
       这里主要有两个对象indexsearcher和query。indexsearcher是找到索引数据库,query是处理搜索,它包含了三个参数:查询内容,查询字段,分析器。
具体代码如下:
public hits seacher(string 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页面中首先引入类
然后定义一个lucenetest对象,获取查询结果集:
        lucenttest lucent=new lucenttest();
        hits hits=lucent.seacher(request.getparameter(querystring));
定义一个form,建立一个查询环境:
显示查询结果:
作者号
    作者名
    地址
    电话号码
document doc=hits.doc(i);
   %>
其它类似信息

推荐信息