您的位置:首页 > 其它

【直播】Lucene学习进阶--程序篇1

2011-12-13 10:56 106 查看
/**
* V Lucene 3.5
* 创建索引
*/
public static void createIndex(){
File indexDir = new File(LUCENEINDEX);
File dataDir = new File(LUCENEDATA);

Analyzer luceneAnalyzer = new StandardAnalyzer(Version.LUCENE_35);
File[] dataFiles = indexDir.listFiles();

IndexWriter indexWriter = null;
try {
/**
* indexWriter	= new IndexWriter(SimpleFSDirectory.open(dataDir),luceneAnalyzer, true,IndexWriter.MaxFieldLength.LIMITED);
* 在最新版中这种方式已被不使用。
* 现在使用下面的方式创建indexWriter
*/
IndexWriterConfig indexWriterConfig = new IndexWriterConfig(Version.LUCENE_35, luceneAnalyzer);
indexWriter	= new IndexWriter(SimpleFSDirectory.open(dataDir), indexWriterConfig);
long startTime = new Date().getTime();
//注意:filed实例在多次添加的时候可以重用,节约构造field实例的时间。
Field f1 = new Field("name", "", Field.Store.YES, Field.Index.NOT_ANALYZED) ;
Field f2 = new Field("path", "", Field.Store.YES, Field.Index.NOT_ANALYZED) ;

List<FilePojo> result = tree(indexDir);
for (FilePojo po : result) {
String name = po.getName();
String path = po.getPath();
try {
System.out.println("Indexing file: " + path);
Document doc = new Document();
f1.setValue(name);
doc.add(f1);
f2.setValue(path);
doc.add(f2);
indexWriter.addDocument(doc);
} catch (IOException e) {
e.printStackTrace();
}
}

//查看IndexWriter里面有多少个索引
System.out.println("numDocs:"+indexWriter.numDocs());
indexWriter.commit();
long endTime = new Date().getTime();
System.out.println("耗时:" + (endTime - startTime));
} catch (CorruptIndexException e) {
e.printStackTrace();
} catch (LockObtainFailedException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
indexWriter.close();
} catch (CorruptIndexException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}

// 递归方法
private static List tree(File f) {
File[] childs = f.listFiles();
for (int i = 0; i < childs.length; i++) {
if (childs[i].isDirectory()) {
tree(childs[i]);
}else if(childs[i].isFile() && childs[i].getName().endsWith(".html")){
//执行索引
try {
FilePojo po = new FilePojo();
po.setName(childs[i].getName());
po.setPath(childs[i].getCanonicalPath());
result.add(po);
} catch (IOException e) {
e.printStackTrace();
}
}
}
return result;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: