需要
lucene-analyzers-3.6.2.jar
lucene-core-3.6.2.jar
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Date;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriter.MaxFieldLength;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;
public class LuceneIndex {
// 索引器
private IndexWriter writer = null;
public static void main(String[] args) throws Exception {
// 申明一个对象
LuceneIndex indexer = new LuceneIndex();
// create index
Date start = new Date();
indexer.writeToIndex();
Date end = new Date();
System.out.println("建立索引用时" + (end.getTime() - start.getTime()) + "毫秒");
indexer.close();
}
public void close() throws Exception {
writer.close();
}
public LuceneIndex() throws IOException {
Directory directory = FSDirectory.open(new File(
Constants.INDEX_STORE_PATH));// 索引文件的存放目录
Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_36);
writer = new IndexWriter(directory, analyzer, true,
MaxFieldLength.LIMITED);
}
public void writeToIndex() throws IOException {
File folder = new File(Constants.INDEX_FILE_PATH);
if (folder.isDirectory()) {
String[] files = folder.list();
for (String file : files) {
File newFile = new File(folder, file);
Document doc = getDocument(newFile);
System.out.println("creating Index:" + file + "");
writer.addDocument(doc);
}
}
}
private Document getDocument(File f) throws IOException {
Document doc = new Document();
FileInputStream is = new FileInputStream(f);
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
String line = reader.readLine();
StringBuffer sb = new StringBuffer();
while (line != null) {
sb.append(line).append("\n");
line = reader.readLine();
}
doc.add(new Field("contents", sb.toString(), Field.Store.YES,
Field.Index.ANALYZED));
doc.add(new Field("path", f.getAbsolutePath(), Field.Store.YES,
Field.Index.ANALYZED));
return doc;
}
}
import java.io.File;
import java.io.IOException;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.queryParser.MultiFieldQueryParser;
import org.apache.lucene.queryParser.ParseException;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;
public class LuceneSearch {
// 声明一个IndexSearcher对象
private IndexSearcher searcher = null;
// 声明一个Query对象
private Query query = null;
public static void main(String[] args) throws Exception {
LuceneSearch test = new LuceneSearch();
test.search("人");
}
public LuceneSearch() throws IOException, IOException {
Directory directory = FSDirectory.open(new File(
Constants.INDEX_STORE_PATH));// 索引文件的存放目录
searcher = new IndexSearcher(directory);
}
public void search(String keyword) throws Exception {
Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_36);
System.out.println("正在检索关键字 : " + keyword);
String[] queryFileds = { "contents", "path" };
QueryParser parser = new MultiFieldQueryParser(Version.LUCENE_36,
queryFileds, analyzer);
Query query = parser.parse(keyword);
TopDocs result = searcher.search(query, 1000);
System.out.println("检索到" + result.totalHits + "条符合条件的数据.");
if (result.totalHits != 0) {
for (ScoreDoc sd : result.scoreDocs) {
int docSn = sd.doc;
Document doc = searcher.doc(docSn);
System.out.println("文件名:" + doc.get("path"));
System.out.println("文件内容:" + doc.get("contents"));
}
}
}
}