/**
* 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;
}
【直播】Lucene学习进阶--程序篇1<最新版>
最新推荐文章于 2024-05-01 03:02:07 发布