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 Streaming从Flume Poll数据案例实战和内幕源码解密

    本节课分成二部分讲解: 一.Spark Streaming on Polling from Flume实战 二.Spark Streaming on Polling from Flume源码 第一部分 ...

  2. 爪哇国新游记之十九----使用Stack检查数字表达式中括号的匹配性

    /** * 辅助类 * 用于记载字符和位置 * */ class CharPos{ char c; int pos; public CharPos(char c,int pos){ this.c=c; ...

  3. sql中limit和汇总函数的集合使用

    limit和求和一起 select SUM(A.high) from (select * from minute1_K order by DateTime desc limit 10) A limit ...

  4. ODOO翻译导出窗口修正

    当你辛苦修正odoo的翻译,想把它导出到其它系统的时候, 你会发现导出向导窗口无法显示下拉列表. 下面的方法修正此问题: 1.打开"开发者模式". 2.去到翻译导出向导:设置 - ...

  5. 【Python3 爬虫】06_robots.txt查看网站爬取限制情况

    大多数网站都会定义robots.txt文件来限制爬虫爬去信息,我们在爬去网站之前可以使用robots.txt来查看的相关限制信息 例如: 我们以[CSDN博客]的限制信息为例子 在浏览器输入:http ...

  6. rabbitMq视频教程

    http://edu.51cto.com/index.php?do=lesson&id=83136

  7. 通过浏览器查看nginx服务器状态配置方法

    通过浏览器查看nginx服务器状态配置方法 投稿:junjie 字体:[增加 减小] 类型:转载 这篇文章主要介绍了通过浏览器查看nginx服务器状态配置方法,本文讲解开启nginx-status的配 ...

  8. Python实时语音识别控制

    代码地址如下:http://www.demodashi.com/demo/12946.html Python实时语音识别控制 概述 本文中的语音识别功能采用 百度语音识别库 ,首先利用 PyAudio ...

  9. Jenkins部署java项目实例

    源码管理 选择 “git”, Repository URL填写你的git地址,并配置对应的key,大家最好事前先在jenkins这台机器上能够直接远程git操作私有仓库 构建触发器.构建环境.Pre ...

  10. 《Mining the Web:Transforming Customer Data into Customer Value》读后札记

    <Mining the Web:Transforming Customer Data into Customer Value> <Web数据挖掘:将客户数据转化为客户价值> — ...