Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言)。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎.
下面让我们看看它的基本使用方法.
public class HellowLuence {
/**
* 建立索引
*/
public void index() {
// 1、创建Directory
// Directory directory = new RAMDirectory();// 建立在内存中的
Directory directory = null;
try {
directory = FSDirectory.open(new File("D:/index"));// 创建在硬盘中
} catch (IOException e1) {
e1.printStackTrace();
}
// 2、创建IndexWriter
IndexWriterConfig iwc = new IndexWriterConfig(Version.LUCENE_35, new StandardAnalyzer(Version.LUCENE_35));
IndexWriter writer = null;
try {
writer = new IndexWriter(directory, iwc);
// 3、创建Document对象
Document doc = null;
// 4、位Docuent 添加Field
File f = new File("D:/lucene");
for (File file : f.listFiles()) {
doc = new Document();
doc.add(new Field("content", new FileReader(file)));
doc.add(new Field("filename", file.getName(), Field.Store.YES, Field.Index.NOT_ANALYZED));
doc.add(new Field("path", file.getAbsolutePath(), Field.Store.YES, Field.Index.NOT_ANALYZED));
// 5通过IndexWriter添加文档到索引中
writer.addDocument(doc);
}
} catch (CorruptIndexException e) {
e.printStackTrace();
} catch (LockObtainFailedException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (writer != null) {
try {
writer.close();
} catch (CorruptIndexException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
/**
* 搜索
*/
public void searcher() {
// 1.创建Directory
try {
Directory directory = FSDirectory.open(new File("D:/index"));
// 2.创建IndedxReaer
IndexReader reader = IndexReader.open(directory);
// 3.根据IndexReader创建IndexSearcher
IndexSearcher searcher = new IndexSearcher(reader);
// 4.创建搜索Query
// 创建parser来确定要搜索文件的内容,第二个参数表示要搜索的域
QueryParser parser = new QueryParser(Version.LUCENE_35, "content", new StandardAnalyzer(Version.LUCENE_35));
// 创建query,表示搜索域为content中包含java的文档
Query query = parser.parse("太多");
// 5.根据searcher搜索并且返回TopDocs
TopDocs tds = searcher.search(query, 10);
// 6.根据TopDocs获取ScoreDoc对象
ScoreDoc[] sds = tds.scoreDocs;
for (ScoreDoc sd : sds) {
Document d = searcher.doc(sd.doc);
System.out.println(d.get("filename") + "[" + d.get("path") + "]");
}
// 关闭reader
reader.close();
} catch (IOException e) {
e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
}
}
}
方法写完后进行测试
public class test {
@Test
public void test1() {
HellowLuence hellowLuence = new HellowLuence();
hellowLuence.index();
}
运行结果
@Test
public void test2() {
HellowLuence hellowLuence = new HellowLuence();
hellowLuence.searcher();
}
}