快精灵印艺坊 您身边的文印专家
广州名片 深圳名片 会员卡 贵宾卡 印刷 设计教程
产品展示 在线订购 会员中心 产品模板 设计指南 在线编辑
 首页 名片设计   CorelDRAW   Illustrator   AuotoCAD   Painter   其他软件   Photoshop   Fireworks   Flash  

 » 彩色名片
 » PVC卡
 » 彩色磁性卡
 » 彩页/画册
 » 个性印务
 » 彩色不干胶
 » 明信片
   » 明信片
   » 彩色书签
   » 门挂
 » 其他产品与服务
   » 创业锦囊
   » 办公用品
     » 信封、信纸
     » 便签纸、斜面纸砖
     » 无碳复印纸
   » 海报
   » 大篇幅印刷
     » KT板
     » 海报
     » 横幅

A simple example about full-text search based Java:Lucene

索引源代码:
package lucene;

/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2003</p>
* <p>Company: </p>
* @author Shirley
* @version 1.0
*/

import org.apache.lucene.index.*;
import org.apache.lucene.analysis.*;
import java.io.*;
import org.apache.lucene.document.*;

public class IndexFiles {
  //使用方式:: IndexFiles [索引输出目录] [索引的文件列表] ...
  public static void main(String[] arg) throws Exception {
    String[] args = new String[2];
    //索引后存放索引信息的路径
    args[0] = System.getProperty("java.io.tmpdir", "tmp") + System.getProperty("file.separator") + "index-1";
    //待索引文件
    args[1] = "E://AppWork//lucene//rfc2047.txt";
    args[2] = "E://AppWork//cyberoffice//CO//Sheldon Java Mail.htm";
    args[3] = "E://AppWork//lucene//englishtest.doc";
    args[4] = "E://AppWork//cyberoffice//CO//xls1.xls";
    args[5] = "E://AppWork//cyberoffice//CO//ppt1.ppt";

    String indexPath = args[0];
    IndexWriter writer;
    //用指定的语言分析器构造一个新的写索引器(第3个参数表示是否为追加索引)
    writer = new IndexWriter(indexPath, new SimpleAnalyzer(), false);

    for (int i=1; i<args.length; i++) {
      System.out.println("Indexing file " + args[i]);
      InputStream is = new FileInputStream(args[i]);

      //构造包含2个字段Field的Document对象
      //一个是路径path字段,不索引,只存储
      //一个是内容body字段,进行全文索引,并存储
      Document doc = new Document();
      doc.add(Field.UnIndexed("path", args[i]));
      doc.add(Field.Text("body", (Reader) new InputStreamReader(is)));
      //将文档写入索引
      writer.addDocument(doc);
      is.close();
    };
    //关闭写索引器
    writer.close();
  }
}




搜索源代码:
package lucene;

/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2003</p>
* <p>Company: </p>
* @author Shirley
* @version 1.0
*/

import org.apache.lucene.search.*;
import org.apache.lucene.queryParser.*;
import org.apache.lucene.analysis.*;

public class Search {
  public static void main(String[] arg) throws Exception {
    String[] args = new String[2];
    //索引后存放索引信息的路径
    args[0] = System.getProperty("java.io.tmpdir", "tmp") + System.getProperty("file.separator") + "index-1";
    //搜索晷嫔字
    args[1] = "sending";

    String indexPath = args[0];
    String queryString = args[1];

    //指向索引目录的搜索器
    Searcher searcher = new IndexSearcher(indexPath);
    //查询解析器:使用和索引同样的语言分析器
    Query query = QueryParser.parse(queryString, "body", new SimpleAnalyzer());
    //搜索结果使用Hits存储
    Hits hits = searcher.search(query);
    //通过hits可以访问到相应字段的数据和查询的匹配度
    for (int i=0; i<hits.length(); i++) {
      System.out.println(hits.doc(i).get("path") + "; Score: " +  hits.score(i));
    };
  }
}


注:目前程序只支持英文索引,可以过滤文件类型为.txt  .doc  .htm  .xls  .ppt

中文索引及其它类型文件的索引正在研究中......



返回类别: 教程
上一教程: Java Servlet及Cookie的使用
下一教程: 新官上任,转贴一篇:Java做一个最简朴的通话程序

您可以阅读与"A simple example about full-text search based Java:Lucene"相关的教程:
· 在应用中加入全文检索功能??基于Java的全文索引引擎Lucene简介
· About UBB with java has a bug.
· JAVA:ServletContext应用
· 介绍一些 Java NIO 的学习文章,以方便各位的学习!
· 再谈Java中文问题
    微笑服务 优质保证 索取样品