中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > Java > 第三方类库
Lucene的简单使用
作者:未知 时间:2005-07-24 21:26 出处:JR 责编:chinaitpower
              摘要:Lucene的简单使用
 为了在没有数据库支持的情况下,完成多个属性数据的检索任务,特地在代码中加入了鼎鼎大名的Apache.Lucene。当然让lucene来干这个是大材小用了一点。
 Lucene的工作流程主要是:
   1 使用IndexWriter,在指定的目录建立索引的文件
   2 将需要检索的数据转换位Document的Filed对象,然后将Document用IndexWriter添加倒索引的文件中
   3 处理索引信息,关闭IndexWriter流
   4 创建搜索的Query
   5 给IndexSearcher指定索引文件的路径后,用Query检索后返回Hits对象作为结果
 样例代码:
   
  1.    //sample code,索引对象
  2.    public class PersonInfo {
  3.     public String firstName="";
  4.     public String lastName="";
  5.     public String IDNumber="";
  6.    }
  7.   //Lucene 的添加和更新索引
  8.   public class LuceneSearcher {
  9.    public void addPersionInfo(PersonInfo person) {
  10.     Document doc = new Document();
  11.     doc.add(Field.Keyword("FirstName",person.getFirstName()));
  12.     doc.add(Field.Keyword("IDNumber",person.getIDNumber()));
  13.     doc.add(Field.Keyword("LastName",person.getLastName()));
  14.     doc.add(Field.Text("content",person.getIDNumber()));
  15.     try{
  16.              //删除旧的相同的索引            
  17.         this.remove(person.getIDNumber());
  18.         writer = new IndexWriter(directory, new StandardAnalyzer(), false);            
  19.         writer.addDocument(doc);
  20.              writer.optimize();
  21.         writer.close();
  22.     }
  23.     catch(IOException ioe) {
  24.        ioe.printStackTrace();
  25.     }
  26.      }
  27.   //删除旧的索引,idNumber作为Person的PK,建立term后删除
  28.   public void remove(String idNumber) {
  29.     try{
  30.         IndexReader reader = IndexReader.open(directory);
  31.         Term term = new Term("IDNumber",idNumber);
  32.         reader.delete(term);            
  33.         reader.close();            
  34.      }
  35.      catch(IOException ioe) {
  36.     ioe.printStackTrace();
  37.      }
  38.    }
  39.    //search 代码片段
  40.    public String[] search(String query) {
  41.       //建立search对象
  42.       Searcher searcher = new IndexSearcher(directory);
  43.       //解析输入的Query [FirstName: "gerald" AND LastName:"zhou" AND IDNumber:"10*"]
  44.       Query query = QueryParser.parse(line, "FirstName"new StandardAnalyzer());            
  45.       Hits hits = searcher.search(query);
  46.    

----------------------------------------------------------------------------------------   
   [V]这样就可以简单的用lucene来完成对person对象的firstName,lastName和IDNumber3个属性的综合查询功能了,只要按照[url=http://jakarta.apache.org/lucene/docs/queryparsersyntax.html]Lucene Query[/url]语法就可以了
     [:P]需要注意的还有以下几点
    1 IndexWriter在添加新的document后,需要重新建立Index,则需要调用writer.optimize();方法
    2 Lucene没有update索引的方法,需要删除后重新建立,参考remove方法
    3 用IndexReader删除Document后,需要重新用IndexWriter进行整理,否则无法在进行搜索(不知道是不是我设置问题)
    [:x]休息!休息,今天就到这里了!!
关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有