1、新建两个文件夹htm和index,其中htm中存放被索引的文件,index文件中存放建立的索引文件。

2、新建解析目录中所有文件的类,用来解析指定目录下的所有文件。

import java.io.File;

public class FileList {
 private static final String
SEP="/";
 private static StringBuffer sb=new
StringBuffer("");
 public static String[] getFiles(File
file){//取得file目录中所有的文件
  if(file.isDirectory()){//如果是目录则进一步迭代
   File[]
fs=file.listFiles();
   for(int
i=0;i<fs.length;i++){
    getFiles(fs[i]);
   }
  }
  else{
   sb.append(file.getPath()+SEP);//输出文件
  }
  String
s=sb.toString();
  return s.split(SEP);
 }
 public
static String[] getFiles(String path){
  File file=new
File(path);
  if(file.isDirectory()){
   File[]
fs=file.listFiles();
   for(int
i=0;i<fs.length;i++){
    getFiles(fs[i]);
   }
  }
  else{
   sb.append(file.getPath()+SEP);
  }
  String
s=sb.toString();
  return s.split(SEP);
 }
 public
static String getExt(File file){
  String
ext=file.getName();
  try
{
   ext=ext.substring(ext.lastIndexOf(".")+1);
  }
catch (Exception e)
{
   ext="";
  }
  return
ext;
 }
}

3、读取文件内容用来建立对此文件的索引,这里读取文件的所有字符,只支持文本文件,本文暂时没有对其他文档的支持,读者可以利用其他组件来解析其他复杂文档。

import java.io.BufferedReader;
import java.io.File;
import
java.io.FileReader;

public class FileText {
 public static String getText(File
file){//获得文件的内容
  StringBuffer sb=new
StringBuffer("");
  try {
   FileReader fr=new
FileReader(file);
   BufferedReader br=new
BufferedReader(fr);
   String
text=br.readLine();
   while(text!=null){
    sb.append(text);
    text=br.readLine();
   }
   br.close();
  }
catch (Exception e)
{
   sb.append("");
  }
  return
sb.toString();
 }
 public static String getText(String
filename){
  File file=new File(filename);
  String
text="";
  try
{
   text=getText(file);
  } catch (Exception e)
{
   text="";
  }
  return
text;
 }
}

4、利用Lucene建立索引文件,同时存入指定目录。

import java.io.File;
import java.io.IOException;
import
java.text.SimpleDateFormat;
import java.util.Date;
import
javax.swing.JOptionPane;

import org.apache.lucene.analysis.cjk.CJKAnalyzer;
import
org.apache.lucene.document.Document;
import
org.apache.lucene.document.Field;
import
org.apache.lucene.index.IndexWriter;
import
org.apache.lucene.index.IndexWriterConfig;
import
org.apache.lucene.store.SimpleFSDirectory;
import
org.apache.lucene.util.Version;

public class LuceneIndexer {
 public void createIndex(String
filesPath,String indexPath) throws IOException{
  File path=new
File(indexPath);
  SimpleFSDirectory indexDir=new
SimpleFSDirectory(path);//读取被索引的文件目录
  CJKAnalyzer analyzer=new
CJKAnalyzer(Version.LUCENE_31);//创建一个二分法分析器
  IndexWriterConfig
conf=new IndexWriterConfig(Version.LUCENE_31,
analyzer);
  IndexWriter writer=new
IndexWriter(indexDir,conf);
  String[]
files=FileList.getFiles(filesPath);//读取被索引的文件
  for(int
i=0;i<files.length;i++){
   File f=new
File(files[i]);
   String
ext=FileList.getExt(f);
   if(ext.equalsIgnoreCase("html")||ext.equalsIgnoreCase("htm")){//只建立网页文件的索引
    Document
doc=new
Document();//新建一个索引文件用于索引当前html文件
    //filename字段
    String
filename=f.getName();
    Field field=new
Field("filename",filename,Field.Store.YES,Field.Index.ANALYZED);
    doc.add(field);
    //uri字段
    String
uri=f.getPath();
    field=new
Field("uri",uri,Field.Store.YES,Field.Index.NO);
    doc.add(field);
    //cdate字段
    Date
date=new Date(f.lastModified());
    SimpleDateFormat
sdf=new SimpleDateFormat("yyyy-MM-dd E");
    String
cdate=sdf.format(date);
    field=new
Field("cdate",cdate,Field.Store.YES,Field.Index.NO);
    doc.add(field);
    //size字段
    double
si=f.length();
    String
size="";
    if(si>1024){
     size=String.valueOf(Math.floor(si/1024))+"K";
    }
    else{
     size=String.valueOf(si)+"Bytes";
    }
    field=new
Field("size",size,Field.Store.YES,Field.Index.NO);
    doc.add(field);
    //text字段
    String
text=FileText.getText(f);
    field=new
Field("text",text,Field.Store.YES,Field.Index.ANALYZED);
    doc.add(field);
    //digest字段
    String
digest="";
    if(text.length()>200){
     digest=text.substring(0,
200);
    }
    else{
     digest=text;
    }
    field=new
Field("digest",digest,Field.Store.YES,Field.Index.ANALYZED);
    doc.add(field);
    //归入索引
    writer.addDocument(doc);
   }
  }
  writer.close();//关闭索引器
  JOptionPane.showMessageDialog(null,
"索引建立完毕!","提示", JOptionPane.INFORMATION_MESSAGE);
 }
}

5、测试

