专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »编程综合 » lucene更新索引:Lucene索引SQL2000 »正文

lucene更新索引:Lucene索引SQL2000

来源: 发布时间:星期四, 2009年1月15日 浏览:8次 评论:0
  1.写段传统JDBC讲每条用户信息从数据库读取出来

  2.针对每条用户记录建立个lucene document

  Document doc = Document;

  并根据你需要将用户信息各个字段对应luncene document中field 进行添加如:

  doc.add( 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);
     rs;
   }
   catch(SQLException e){
    .out.prln(e);
   }
    null;
  }


  然后为数据库建立索引

  首先要定义个IndexWriter()它是将索引写进Lucene自己数据库中它存放位置是有你自己定义在定义IndexWriter 是需要指定它分析器Lucene自己自带有几个分析器例如:StandarAnalyzer,SimpleAnalyzer, StopAnalyzer它作用是对文本进行分析判断如何进行切词

  接着要定义个DocumentDocument相当于 2维表中行数据Document里包含是Field字段Field相当于数据库中也就是个属性个字段

  最后应该对IndexWriter进行优化思路方法很简单就是writer.optimize.

  具体代码如下:

public void Index(ResultSet rs){
   try{
    IndexWriter writer = IndexWriter("d:/index/", getAnalyzer, true);
    while(rs.next){
      Document doc= 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){
    .out.prln(e);
   }
   catch(SQLException e){
    .out.prln(e);
   }
  }
  
  public Analyzer getAnalyzer{
    StandardAnalyzer;
  }


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

  在类TestLucene中建立个新思路方法searcher(String)它返回个搜索结构集相当于数据库中ResultSet它代参数是你要查询内容这里我把要查询字段写死了你可以在添加个参数表示要查询字段

  这里主要有两个对象IndexSearcher和QueryIndexSearcher是找到索引数据库Query是处理搜索它包含了 3个参数:查询内容查询字段分析器

  具体代码如下:

public Hits seacher(String queryString){
   Hits hits=null;;
   try{
    IndexSearcher is = IndexSearcher("D:/index/");
    Query query=QueryParser.parse(queryString,"City",getAnalyzer);
    hits=is.search(query);
   }catch(Exception e){
    .out.pr(e);
   }
    hits;
  }


  4.在web界面下进行查询并显示结果

  这里建立个Jsp页面TestLucene.jsp进行搜索

  在TestLucene.jsp页面中首先引入类

<%@ page import="lucenetest.LucentTest"%>
<%@ page import="org.apache.lucene.search.*,org.apache.lucene.document.*" %>


  然后定义个LuceneTest对象获取查询结果集:

LucentTest lucent= LucentTest;
Hits hits=lucent.seacher(request.getParameter("queryString"));


  定义个Form建立个查询环境:

<form action="TestLucene.jsp">
<input type="text" name="queryString"/>
<input type="submit" value="搜索"/>
</form>


  显示查询结果:

<table>
<%(hits!=null){%>
<tr>
  <td>作者号</td>
  <td>作者名</td>
  <td>地址</td>
  <td>电话号码</td>
</tr>
  
<% for( i=0;i<hits.length;i){
  Document doc=hits.doc(i);
  %>
  <tr>
  <td><%=doc.get("id") %></td>
  <td><%=doc.get("name") %></td>
  <td><%=doc.get("address") %></td>
  <td><%=doc.get("phone") %></td>
</tr>
<% }}%>
</table>


0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: