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将被索引文件目录中的所有文件建立索引,布布扣,bubuko.com
原文:http://www.cnblogs.com/fengweixin/p/3597961.html