public class IndexerTest {

public static void main(String[] args) {
  //
TODO Auto-generated method stub
  LuceneIndexer indexer=new
LuceneIndexer();
  try
{
   indexer.createIndex("D:/我的文档/lucene/htm",
"D:/我的文档/lucene/index");
  } catch (IOException e)
{
   // TODO Auto-generated catch
block
   e.printStackTrace();
  }
 }

}

(转自:http://blog.sina.com.cn/s/blog_69b6a7c60100wa4n.html)

利用Lucene将被索引文件目录中的所有文件建立索引的更多相关文章

  1. solr中通过SFTP访问文件建立索引

    需求: 从oracle数据库中根据记录的文件名filename_html(多个文件以逗号隔开),文件路径path,备用文件名bakpath中获取 主机172.21.0.31上对应的html文件内容,并 ...

  2. 【mysql】mysql中单列索引、联合索引、Join联表查询建立索引 和 EXPLAIN的分析使用

    2.创建联合索引,从坐到右分别为:userid.openId.name   2. #### --------------  多表联合查询 update 2019/03/13  ------------ ...

  3. Oracle数据库中如何选择合适的索引类型 .

    索引就好象一本字典的目录.凭借字典的目录,我们可以非常迅速的找到我们所需要的条目.数据库也是如此.凭借Oracle数据库的索引,相关语句可以迅速的定位记录的位置,而不必去定位整个表. 虽然说,在表中是 ...

  4. mysql建立索引,实际工作中建立索引的示例

    1.根据业务场景建立相应的组合索引,一般是在主键,外键,常用来筛选查询的字段,按照字段之间组合的紧密程度,建立一定顺序的索引. 例如:为 t_org_exam_join_member_day  建立索 ...

  5. Atitit.数据索引 的种类以及原理实现机制 索引常用的存储结构

    Atitit.数据索引 的种类以及原理实现机制 索引常用的存储结构 1. 索引的分类1 1.1. 按照存储结构划分btree,hash,bitmap,fulltext1 1.2. 索引的类型  按查找 ...

  6. Mysql数据库建立索引的优缺点有哪些?

    索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息. 什么是索引 数据库索引好比是一本书前面的目录,能加快数据库的查询速度. 例如这样一个查询:select * ...

  7. mysql 建立索引的原则(转)

    索引查询是数据库中重要的记录查询方法,要不要进入索引以及在那些字段上建立索引都要和实际数据库系统的查询要求结合来考虑,下面给出实际中的一些通用的原则: 1. 在经常用作过滤器的字段上建立索引: 2. ...

  8. mysql 建立索引场合及索引使用

    索引建立场合: ① where后边字段 适合建立索引 ② order by 排序字段适合建立索引 ③ 索引覆盖 即 所要查询的字段本身就是索引 直接在索引中查询数据. 例如 select name,a ...

  9. SQL Server 索引维护(1)——如何获取索引使用情况

    前言: 在前面一文中,已经提到了三类常见的索引问题,那么问题来了,当系统出现这些问题时,该如何应对? 简单而言,需要分析现有系统的行为,然后针对性地对索引进行处理: 对于索引不足的情况:检查缺少索引的 ...

随机推荐

  1. 设置Spark日志级别

    编辑Spark中conf中配置文件log4j.properties 设置日志级别为WARN,即:log4j.rootCategory=WARN, console

  2. Android实现批量照片上传至server,拍照或者从相冊选择

    近期因为项目需求,须要完毕批量照片上传,折腾了一段时间,最终完毕了,达到了例如以下效果 主界面主要有GridView组成和button组成,当按下一个格点时,会调用相机或者相冊,拍照或者选择相冊照片, ...

  3. 怎样制作一个横版格斗过关游戏 Cocos2d-x 2.0.4

     本文实践自 Allen Tan 的文章<How To Make A Side-Scrolling Beat 'Em Up Game Like Scott Pilgrim with Coco ...

  4. 转:TensorFlow和Caffe、MXNet、Keras等其他深度学习框架的对比

    http://geek.csdn.net/news/detail/138968 Google近日发布了TensorFlow 1.0候选版,这第一个稳定版将是深度学习框架发展中的里程碑的一步.自Tens ...

  5. 淘宝JAVA中间件Diamond详解(二)---原理介绍

    转:http://blog.csdn.net/anhuidelinger/article/details/70314744 大家好,通过第一篇的快速使用,大家已经对diamond有了一个基本的了解.本 ...

  6. 【CI】系列二:Ubuntu环境虚拟机安装及配置

    好了,做好了初步计划之后,如果可行性没问题,就可以开始实践了. 准备前提:VirtualBox.ubunut镜像 如果没有,可以通过如下地址下载,安装过程此处不做描述. VirtualBox 4.3. ...

  7. JSON 对象

    JSON 对象 对象语法 { "name":"runoob", "alexa":10000, "site":null } ...

  8. Python基础--人们一些最爱的标准库(random time)

    Python继续! random 包括返回随机数的函数. 这里跟C++一样,产生的是伪随机数,并非全然随机数. random中一些重要的函数: random() 返回0<n<=1的随机数n ...

  9. 导入解析excel小结

    导入解析excel小结 控制器例子:

  10. node-webkit 开发环境搭建

    node-webkit支持的操作系统类型: Linunx:32bit / 64bit Windows: win32 Mac:32bit,10.7+ 开发环境 1,根据自己的操作系统下载响应的nw二进制 ...