//建立索引的类,把目录下的文件内容都加载到内存,
public class TxtFileIndexer {
public static void main(String[] args) throws Exception{//indexDir is the directory that hosts Lucene's index files
//目标存放路径
Directory indexDir =FSDirectory.open(new File("D:\\feng"));//dataDir is the directory that hosts the text files that to be indexed
//指定索引路径
File dataDir = new File("D:\\feng\\oracle");Analyzer luceneAnalyzer = new StandardAnalyzer(Version.LUCENE_30);
File[] dataFiles = dataDir.listFiles();
IndexWriter indexWriter = new IndexWriter(indexDir,luceneAnalyzer,true,IndexWriter.MaxFieldLength.UNLIMITED);
long startTime = new Date().getTime();
for(int i = 0; i < dataFiles.length; i++){
if(dataFiles[i].isFile() && dataFiles[i].getName().endsWith(".txt")){
System.out.println("Indexing file " + dataFiles[i].getCanonicalPath());
Document document = new Document();
document.add(new Field("fileName", dataFiles[i].getName(), Field.Store.YES, Field.Index.NOT_ANALYZED));
document.add(new Field("content", new InputStreamReader(new FileInputStream(dataFiles[i].getCanonicalPath()), "utf-8")));
indexWriter.addDocument(document);
}
}
// optimize()方法是对索引进行优化,进行了索引优化后,索引才算是真正的生效。
indexWriter.optimize();
indexWriter.close();
long endTime = new Date().getTime();
System.out.println("It takes " + (endTime - startTime)
+ " milliseconds to create index for the files in directory "
+ dataDir.getPath());
}
//在建立好的索引上进行搜索类,
public class TxtFileSearcher {
public static void main(String[] args) throws Exception{
String indexDir = "D:\\feng";
String queryStr = "Database";
Directory dir = FSDirectory.open(new File(indexDir));
IndexSearcher is = new IndexSearcher(dir);
if(!indexDir.exists()){
System.out.println("The Lucene index is not exist");
return;
}
QueryParser parser = new QueryParser(Version.LUCENE_30, "content", new StandardAnalyzer(Version.LUCENE_30));
Query query = parser.parse(queryStr);
long start = System.currentTimeMillis();
TopDocs hits = is.search(query, 10);
long end = System.currentTimeMillis();
System.out.println("find " + hits.totalHits+"耗时:"+(end-start));
for (ScoreDoc scoreDoc : hits.scoreDocs) {
Document doc = is.doc(scoreDoc.doc);
System.out.println(doc.get("fileName"));
}
is.close();
}
}